使用其他 InputFilter 以编程方式设置 EditText 的 max-length

我像这样使用 InputFilter 只允许 alpha 和数字

private InputFilter[] inputFilters = new InputFilter[] { new InputFilter()
{
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
for (int i = start; i < end; ++i)
{
if (!Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]*").matcher(String.valueOf(source.charAt(i))).matches())
{
return "";
}
}


return null;
}
} };

但问题是 xml 文件中的“ android: maxLlength”值不能用于这个 InputFilter

我认为我需要在 InputFilter 中的代码来设置 EditText 的最大长度

有人有好主意吗?

谢谢

69575 次浏览

试试这条路

输入过滤器

InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; ++i)
{
if (!Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]*").matcher(String.valueOf(source.charAt(i))).matches())
{
return "";
}
}


return null;
}
};

怎样申请

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText edt =(EditText)findViewById(R.id.edt) ;


edt.setFilters(new InputFilter[]{filter,new InputFilter.LengthFilter(10)});




}
public void setEditTextMaxLength(int length) {
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(length);
edt_text.setFilters(filterArray);
}

在@Deepak 的基础上,我使用了以下内容:

public void setEditTextMaxLength(final EditText editText, int length) {
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(length);
editText.setFilters(FilterArray);
}

如果我们想在 编辑文本中限制字符输入,那么 XML 布局中的 EditText将为我们提供 android:maxLength来实现这一点。但是在 Java 代码中,你可能想知道为什么没有 SetMaxLlength (int length)函数。其背后的原因是,当您想要限制 EditText 以接受某个值时,必须对它们进行筛选,而这将由 setFilters 调用。为了使 EditText 具有固定的大小,我们可以使用以下代码。

EditText et = new EditText(this);
int maxLength = 3;
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(maxLength);
et.setFilters(FilterArray);

一句简单的俏皮话是:

Java:

myEditText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(10) });

Kotlin:

myEditText.filters = arrayOf(InputFilter.LengthFilter(10))

你可以非常非常简单地使用这个函数:

 public static void setEditTextMaxLength(EditText editText, int length) {
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(length);
editText.setFilters(FilterArray);
}

在你的活动中使用这个:

setEditTextMaxLength(edt_passcode, 5);

为了科特林

myEditText.filters = arrayOf(InputFilter.LengthFilter(maxLength))

使用以下方法:

private void setEditTextMaxLength(EditText et, int maxLength) {
et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
}

在 Kotlin

textInputEditText.filters = arrayOf(InputFilter.LengthFilter(10))
et.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(20))

在 Kotlin