Android EditText最大长度无效

22

这是我的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属性是否存在冲突或者问题出在哪里?

编辑:其他开发人员面临同样的问题
这里的评论中Mansi和aat都遇到了同样的问题
以及这里的评论中Vincy和Riser也遇到了同样的问题。

编辑:问题已解决
我使用了一个输入过滤器(input filter)覆盖了xml中的maxLength,导致其无法工作。
导致输入过滤器无法正常工作的原因是我使用了另一个输入过滤器,它覆盖了先前的maxLength输入过滤器。
将它们合并成一个输入过滤器后,问题得到了解决。


它正在工作,android:maxLength = "5" 有效! - Uma Kanth
但是对我来说它没有起作用 :/ - Salmaan
那就是我正在做的事情! - Salmaan
展示一下你所说的“不工作”是什么意思?也许可以提供一张截图或其他相关信息。 - almightyGOSU
@Salmaan 可能是因为你的提示超过了 maxLength 的长度限制? - almightyGOSU
显示剩余2条评论
8个回答

22

试试这个,它适用于最大长度和输入过滤

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

这行代码很有用:month.setFilters(new InputFilter[] {new InputFilter.LengthFilter(2)}); - Anand Kumar Jha
特别是如果您想应用多个过滤器 - Anand Kumar Jha
对于 Xamarin,代码为:new Android.Text.InputFilterLengthFilter(2)。 - Ultimo_m

19
如果您正在为EditText使用InputFilter,则maxLength将无法起作用。

16

虽然这是一篇旧帖子,但我注意到XML实际上是一个EditText对象,而您正在向TextView添加过滤器,这可能与EditText处理方式不同。 如果您手动添加InputFilter对象,则xml属性将被覆盖。

示例代码中,您向View添加InputFilter,似乎是一个TextView对象。 确保选择正确的视图,并在手动添加过滤器时将其强制转换为EditText - 它现在对我有效。

祝你好运。


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

2
如果您正在为EditText使用InputFilter,则maxLength将无效。如果添加一个替换原始过滤器的过滤器,那么就可以使用android:maxLength="5"在xml中设置最大长度。在代码中添加一个过滤器而不替换已存在的过滤器即可。
Kotlin代码示例:
editText.filters = arrayOf(
  *editText.filters,
  InputFilter.AllCaps(), // your filter
  // other filters
)

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

在我从EditText中移除了该ID之前,Android Studio找不到与"@+id/edit_text"相关的方法。


0

试试这个:

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

你需要通过XML获取已应用的 maxLength 之类的现有过滤器列表,然后再添加更多过滤器。在你的情况下,你试图应用的自定义 InputFilter 覆盖了 editText 的 maxLength 属性。

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接