android EditText maxLength 不工作

android EditText maxLength not working

这是我的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 属性发生冲突或有什么问题?

编辑:其他开发人员也面临同样的问题
查看评论 here Mansi 和 aat
面临同样的问题 here 在评论中,Vincy 和 Riser 面临同样的问题

编辑:问题已解决
我正在使用覆盖 xml 中的最大长度的输入过滤器,使其无法工作。
输入过滤器对我不起作用的原因是我使用了另一个输入过滤器,它覆盖了之前的 maxLength 输入过滤器。
将它变成单个输入过滤器为我解决了这个问题。

如果您对编辑文本使用 InputFilter,则 maxLength 将不起作用。

相当老 post 但是,我注意到 XML 是一个实际的 EditText 对象,而您将过滤器添加到可以处理它的 TextView不同于 EditText。如果您手动添加 InputFilter 对象,xml 属性 将被覆盖。

您将 InputFilter 添加到 View 的示例代码似乎是一个 TextView 对象。如果您手动添加过滤器,请确保拉出正确的视图并将其转换为 EditText——它现在对我有用。

祝你好运。

试试这个,它对输入过滤器中的两个最大长度都有效

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 });

添加字符限制和输入限制。

   private String BlockCharacterSet_Name = "\@$#!=><&^*+\"\'";   

 mFirstName.setFilters(new InputFilter[] {new InputFilter.LengthFilter(25),inputFilter_Name});



 private InputFilter inputFilter_Name = new InputFilter() { //filter input for name fields
        @Override
        public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
            if (charSequence != null && BlockCharacterSet_Name.contains(("" + charSequence))) {
                return "";
            }
            return null;
        }
    };

{new InputFilter.LengthFilter(25),inputFilter_Name}

允许您在同一个 InputFilter 中同时设置最大长度限制和特殊字符限制,因此您不需要为其创建单独的 Inputfilter。

试试这个:

val existingFilters: Array<InputFilter> = editText.filters
editText.filters = existingFilters.apply { plus(filter) }

您需要获取通过 XML 应用的 maxLength 等现有过滤器的列表,然后向其中添加更多过滤器。在您的情况下,editText 的 maxLength 属性 已被您尝试应用的自定义 InputFilter 覆盖。

在我的例子中使用了 DataBinding,但有人使用 ViewBinding 在代码中更改了 filter

binding.edit_text.filters = arrayOf<InputFilter>(object : InputFilter {
    override fun filter(
        source: CharSequence?,
        start: Int,
        end: Int,
        dest: Spanned?,
        dstart: Int,
        dend: Int
    ): CharSequence {
        return source.toString().filter { it.toString().matches(("[${LETTERS}]").toRegex()) }
    }
})

Android 在我从 EditText.

中删除该 ID 之前,Studio 没有找到引用“@+id/edit_text”的方法

If you are using InputFilter for the edittext, then maxLength will not work.

添加滤镜替换原来的滤镜是正确的。

您可以在 xml 中使用 android:maxLength="5"

并且在您的代码中只需添加一个过滤器而不替换现有的过滤器。

科特林:

editText.filters = arrayOf(
  *editText.filters,
  InputFilter.AllCaps(), // your filter
  // other filters
)