我的应用程序中有一个TextView,我希望用户只能输入字母数字字符。如何做到这一点?谢谢!
答案 0 :(得分:52)
在XML中,把它放在:
android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
答案 1 :(得分:16)
这是一个更好的解决方案......... https://groups.google.com/forum/?fromgroups=#!topic/android-developers/hS9Xj3zFwZA
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
edit.setFilters(new InputFilter[]{filter});
答案 2 :(得分:5)
InputFilter
解决方案运行良好,可让您完全控制以比android:digits
更精细的粒度过滤掉输入。如果所有字符都有效,则filter()
方法应返回null
,如果某些字符无效,则CharSequence
方法仅返回有效字符的public static class AlphaNumericInputFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// Only keep characters that are alphanumeric
StringBuilder builder = new StringBuilder();
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (Character.isLetterOrDigit(c)) {
builder.append(c);
}
}
// If all characters are valid, return null, otherwise only return the filtered characters
boolean allCharactersValid = (builder.length() == end - start);
return allCharactersValid ? null : builder.toString();
}
}
。如果复制并粘贴了多个字符,而某些字符无效,则只保留有效字符(如果任何字符无效,@ AchJ的解决方案将拒绝整个粘贴)。
InputFilter
另外,在设置InputFilters
时,您必须确保不要覆盖EditText
上设置的其他android:maxLength
;这些可以用XML设置,如InputFilters
。您还必须考虑InputFilters
设置的顺序。与长度过滤器一起使用时,应在长度过滤器之前插入自定义过滤器,粘贴文本在长度过滤器之前应用自定义过滤器(@ AchJ的解决方案将覆盖所有其他 // Apply the filters to control the input (alphanumeric)
ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(editText.getFilters()));
curInputFilters.add(0, new AlphaNumericInputFilter());
InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
editText.setFilters(newInputFilters);
并仅应用自定义一)。
{{1}}
答案 3 :(得分:-9)
这应该有效:
textView.setInputType(InputType.TYPE_CLASS_NUMBER);