android EditText maxLength не работает

Это мой xml

<EditText
android:id="@+id/et_comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions|textVisiblePassword"
android:hint="Provide comments here..."
android:gravity="top"
android:maxLength="5"
android:textSize="12sp"
android:visibility="visible"
/>

не работает, используя этот код

TextView editEntryView = new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(5);
editEntryView.setFilters(filterArray);

maxLenth не работает, я не знаю, почему, но это не так.
Я проверил другие ответы в стеке, но они также не работают.
Проверьте, не конфликтуют ли какие-либо атрибуты EditText или в чем проблема?

EDIT: та же проблема стоит перед другими разработчиками
См. комментарии здесь такая же проблема сталкивается с манси и aat
И здесь в комментариях та же проблема стоит перед Винси и Райзером

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

4 ответов


довольно старый пост, но я заметил, как XML является действительным


Если вы используете InputFilter для edittext, то maxLength не будет работать.


попробуйте это, он будет работать как для maxlenght, так и для входного фильтра

month.setFilters(new InputFilter[]{new InputFilterMinMax("0", "12"), new InputFilter.LengthFilter(2)});

Если у вас уже есть InputFilter, maxLength не будет работать. Вам нужно будет создать дополнительный InputFilter и добавить его:

    // Filter for comma character
    String blockCharacterSet = ",";
    InputFilter filter = (source, start, end, dest, dstart, dend) -> {
        if (source != null && blockCharacterSet.contains(("" + source))) {
            return "";
        }
        return null;
    };

    // Filter for max Length
    InputFilter filter1 = new InputFilter.LengthFilter(20);

    // Set the filters
    et_list_name.setFilters(new InputFilter[] { filter, filter1 });