如何限制EditText仅接受字母数字字符,以便无论用户键入的是小写还是大写键,EditText都将显示为大写
该InputFilter
解决方案效果很好,可以让您完全控制,以过滤出比更好的颗粒度的输入android:digits
。如果所有字符均有效,则该filter()
方法应返回;如果某些字符无效,则仅返回null
有效字符中的a CharSequence
。如果复制并粘贴了多个字符,并且其中一些无效,则仅保留有效字符。
public static class AlphaNumericInputFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder();
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (Character.isLetterOrDigit(c)) {
builder.append(c);
}
}
boolean allCharactersValid = (builder.length() == end - start);
return allCharactersValid ? null : builder.toString();
}
}
另外,设置您的时InputFilter
,必须确保不要覆盖InputFilters
您的EditText
;上的其他设置。这些可以用XML设置,例如android:maxLength
。您还必须考虑设置的顺序InputFilters
,它们将以该顺序应用。幸运的是,InputFilter.AllCaps
已经存在,因此与我们的字母数字过滤器一起应用将保留所有字母数字文本,并将其转换为大写。
ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(editText.getFilters()));
curInputFilters.add(0, new AlphaNumericInputFilter());
curInputFilters.add(1, new InputFilter.AllCaps());
InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
editText.setFilters(newInputFilters);