2010-11-23 3 views
39

Я хотел бы создать EditText, который принимает только числа, имеет максимум 4 числа и никогда не будет уже, если бы он был заполнен 4 цифрами (не сжимается при пустом или должен расширяться, чтобы разместить 4 числа, поэтому он исправлен.)В Android, как создать EditText фиксированной ширины?

Первые 2 выполнены с помощью: android: inputType = "number" and android: maxLength = "4".

Как установить минимальную длину?

+0

исключает (не включает) или принимает (включает)? – 2014-05-16 18:05:10

ответ

34

Немного хаком, но вы можете положить ваши EditText Внутри FrameLayout наряду с другими TextView с text="0000" и visibility=invisible.

FrameLayout должен иметь width=wrap_content и ваш EditText будет width=match_parent.
Это должно всегда делать правильную ширину.

Преимущество этого в том, что это 100% xml-side, никакого задействованного кода.

<FrameLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="0000" 
    android:visibility="invisible" /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:maxLength="4" /> 
</FrameLayout> 
+0

Это на самом деле работает лучше, чем ответ kcoppock, потому что это приводит к текстовому виду с правой стороны. Но, определенно, взломать. – ab11 2010-11-23 16:29:35

+0

Я пытался сделать то, что сказал Жан, но я не мог по какой-то причине. Я закончил тем, что использовал подсказки. – Quv 2012-06-30 13:27:34

0

Не знаете о встроенном решении, но вы можете попробовать пройти пассивно проверить длину и поднять диалог с сообщением об ошибке на момент отправки.

0

Проблема заключается в том, что виджет EditText может потерять фокус из-за множества различных действий, таких как касание другого чувствительного представления, кнопки меню или (жесткого управления курсором) и т. Д. Ограничение максимальной длины или типа ввода может быть выполнено во время процесса привязки (принять символ, если он проходит фильтр или длина не превышена). но потеря фокуса может возникать каждый раз, даже если представление еще не завершено, а вход для короткого -> поэтому не существует встроенного решения минимальной длины, потому что приложение будет блокировать в этот момент выполнение другого события или задачи. По крайней мере, вы должны подтвердить свой ввод, прежде чем перейти к следующему шагу в вашем рабочем процессе.

93

Один редко используется (AFAIK) атрибут EditText, который вы можете использовать это:

android:ems="4"

Это делает EditText точно 4 Эмс шириной. Ширина em - это ширина самого широкого (M) символа в выбранном шрифте.

+3

Это работает, но поскольку я допускаю только числовой ввод, ширина 4 em намного шире, чем необходимо. Я могу поиграть, чтобы получить лучшую ширину, но это все еще немного неточно. – ab11 2010-11-23 16:45:10

+0

Работал идеально для меня. Мне просто понадобилось текстовое поле фиксированной длины, которое могло иметь от 1 до 5 цифр в нем и выглядело хорошо, независимо от того, сколько цифр введено пользователем. – ArtOfWarfare 2012-09-06 21:12:53

2

Использование андроида: ширина = «XXX.Xdp»

Это позволяет установить ширину в пикселях плотности, которые должны быть по отношению к плотности экрана. Я попытался использовать ems, основанный на поле шириной 2 символа, но поскольку ems требует int, 2 был слишком маленьким, а 3 - слишком большим. Blech.

0

Я использую android: layout_width = "60dip" так согласен с mike fratto.

Решение ems также представляется интересным.

Phil

8

Вы также можете попробовать. , ,

android:ems="4" 
android:maxEms="4" 
android:layout_width="wrap_content" 

. , ,это должно обеспечить сжатый припадок, возможно, допускаемый андроидом стилем EditText по умолчанию

Для дополнительного контроля с прокладкой на левом и правом вы можете использовать

android:background="#ffffff" 
android:paddingLeft="0dp" 
android:paddingRight="0dp" 
1

Существует невероятно простой способ сделать это программно.

myEditText.setLayoutParams(new LinearLayout.LayoutParams(200, 50)); 

Это установило бы ширину 200 и высоту до 50!

Наслаждайтесь :)

0

Вы можете установить выравнивание другого мудрый, когда вы кладете характер больше ширины wditText, чем это ширина увеличения или ширина EditText. Для управления этими вещами установите toLeftOf и toRightOf из приведенного выше представления. Только одно решение

18

В моей ситуации мне нужно, чтобы вид был шириной 6 цифр. android: ems сделали поле слишком широким (так как M-символ шире цифры).

В итоге я использовал прозрачный намек, который определяет минимальную ширину поля. Пример ниже - шесть цифр.

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="000000" 
     android:textColorHint="#00FFFFFF" 
     android:maxLength="6" 
     android:inputType="numberPassword" /> 

Данное решение не зависит от шрифта, интервала между письмами и других факторов, которые могут отличаться. TextColorHint - непрозрачный белый цвет 0%, поэтому подсказка никогда не должна быть видимой пользователю.

Смежные вопросы