允许 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,因为该应用程序接受不止一种语言)。我该怎么做呢?
我之前尝试过很多过滤器,包括这些问题和类似问题中建议的所有过滤器:
Making an EditText field accept only letters and white spaces in Android
使用这样的过滤器,每当输入一个数字然后输入一个字母时,我都会遇到如下问题:
- 整个文本消失
- 整个文本被复制
- 最后几个字符重复
我也尝试通过添加和 android:digits
来更改 XML,但无论如何它根本不限制输入。
到目前为止,我尝试过的每个 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()
方法用于将光标放在字符串的末尾,否则它会重置到开头。
我设置了一个 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
使用这样的过滤器,每当输入一个数字然后输入一个字母时,我都会遇到如下问题:
- 整个文本消失
- 整个文本被复制
- 最后几个字符重复
我也尝试通过添加和 android:digits
来更改 XML,但无论如何它根本不限制输入。
到目前为止,我尝试过的每个 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()
方法用于将光标放在字符串的末尾,否则它会重置到开头。