如何限制TextView在Android中只允许字母数字字符
我的应用程序中有一个TextView,我希望用户只能在其中输入字母数字字符。如何做到这一点?谢谢 这应该有效:如何限制TextView在Android中只允许字母数字字符,android,validation,textview,Android,Validation,Textview,我的应用程序中有一个TextView,我希望用户只能在其中输入字母数字字符。如何做到这一点?谢谢 这应该有效: textView.setInputType(InputType.TYPE_CLASS_NUMBER); 在XML中,输入以下内容: android:digits="abcdefghijklmnopqrstuvwxyz1234567890 " 这里有一个更好的解决方案 InputFilter过滤器=新的InputFilter(){ 公共CharSequence筛选器(CharSequ
textView.setInputType(InputType.TYPE_CLASS_NUMBER);
在XML中,输入以下内容:
android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
这里有一个更好的解决方案
InputFilter过滤器=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地,起始点,终止点){
对于(inti=start;i
该InputFilter
解决方案运行良好,可让您完全控制以比android:digits
更精细的粒度过滤输入。如果所有字符都有效,则filter()
方法应返回null
,如果某些字符无效,则仅返回有效字符的CharSequence
。如果复制并粘贴了多个字符,而其中一些字符无效,则只应保留有效字符(@AchJ的解决方案将在任何字符无效时拒绝整个粘贴)
哇,安卓让它变得如此简单。iOS需要付出1000倍的努力才能实现同样的功能。我在字母数字android上使用了这种方法:digits=“abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ”但三星galaxy y pro遇到了一个问题,它不允许大写字符(E,R,T,D,F,G,X,C,V)这是有数字的。这个解决方案不是只限于英语吗,但对于每种语言来说,这似乎都是一个大麻烦。允许使用大写字母是更好的解决方案。此解决方案适用于单个字符被键入的简单情况,但不能正确处理复制和粘贴,或者在
编辑文本
上设置了其他输入过滤器
。我已经发布了一个更完整的解决方案。为了简化setFilters,我会这样做:editText.setFilters(newInputFilter[]{new CurrencyFormatInputFilter()})@Rocel请仔细阅读我的解释:“您必须确保不要覆盖EditText上设置的其他InputFilter;这些可以用XML设置,如android:maxLength
”您的建议将覆盖任何其他InputFilter
,就像@AchJ的解决方案一样,这不是我们在这里要做的。
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});
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();
}
}
// 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);