Android 在PostTextChanged()方法中键入字符时TextWatcher获取循环
我有一个EditText,我想当用户键入除Android 在PostTextChanged()方法中键入字符时TextWatcher获取循环,android,Android,我有一个EditText,我想当用户键入除以外的非数字字符时,EditText删除该字符,例如,我希望EditText接受如下文本:5451565897545 当用户输入非数字字符如454d54时,“d”字符被删除,只有45454保留在编辑文本中。 我的代码如下: editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSeque
以外的非数字字符时,
EditText删除该字符
,例如,我希望EditText接受如下文本:5451565897545当用户输入非数字字符如454d54时,“d”字符被删除,只有45454保留在编辑文本中。 我的代码如下:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable editable) {
// Toast.makeText(getApplicationContext(),editable.toString(),Toast.LENGTH_LONG).show();
editTextChecker(editable);
}
});
private void editTextChecker(Editable editable){
String st=editable.toString();
String regex="[\\D&&[^,]]";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(st);
String retSt=st;
if (st.length()>0) {
if (m.find()) {
retSt = m.replaceAll("");
}
editable.replace(0, st.length(), retSt);
}
}
但当我输入一个数字字符时,textWatcher得到无限循环 您可以如下设置digits xml属性,只接受数字和“,”作为编辑文本
<EditText
android:id="@+id/myNumber"
android:digits="0123456789,"
/>
只需像这样更改您的方法
private void editTextChecker(Editable editable) {
String st = editable.toString();
String regex = "[\\D&&[^,]]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(st);
String retSt = st;
if (st.length() > 0 && m.find()) {
retSt = m.replaceAll("");
editable.replace(0, st.length(), retSt);
}
}
每次有数字时,它都会调用afterTextChanged,因此它会导致无限循环,因此会更改条件谢谢,在这种情况下,它非常好,适合我,但是如果我想在另一种情况下控制用户的类型,例如使用“;”分割数字或者,当我不想输入某个字符时,用户无法键入我正在执行的操作?如果您知道应该允许哪些字符编辑文本,则可以在“数字”属性中指定它们。如果你想要一个特殊的模式,你可以使用正则表达式检查编辑文本。是的,这是一个好主意,它的工作,但只是不设置inputType。