Android - 当我设置最大长度并且 android:imeOptions="actionNext" 不在键盘上显示时,TextInputEditText 接受字母表产生问题

Android - TextInputEditText accepts Alphabets produce issue when I set max length and android:imeOptions="actionNext" not show on Keyboard

我已将 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>

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

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

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

编辑

如果您只想设置字母,则可以使用 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);