Ограничить длину текста EditText в Android
каков наилучший способ ограничить длину текста EditText в Android?
есть ли способ сделать это через XML?
16 ответов
используйте входной фильтр для ограничения максимальной длины текстового представления.
примечание для людей, которые уже используют пользовательский фильтр ввода и и хотите ограничить максимальную длину:
при назначении входных фильтров в коде все ранее установленные входные фильтры очищаются, включая один набор с android:maxLength . Я обнаружил это при попытке использовать пользовательский фильтр ввода, чтобы предотвратить использование некоторых символов, которые мы не разрешаем в поле пароля. После установки этого фильтра с помощью setFilters maxLength больше не наблюдался. Решение было чтобы установить maxlength и мой пользовательский фильтр программно. Что-то вроде этого:—5—>
для тех, кто еще задается вопросом, как этого достичь, вот мой расширенный EditText класс EditTextNumeric .
.setMaxLength(int) — устанавливает максимальное количество цифр
.setMaxValue(int) — ограничить максимальное целочисленное значение
.setMin(int) — ограничить минимальное целочисленное значение
.getValue() — получить целочисленное значение
все другие методы и атрибуты, которые применяются к EditText , конечно, тоже работают.
из-за наблюдения goto10 я собрал следующий код для защиты от потери других фильтров с установкой максимальной длины:
другой способ достичь этого-добавить следующее определение в XML-файл:
это ограничит максимальную длину EditText виджет до 6 символов.
у меня была эта проблема, и я считаю, что нам не хватает хорошо объясненного способа сделать это программно, не теряя уже установленных фильтров.
установка длины в XML:
как правильно указано в принятом ответе, если вы хотите определить фиксированную длину для EditText, который вы не будете изменять в будущем, просто определите в своем EditText XML:
настройка длины программно
вот проблема, чтобы установить длину программно, вам нужно будет установить InputFilter но как только вы установите его, все остальные фильтры уйдут (например, maxLines, inputType и т. д.). Чтобы избежать потери предыдущих фильтров, вам нужно получить эти предыдущие примененные фильтры, добавить maxLength и установить фильтры обратно в EditText следующим образом:
Xml
Java:
Котлин:
это пользовательский класс EditText, который позволяет фильтру длины жить вместе с другими фильтрами. Благодаря ответу Тима Галлахера (ниже)
это простой способ в XML:
Если u требуется установить 4 символа в XML edit-text, используйте это
это прекрасно работает.
это будет принимать только 10 символы.
Я видел много хороших решений, но я хотел бы сказать, что я думаю как более полное и удобное решение, которое включает:
1, предельная длина.
2, Если ввод больше, дайте обратный вызов, чтобы вызвать тост.
3, курсор может быть в середине или хвосте.
4, пользователь может вводить, вставив строку.
5, Всегда сбрасывайте входной сигнал переполнения и держите начало.
то, что я не смог сделать, это, если пользователь выделит часть текущего ввода и попытается вставить очень длинную строку, я не знаю как восстановить выделить.
например, максимальная длина установлена в 10, пользователь ввел «12345678», и отметьте » 345 «как выделение, и попробуйте вставить строку «0000», которая превысит ограничение.
Источник
Android EditText maxLength позволяет пользователю вводить больше
Я уже установил атрибут maxLength для виджета EditText в файле макета xml и ограничивает отображение символов.
Но он по-прежнему позволяет пользователю нажимать больше букв на клавиатуре, а обратная обработка удаляет эти дополнительные нажатия, а не последнюю букву на дисплее.
Я считаю, что это не так, как должно быть. Нажатие клавиш после достижения предела должно прекратить принимать больше входных данных, даже если оно не отображается.
Любое исправление по этому поводу?
Обновить
На основе приведенного ниже ответа для многострочного EditText добавьте также атрибут textMultiLine.
- Отключить автоматические предложения ( android:inputType=»textFilter» или textNoSuggestions ):
Я надеюсь, что это помогает
К сожалению, следующий ответ не работает. Однако это помогло нам выяснить, что ошибка, упомянутая Poly Bug, не воспроизводится, если ввод начинается с числа.
Вы можете использовать TextWatcher для прослушивания изменений EditText и предотвращения ввода пользователем слишком большого количества символов в поле. Для меня работает следующий код:
В afterTextChanged код сравнивает длину вставленного текста с максимальной длиной maxLength и удаляет все лишние символы.
Вы можете заменить все стандартные классы EditText следующим классом, чтобы использовать прослушиватель в сочетании с атрибутом maxLength XML:
Вы можете использовать InputFilter
InputFilters могут быть привязаны к Editables для ограничения изменений, которые могут быть сделаны для них.
Источник