簡體   English   中英

允許 AndroidX EditTextPreference 只接受字母

[英]Allow AndroidX EditTextPreference to only accept letters

我有一個 EditTextPreference 設置了一個過濾器來限制它的大小,如下所示:

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

我還想限制它只接受字母(不僅僅是 a-zA-Z,因為該應用程序接受不止一種語言)。 我該怎么做呢?

我以前嘗試過許多過濾器,包括這些問題中建議的所有過濾器以及類似的過濾器:

使 EditText 字段僅接受 Android 中的字母和空格

Edittext 只允許字母(以編程方式)

使用這樣的過濾器,每當輸入一個數字然后輸入一個字母時,我就會遇到如下問題:
- 整個文本消失
- 整個文本被復制
- 最后幾個字符被復制

我還嘗試通過添加和android:digits更改 XML,但無論如何它根本不限制輸入。
到目前為止,我嘗試過的每種inputType都不inputType鍵盤限制為只能輸入字母。

編輯:我想通了,在下面回答。

我剛剛在 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()方法用於將光標放在字符串的末尾,否則它會重置到開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM