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

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

  • Android + App引擎:user.getUserID()在端点中为null
  • 简单的方法来validation从Google Android客户端到Google App Engine的POST请求?
  • validation错误部署在API 1.6上
  • Android,Autocomplettextview,强制文本来自条目列表
  • 如何显示类似于TextView.setError()的微调控件的validation错误
  • 最佳实践:inputvalidation(Android)
  • Android:GoogleAuthUtil.getToken - 帐户对象应该从哪里来?
  • Android:如何在EditText中设置可接受的数字和字符?
  • 在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);