Intereting Posts
Ненавязчивое всплывающее окно, которое не блокирует перетаскивание n в Android Можно ли безопасно использовать идентификатор Android View для нескольких видов деятельности? Лучшие практики для соглашений об именах ID в Android? Html.ImageGetter TextView Иногда Logcat показывает, что «GREF увеличился до 301», Android WebClient, возвращающий ресурс изображения через WebResourceResponse – не отображает изображение Как предоставить различный доступ к пользователю разных типов для входа в Firebase? Переключение между изображениями Android Navigation Drawer и Up caret при использовании фрагментов Как установить тип содержимого на HttpURLConnection? Шаблон RxJava для запроса удаленного наблюдения с временным кешем Несколько предупреждений при создании с использованием Proguard Огромный размер неиспользуемого шрифта в Android Studio Можно ли пропускать onMeasure при добавлении представления в ViewGroup? Не удалось найти класс «org.apache.http.entity.mime.content.Filebody», ссылающийся на метод Деление на нулевую ошибку в .xml-файле

Ограничить длину текста EditText в Android

Каков наилучший способ ограничить длину текста EditText в Android?

Есть ли способ сделать это через xml?

Solutions Collecting From Web of "Ограничить длину текста EditText в Android"

Документация

пример

 android:maxLength="10" 

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

 TextView editEntryView = new TextView(...); InputFilter[] filterArray = new InputFilter[1]; filterArray[0] = new InputFilter.LengthFilter(8); editEntryView.setFilters(filterArray); 
 EditText editText = new EditText(this); int maxLength = 3; editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)}); 

Примечание для людей, которые уже используют настраиваемый фильтр ввода, а также хотят ограничить максимальную длину:

Когда вы назначаете входные фильтры в коде, все ранее установленные фильтры ввода очищаются, включая один набор с андроидом: maxLength. Я нашел это при попытке использовать настраиваемый фильтр ввода, чтобы предотвратить использование некоторых символов, которые мы не разрешаем в поле пароля. После установки этого фильтра с помощью setFilters maxLength больше не наблюдалось. Решение заключалось в том, чтобы программно настроить maxLength и мой пользовательский фильтр. Что-то вроде этого:

 myEditText.setFilters( new InputFilter[] { new PasswordCharFilter(), new InputFilter.LengthFilter(20)}); 

Только для Android:

  TextView tv = new TextView(this); tv.setFilters(new InputFilter[] { new InputFilter.LengthFilter(250) }); 

Для кого-то еще интересно, как этого добиться, вот мой расширенный класс EditTextNumeric .

.setMaxLength(int) – устанавливает максимальное количество цифр

.setMaxValue(int) – ограничение максимального целочисленного значения

.setMin(int) – предельное минимальное целое значение

.getValue() – получить целочисленное значение

 import android.content.Context; import android.text.InputFilter; import android.text.InputType; import android.widget.EditText; public class EditTextNumeric extends EditText { protected int max_value = Integer.MAX_VALUE; protected int min_value = Integer.MIN_VALUE; // constructor public EditTextNumeric(Context context) { super(context); this.setInputType(InputType.TYPE_CLASS_NUMBER); } // checks whether the limits are set and corrects them if not within limits @Override protected void onTextChanged(CharSequence text, int start, int before, int after) { if (max_value != Integer.MAX_VALUE) { try { if (Integer.parseInt(this.getText().toString()) > max_value) { // change value and keep cursor position int selection = this.getSelectionStart(); this.setText(String.valueOf(max_value)); if (selection >= this.getText().toString().length()) { selection = this.getText().toString().length(); } this.setSelection(selection); } } catch (NumberFormatException exception) { super.onTextChanged(text, start, before, after); } } if (min_value != Integer.MIN_VALUE) { try { if (Integer.parseInt(this.getText().toString()) < min_value) { // change value and keep cursor position int selection = this.getSelectionStart(); this.setText(String.valueOf(min_value)); if (selection >= this.getText().toString().length()) { selection = this.getText().toString().length(); } this.setSelection(selection); } } catch (NumberFormatException exception) { super.onTextChanged(text, start, before, after); } } super.onTextChanged(text, start, before, after); } // set the max number of digits the user can enter public void setMaxLength(int length) { InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.LengthFilter(length); this.setFilters(FilterArray); } // set the maximum integer value the user can enter. // if exeeded, input value will become equal to the set limit public void setMaxValue(int value) { max_value = value; } // set the minimum integer value the user can enter. // if entered value is inferior, input value will become equal to the set limit public void setMinValue(int value) { min_value = value; } // returns integer value or 0 if errorous value public int getValue() { try { return Integer.parseInt(this.getText().toString()); } catch (NumberFormatException exception) { return 0; } } } 

Пример использования:

 final EditTextNumeric input = new EditTextNumeric(this); input.setMaxLength(5); input.setMaxValue(total_pages); input.setMinValue(1); 

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

Из-за наблюдения goto10 я собрал следующий код для защиты от потери других фильтров с установкой максимальной длины:

 /** * This sets the maximum length in characters of an EditText view. Since the * max length must be done with a filter, this method gets the current * filters. If there is already a length filter in the view, it will replace * it, otherwise, it will add the max length filter preserving the other * * @param view * @param length */ public static void setMaxLength(EditText view, int length) { InputFilter curFilters[]; InputFilter.LengthFilter lengthFilter; int idx; lengthFilter = new InputFilter.LengthFilter(length); curFilters = view.getFilters(); if (curFilters != null) { for (idx = 0; idx < curFilters.length; idx++) { if (curFilters[idx] instanceof InputFilter.LengthFilter) { curFilters[idx] = lengthFilter; return; } } // since the length filter was not part of the list, but // there are filters, then add the length filter InputFilter newFilters[] = new InputFilter[curFilters.length + 1]; System.arraycopy(curFilters, 0, newFilters, 0, curFilters.length); newFilters[curFilters.length] = lengthFilter; view.setFilters(newFilters); } else { view.setFilters(new InputFilter[] { lengthFilter }); } } 

Другим способом в XML-файле.

  <EditText android:id="@+id/input" android:layout_width="0dip" android:layout_height="wrap_content" android:inputType="number" android:maxLength="6" android:hint="@string/hint_gov" android:layout_weight="1" /> 
 <EditText android:id="@+id/input" android:layout_width="0dip" android:layout_height="wrap_content" android:inputType="number" android:maxLength="6" android:hint="@string/hint_gov" android:layout_weight="1" /> 

android:maxLength="6" ограничивает длину EditText до 6 символов.

Это настраиваемый класс EditText, который позволяет фильтру продолжительности жить вместе с другими фильтрами. Благодаря ответу Тима Галлахера (см. Ниже)

 import android.content.Context; import android.text.InputFilter; import android.util.AttributeSet; import android.widget.EditText; public class EditTextMultiFiltering extends EditText{ public EditTextMultiFiltering(Context context) { super(context); } public EditTextMultiFiltering(Context context, AttributeSet attrs) { super(context, attrs); } public EditTextMultiFiltering(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setMaxLength(int length) { InputFilter curFilters[]; InputFilter.LengthFilter lengthFilter; int idx; lengthFilter = new InputFilter.LengthFilter(length); curFilters = this.getFilters(); if (curFilters != null) { for (idx = 0; idx < curFilters.length; idx++) { if (curFilters[idx] instanceof InputFilter.LengthFilter) { curFilters[idx] = lengthFilter; return; } } // since the length filter was not part of the list, but // there are filters, then add the length filter InputFilter newFilters[] = new InputFilter[curFilters.length + 1]; System.arraycopy(curFilters, 0, newFilters, 0, curFilters.length); newFilters[curFilters.length] = lengthFilter; this.setFilters(newFilters); } else { this.setFilters(new InputFilter[] { lengthFilter }); } } } 

Мы можем установить прямо в xml:

 android:maxLength="10" 

В XML-файле добавьте атрибут: –

 android:maxLength="10"