android EditText maxLength无效

时间:2015-06-11 07:18:29

标签: java android filter 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属性是否有任何冲突或有什么问题?

编辑:其他开发者面临同样的问题
见评论here Mansi和aat面临同样的问题 并且here在评论中,Vincy和Riser面临同样的问题

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

7 个答案:

答案 0 :(得分:14)

试试这个,它适用于maxlenght和输入过滤器

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

答案 1 :(得分:13)

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

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

祝你好运。

答案 2 :(得分:12)

如果您正在使用InputFilter作为edittext,那么maxLength将无效。

答案 3 :(得分:1)

如果您已经有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 });

答案 4 :(得分:0)

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

   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。

答案 5 :(得分:0)

尝试一下:

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

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

答案 6 :(得分:0)

在我的例子中使用了 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 Studio 没有找到引用“@+id/edit_text”的方法,直到我从 EditText 中删除了那个 id。