这是我的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输入过滤器。
将它变成单个输入过滤器可以解决这个问题。
答案 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。