В Android, как создать EditText фиксированной ширины? - PullRequest
41 голосов
/ 23 ноября 2010

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

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

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

Ответы [ 10 ]

94 голосов
/ 23 ноября 2010

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

android:ems="4"

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

36 голосов
/ 23 ноября 2010

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

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

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

<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>
20 голосов
/ 20 апреля 2015

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

8 голосов
/ 19 июня 2013

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

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

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

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

android:background="#ffffff"
android:paddingLeft="0dp"
android:paddingRight="0dp"
2 голосов
/ 05 марта 2011

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

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

1 голос
/ 09 августа 2013

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

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

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

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

0 голосов
/ 29 сентября 2014

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

0 голосов
/ 24 марта 2011

Я использую Android: layout_width = "60dip", так что согласитесь с Майком Фратто.

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

Phil

0 голосов
/ 23 ноября 2010

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

0 голосов
/ 23 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...