Какой лучший способ ограничить длину текста EditText
в Android?
Есть ли способ сделать это через XML?
android
android-edittext
maxlength
hpique
источник
источник
Ответы:
Документация
пример
источник
maxLength
Недвижимость по- прежнему работает.android:maxLength
это эквивалентноInputFilter.LengthFilter
, поэтому при программном изменении его фильтра вы также изменили его XML-фильтр.setFilters
перестанутandroid:maxLength
работать, потому что это перезаписывает фильтр, установленный XML. Другими словами, если вы устанавливаете какие-либо фильтры программно, вы должны установить их все программно.используйте входной фильтр, чтобы ограничить максимальную длину текстового представления.
источник
InputFilter
. Он переопределяетandroid:maxlength
в файле XML, поэтому нам нужно добавитьLengthFilter
этот путь.источник
TextWatcher
.Примечание для людей, которые уже используют пользовательский фильтр ввода и также хотят ограничить максимальную длину:
Когда вы назначаете входные фильтры в коде, все ранее установленные входные фильтры очищаются, включая один, установленный с помощью
android:maxLength
. Я узнал об этом, когда пытался использовать пользовательский фильтр ввода, чтобы предотвратить использование некоторых символов, которые мы не разрешаем в поле пароля. После установки этого фильтра с помощью setFilters maxLength больше не наблюдалось. Решением было установить maxLength и мой пользовательский фильтр вместе программно. Что-то вроде этого:источник
источник
У меня была эта проблема, и я считаю, что мы упускаем хорошо объясненный способ сделать это программно, не теряя уже установленные фильтры.
Установка длины в XML:
Как правильно говорится в принятом ответе, если вы хотите задать для EditText фиксированную длину, которую вы не будете менять в будущем, просто определите в XML-файле EditText:
Установка длины программно
Чтобы установить длину программно, вам нужно установить ее через
InputFilter
. Но если вы создадите новый InputFilter и установите его вEditText
вы потеряете все другие уже определенные фильтры (например, maxLines, inputType и т. Д.), Которые вы могли бы добавить либо через XML, либо программно.Так что это НЕПРАВИЛЬНО :
Чтобы не потерять ранее добавленные фильтры, вам нужно получить эти фильтры, добавить новый (в данном случае maxLength) и установить фильтры обратно на
EditText
следующее:Ява
Однако Kotlin упростил задачу для всех, вам также нужно добавить фильтр к уже существующим, но это можно сделать с помощью простого:
источник
Для всех, кто интересуется, как этого добиться, вот мой расширенный
EditText
классEditTextNumeric
..setMaxLength(int)
- устанавливает максимальное количество цифр.setMaxValue(int)
- ограничить максимальное целое значение.setMin(int)
- ограничить минимальное целочисленное значение.getValue()
- получить целочисленное значениеПример использования:
Все остальные методы и атрибуты, которые относятся к
EditText
, конечно, тоже работают.источник
По наблюдениям goto10 я собрал следующий код для защиты от потери других фильтров с установкой максимальной длины:
источник
источник
Xml
Ява:
Котлин:
источник
Другой способ добиться этого - добавить следующее определение в файл XML:
Это ограничит максимальную длину
EditText
виджета до 6 символов.источник
Из material.io вы можете использовать в
TextInputEditText
сочетании сTextInputLayout
:Вы можете настроить пароль EditText с помощью drawable:
Или вы можете ограничить длину текста с / без счетчика:
Зависимость:
источник
XML
android:maxLength="10"
Программный:
Примечание: внутренне, EditText & TextView анализируют значение
android:maxLength
в XML и используютInputFilter.LengthFilter()
для его применения.Смотрите: TextView.java # L1564
источник
Это пользовательский класс EditText, который позволяет фильтру длины жить вместе с другими фильтрами. Благодаря ответу Тима Галлахера (ниже)
источник
это простой способ в xml:
если вам требуется установить 4 символа в редактируемом тексте xml, используйте
источник
Это отлично работает ...
android:maxLength="10"
это будет принимать только
10
символы.источник
Попробуйте это для Java программно :
источник
myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
Я видел много хороших решений, но я хотел бы дать, как мне кажется, более полное и удобное решение, которое включает в себя:
1, предельная длина.
2, если ввести больше, дать обратный вызов, чтобы вызвать тост.
3, курсор может быть в середине или хвосте.
4, пользователь может ввести, вставив строку.
5, Всегда отбрасывайте входные данные переполнения и сохраняйте источник.
Что мне не удалось сделать, так это то, что если пользователь выделил часть текущего ввода и попытался вставить очень длинную строку, я не знаю, как восстановить выделение.
Например, максимальная длина установлена равной 10, пользователь вводит «12345678» и помечает «345» в качестве выделения и пытается вставить строку «0000», которая превысит ограничение.
Когда я пытаюсь использовать edit_text.setSelection (start = 2, end = 4) для восстановления исходного состояния, в результате просто вставляется 2 пробела как '12 345 678', а не выделение источника. Я бы хотел, чтобы кто-то решил это.
источник
Вы можете использовать
android:maxLength="10"
в EditText. (Здесь ограничение до 10 символов)источник
Котлин:
ZTE Blade A520
имеет странный эффект. Когда вы набираете более 10 символов (например, 15),EditText
отображаются первые 10, но остальные 5 не видны и недоступны. Но когда вы удаляете символы с помощьюBackspace
, сначала удаляются правильные 5 символов, а затем удаляются оставшиеся 10. Чтобы преодолеть это поведение, используйте решение :или это:
или это, если вы хотите получить предложения:
источник
это простой способ в xml:
для его настройки вы можете использовать следующую функцию
источник