小智 160

使用EditText标记添加此行.

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

您的EditText标记应如下所示:

<EditText
        android:id="@+id/editText1"
        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

  • 非拉丁字符怎么样? (7认同)
  • 无法输入空间.如何在其中允许单个空格 (6认同)
  • 这有一个缺点,如果用户按下数字,它会转换单词中的数字. (4认同)
  • 使用它也允许空格:`android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"` (4认同)

小智 56

edittext.setFilters(new InputFilter[] {
    new InputFilter() {
        public CharSequence filter(CharSequence src, int start,
                int end, Spanned dst, int dstart, int dend) {
            if(src.equals("")){ // for backspace
                return src;
            }
            if(src.toString().matches("[a-zA-Z ]+")){
                return src;
            }
            return edittext.getText().toString();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

请彻底测试!

  • 它对我不起作用.我做了同样的事情但是当我在EditText中输入数字或特殊字符时,它将删除之前输入的所有字符.为什么会这样? (9认同)

UMA*_*MAR 21

EditText state = (EditText) findViewById(R.id.txtState);


                Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
                Matcher ms = ps.matcher(state.getText().toString());
                boolean bs = ms.matches();
                if (bs == false) {
                    if (ErrorMessage.contains("invalid"))
                        ErrorMessage = ErrorMessage + "state,";
                    else
                        ErrorMessage = ErrorMessage + "invalid state,";

                }
Run Code Online (Sandbox Code Playgroud)


swe*_*man 21

对于那些希望他们的editText只接受字母和空格(既不是数字也不是任何特殊字符)的人,那么可以使用它InputFilter.在这里,我创建了一个名为getEditTextFilter()InputFilter并在其中编写的方法.

public static InputFilter getEditTextFilter() {
        return new InputFilter() {

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

                boolean keepOriginal = true;
                StringBuilder sb = new StringBuilder(end - start);
                for (int i = start; i < end; i++) {
                    char c = source.charAt(i);
                    if (isCharAllowed(c)) // put your condition here
                        sb.append(c);
                    else
                        keepOriginal = false;
                }
                if (keepOriginal)
                    return null;
                else {
                    if (source instanceof Spanned) {
                        SpannableString sp = new SpannableString(sb);
                        TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
                        return sp;
                    } else {
                        return sb;
                    }
                }
            }

            private boolean isCharAllowed(char c) {
                Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
                Matcher ms = ps.matcher(String.valueOf(c));
                return ms.matches();
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

找到后将此inputFilter附加到editText,如下所示:

mEditText.setFilters(new InputFilter[]{getEditTextFilter()});
Run Code Online (Sandbox Code Playgroud)

最初的功劳归功于@UMAR,他提出了使用正则表达式和@KamilSeweryn进行验证的想法

  • 最好的答案.不知道为什么没有更多的赞成票.android:digits ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"是最糟糕的解决方案导致android:imeOption无法使用它. (4认同)

小智 19

通过Xml,您可以轻松地在xml(editText)中输入以下代码...

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

只接受字符...


Naj*_*ala 9

放入代码edittext xml文件,

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


Nav*_*r M 5

对于空格,您可以在数字中添加单个空格。如果您需要任何特殊字符,例如圆点,逗号,也可以添加到此列表中

android:digits =“ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”


小智 5

在EditText android中只允许使用字母:

InputFilter letterFilter = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            String filtered = "";
            for (int i = start; i < end; i++) {
                char character = source.charAt(i);
                if (!Character.isWhitespace(character)&&Character.isLetter(character)) {
                    filtered += character;
                }
            }

            return filtered;
        }

    };
editText.setFilters(new InputFilter[]{letterFilter}); 
Run Code Online (Sandbox Code Playgroud)