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
)
这是我的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
.
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
)