Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何限制TextView在Android中只允许字母数字字符_Android_Validation_Textview - Fatal编程技术网

如何限制TextView在Android中只允许字母数字字符

如何限制TextView在Android中只允许字母数字字符,android,validation,textview,Android,Validation,Textview,我的应用程序中有一个TextView,我希望用户只能在其中输入字母数字字符。如何做到这一点?谢谢 这应该有效: textView.setInputType(InputType.TYPE_CLASS_NUMBER); 在XML中,输入以下内容: android:digits="abcdefghijklmnopqrstuvwxyz1234567890 " 这里有一个更好的解决方案 InputFilter过滤器=新的InputFilter(){ 公共CharSequence筛选器(CharSequ

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

这应该有效:

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