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

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

Solutions Collecting From Web of "如何限制TextView仅允许Android中的字母数字字符"

在XML中,把这个:

android:digits="abcdefghijklmnopqrstuvwxyz1234567890 " 

这是一个更好的解决方案……… 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}); 

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

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

  // Apply the filters to control the input (alphanumeric) ArrayList curInputFilters = new ArrayList(Arrays.asList(editText.getFilters())); curInputFilters.add(0, new AlphaNumericInputFilter()); InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]); editText.setFilters(newInputFilters); 

这应该工作:

 textView.setInputType(InputType.TYPE_CLASS_NUMBER);