在Android中限制EditText文本长度的最佳方法是什么?
有没有通过xml实现这一点的方法?
在Android中限制EditText文本长度的最佳方法是什么?
有没有通过xml实现这一点的方法?
当前回答
我使用的是“maxLength”,但它对我不起作用。因此,根据我的经验,我尝试了一些方法。我发现了问题。我必须申报身份证。然后:
android:id="@+id/editTextTest"
android:maxLength="10"
其他回答
文档
实例
android:maxLength="10"
使用输入筛选器限制文本视图的最大长度。
TextView editEntryView = new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(8);
editEntryView.setFilters(filterArray);
我曾经遇到过这个问题,我认为我们缺少一种经过充分解释的方法,在不丢失已经设置的过滤器的情况下,通过编程实现这一点。
在XML中设置长度:
由于接受的答案正确地表明,如果您想为EditText定义一个固定长度,并且以后不会再更改,只需在EditText XML中定义:
android:maxLength="10"
以编程方式设置长度
要以编程方式设置长度,您需要通过InputFilter进行设置。但是,如果创建一个新的InputFilter并将其设置为EditText,则会丢失所有其他已定义的过滤器(例如maxLines、inputType等),这些过滤器可能是通过XML或编程添加的。
所以这是错误的:
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});
为了避免丢失以前添加的过滤器,您需要获取这些过滤器,添加新的过滤器(在本例中为maxLength),并将过滤器设置回EditText,如下所示:
Java
InputFilter[] editFilters = editText.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = new InputFilter.LengthFilter(maxLength);
editText.setFilters(newFilters);
然而,Kotlin让每个人都更容易,您还需要将过滤器添加到现有的过滤器中,但您可以通过简单的操作实现这一点:
editText.filters += InputFilter.LengthFilter(maxLength)
实现此目的的另一种方法是将以下定义添加到XML文件中:
<EditText
android:id="@+id/input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="number"
android:maxLength="6"
android:hint="@string/hint_gov"
android:layout_weight="1"/>
这将限制EditText小部件的最大长度为6个字符。
由于goto10的观察,我将以下代码组合在一起,通过设置最大长度来防止丢失其他过滤器:
/**
* This sets the maximum length in characters of an EditText view. Since the
* max length must be done with a filter, this method gets the current
* filters. If there is already a length filter in the view, it will replace
* it, otherwise, it will add the max length filter preserving the other
*
* @param view
* @param length
*/
public static void setMaxLength(EditText view, int length) {
InputFilter curFilters[];
InputFilter.LengthFilter lengthFilter;
int idx;
lengthFilter = new InputFilter.LengthFilter(length);
curFilters = view.getFilters();
if (curFilters != null) {
for (idx = 0; idx < curFilters.length; idx++) {
if (curFilters[idx] instanceof InputFilter.LengthFilter) {
curFilters[idx] = lengthFilter;
return;
}
}
// since the length filter was not part of the list, but
// there are filters, then add the length filter
InputFilter newFilters[] = new InputFilter[curFilters.length + 1];
System.arraycopy(curFilters, 0, newFilters, 0, curFilters.length);
newFilters[curFilters.length] = lengthFilter;
view.setFilters(newFilters);
} else {
view.setFilters(new InputFilter[] { lengthFilter });
}
}