68

如何在 android 的 EditText 中只输入字母?

4

12 回答 12

196

使用您的 EditText 标签添加这一行。

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

您的 EditText 标记应如下所示:

<EditText
        android:id="@+id/editText1"
        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
于 2014-01-01T12:30:06.510 回答
61
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();
        }
    }
});

请彻底测试!

于 2012-01-27T08:40:36.867 回答
28

对于那些希望他们的 editText 应该只接受字母和空格(既不是数字也不是任何特殊字符)的人,那么可以使用 this InputFilter。在这里,我创建了一个名为 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();
            }
        };
    }

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

mEditText.setFilters(new InputFilter[]{getEditTextFilter()});

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

于 2017-02-10T09:14:48.163 回答
23
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,";

                }
于 2010-03-22T11:54:35.597 回答
21

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

android:digits="abcdefghijklmnopqrstuvwxyz"

只接受字符...

于 2013-10-24T16:04:20.250 回答
11

把代码edittext xml文件,

   android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
于 2016-03-12T07:30:14.533 回答
9

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

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

于 2016-09-10T04:32:06.573 回答
9

在 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}); 
于 2017-09-21T20:47:12.823 回答
1

试试这个

<EditText
  android:id="@+id/EditText1"
  android:text=""
  android:inputType="text|textNoSuggestions"
  android:textSize="18sp"
  android:layout_width="80dp"
  android:layout_height="43dp">
</EditText>

其他 inputType 可以在 这里找到..

于 2010-03-02T08:59:00.620 回答
1

如果有人仍然想要这个,支持 Unicode 的 Java 正则表达式?是一个很好的。它适用于当您只需要 EditText 旁边的字母(无论是什么编码 - 日语、瑞典语)时。稍后,您可以使用Matcher和检查它Pattern.compile()

于 2015-02-18T17:56:43.960 回答
1
  • 只需使用android:inputType="text"xml 文件中的属性

EX:如果您希望用户提供电子邮件地址文本:

 <EditText
    android:id="@+id/user_address"
    android:inputType="textEmailAddress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

随意使用 android studio 的自动完成功能检查许多其他输入属性: 自动完成演示

于 2022-02-13T20:19:38.770 回答
-1

试试这个方法

对于 Java:

EditText yourEditText = (EditText) findViewById(R.id.yourEditText);
yourEditText.setFilters(new InputFilter[] {
new InputFilter() {
    @Override
    public CharSequence filter(CharSequence cs, int start,
                int end, Spanned spanned, int dStart, int dEnd) {
        // TODO Auto-generated method stub
        if(cs.equals("")){ // for backspace
             return cs;
        }
        if(cs.toString().matches("[a-zA-Z ]+")){
             return cs;
        }
        return "";
    }
}});

对于科特林:

 val yourEditText = findViewById<View>(android.R.id.yourEditText) as EditText
    val reges = Regex("^[0-9a-zA-Z ]+$")
    //this will allow user to only write letter and white space
    yourEditText.filters = arrayOf<InputFilter>(
        object : InputFilter {
            override fun filter(
                cs: CharSequence, start: Int,
                end: Int, spanned: Spanned?, dStart: Int, dEnd: Int,
            ): CharSequence? {
                if (cs == "") { // for backspace
                    return cs
                }
                return if (cs.toString().matches(reges)) {
                    cs
                } else ""
            }
        }
    )
于 2021-01-13T07:05:09.113 回答