如何限制TextView仅允许Android中的字母数字字符

时间:2011-05-21 16:01:14

标签: android validation textview

我的应用程序中有一个TextView,我希望用户只能输入字母数字字符。如何做到这一点?谢谢!

4 个答案:

答案 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);