0

我已经将 TextInputEditText 作为名字只接受字母,但我遇到了问题。

        <android.support.design.widget.TextInputLayout
            android:id="@+id/tvfnameinput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/etFirstname"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
                android:hint="firstname"
                android:imeOptions="actionNext"
                android:maxLength="12"
                android:maxLines="1"
                android:text="" />
        </android.support.design.widget.TextInputLayout>

正如您在上面的布局中看到的,我设置了 maxlength 12,所以如果我输入了 12 个数值,那么它不接受但它是计数的,所以我在输入 12 个数值后无法输入字母。

注意-:我只想要字母并且我的代码正在工作,但是当我输入数值时,它不接受但算作最大长度。

编辑-: android:imeOptions="actionNext" 当我设置 android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 时键盘上不显示

在此处输入图像描述

4

1 回答 1

1

编辑

如果您只想设置字母,那么您可以使用 InputFilter 而不是数字。digit从您的布局中删除此标签。

这是可以帮助您的示例:

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.setFilters(new InputFilter[]{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();
        }
    }});

带 MaxLength 的输入过滤器

使用 InputFilter 时,EditText 的属性被覆盖,然后您可以使用 InputFiler 的最大长度。

试试这个

 InputFilter[] inputFilters = new InputFilter[2];
    inputFilters[0] = 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();
        }
    };

    inputFilters[1] = new InputFilter.LengthFilter(12);

    editText.setFilters(inputFilters);
于 2018-01-31T05:49:02.107 回答