Android set textview maxlength

Ограничить длину текста 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:

Читайте также:  Otg хаб с питанием для андроид

настройка длины программно

вот проблема, чтобы установить длину программно, вам нужно будет установить 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 и ограничивает отображение символов.

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

Я считаю, что это не так, как должно быть. Нажатие клавиш после достижения предела должно прекратить принимать больше входных данных, даже если оно не отображается.

Читайте также:  Negligee love stories android

Любое исправление по этому поводу?

Обновить

На основе приведенного ниже ответа для многострочного EditText добавьте также атрибут textMultiLine.

    Отключить автоматические предложения ( android:inputType=»textFilter» или textNoSuggestions ):

Я надеюсь, что это помогает

К сожалению, следующий ответ не работает. Однако это помогло нам выяснить, что ошибка, упомянутая Poly Bug, не воспроизводится, если ввод начинается с числа.

Вы можете использовать TextWatcher для прослушивания изменений EditText и предотвращения ввода пользователем слишком большого количества символов в поле. Для меня работает следующий код:

В afterTextChanged код сравнивает длину вставленного текста с максимальной длиной maxLength и удаляет все лишние символы.

Вы можете заменить все стандартные классы EditText следующим классом, чтобы использовать прослушиватель в сочетании с атрибутом maxLength XML:

Вы можете использовать InputFilter

InputFilters могут быть привязаны к Editables для ограничения изменений, которые могут быть сделаны для них.

Источник

Оцените статью