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

and*_*per 18 validation android textview

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

str*_*ark 52

在XML中,把这个:

android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
Run Code Online (Sandbox Code Playgroud)

  • 我用这个方法用于字母数字android:digits ="abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"但是三星galaxy y pro遇到问题它不允许大写字符(E,R,T,D,F,G,X,C,V)有数字. (4认同)
  • 这种解决方案不仅限于英语吗?[您可以为此使用@ string / digits之类的东西](https://developer.android.com/reference/android/widget/TextView.html#attr_android:digits),但这似乎很麻烦每种语言。 (2认同)

小智 16

Here is a better solution......... 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});
Run Code Online (Sandbox Code Playgroud)


Ste*_*yle 5

InputFilter解决方案效果很好,并且可以完全控制以比更精细的粒度过滤掉输入android:digits.如果所有字符都有效,则该filter()方法应返回; 如果某些字符无效null,则该方法应返回CharSequence有效字符.如果复制并粘贴了多个字符,而某些字符无效,则只保留有效字符(如果任何字符无效,@ AchJ的解决方案将拒绝整个粘贴).

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,在设置时InputFilter,您必须确保不要覆盖InputFilters您的其他设置EditText; 这些可以用XML设置,比如android:maxLength.您还必须考虑设置的顺序InputFilters.当与长度过滤器结合使用时,应在长度过滤器之前插入自定义过滤器,粘贴文本在长度过滤器之前应用自定义过滤器(@ AchJ的解决方案将覆盖所有其他过滤器InputFilters并仅应用自定义过滤器).

    // 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);
Run Code Online (Sandbox Code Playgroud)