В Android, как создать EditText фиксированной ширины?

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

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

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

Ответ 1

Немного hackish, но вы можете поместить свой 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>

Ответ 2

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

android:ems="4"

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

Ответ 3

В моей ситуации мне нужно, чтобы представление было 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%, поэтому подсказка никогда не должна быть видимой пользователю.

Ответ 4

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

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

., это должно обеспечить максимально возможную посадку, доступную по умолчанию для стиля edroidxt по умолчанию.

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

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

Ответ 5

Использовать android: width = "XXX.Xdp"

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

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Фил

Ответ 10

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