【问题标题】:Allow AndroidX EditTextPreference to only accept letters允许 AndroidX EditTextPreference 只接受字母
【发布时间】:2020-05-11 03:30:21
【问题描述】:

我设置了一个带有过滤器的 EditTextPreference 来限制它的大小,如下所示:

pref.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
            @Override
            public void onBindEditText(@NonNull EditText editText) {
                editText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(10)});
            }
        });

我还想将其限制为仅接受字母(不仅仅是 a-zA-Z,因为该应用接受不止一种语言)。我该怎么做?

我之前尝试过很多过滤器,包括这些问题中建议的所有过滤器以及类似的过滤器:

Making an EditText field accept only letters and white spaces in Android

Edittext only allow letters (programmatically)

使用这样的过滤器,每当输入一个数字然后输入一个字母时,我都会遇到以下问题:
- 整个文本消失
- 整个文本被重复
- 最后几个字符重复

我还尝试通过添加和android:digits 来更改 XML,但无论如何它根本不会限制输入。
到目前为止,我尝试过的每个inputType 都不会将键盘限制为只有字母。

编辑:我想通了,在下面回答。

【问题讨论】:

    标签: android android-edittext androidx edittextpreference


    【解决方案1】:

    我刚刚在 EditText 中添加了一个 TextWatcher,并将文本替换为正则表达式,如下所示:

    editText.addTextChangedListener(new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                        }
    
                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {
                            editText.removeTextChangedListener(this);
                            String replaced = s.toString().replaceAll("[^[:alpha:] ]", "");
                            editText.setText(replaced);
                            editText.setSelection(replaced.length());
                            editText.addTextChangedListener(this);
                        }
    
                        @Override
                        public void afterTextChanged(Editable s) {
    
                        }
                    });
    

    这允许添加字母,但是当键入其他任何内容时,它不会显示并且不会保存在任何地方。 setSelection() 方法用于将光标放在字符串的末尾,否则它会重置到开头。

    【讨论】:

    • 您的过滤器选项是正确的,但您将 ChangeListener 添加到 EditText 对象。为什么不直接将 EditTextPref 与问题中的 OnBindTextListener 一起使用?
    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 2014-04-11
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2011-04-17
    • 2015-06-06
    相关资源
    最近更新 更多