EditText 在设置"数字"和输入禁止字符时隐藏错误消息



我有带digits的EditText

<EditText
...
android:digits="0123456789ABCDEFabcdef"
android:inputType="textCapCharacters|textNoSuggestions" />

我检查TextWatcher中的输入错误

editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Log.d(TAG, "beforeTextChanged");
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d(TAG, "onTextChanged");
}
@Override
public void afterTextChanged(Editable s) {
Log.d(TAG, "afterTextChanged");
try {
int color = Color.parseColor(s.toString());
} catch (Exception e){
editText.setError("Wrong color");
}
}
});

但是,当我输入任何禁止字符(例如L(时,错误消息都会重置,因为输入已更改,但没有调用任何TextWatcher方法,可能是由于digits

我可以在不删除digits和不手动处理TextWatcher中的禁用字符的情况下修复它?也许有一种方法可以保证在每次输入操作时都被调用?

我发现InputFilter中出现了错误的按键事件。但它会覆盖xml中的maxLength(您可以无休止地输入digits中定义的字符(,因此必须在代码中手动创建它。

InputFilter filter = new InputFilter(){
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
// Check here for input error
return source;
}
};
InputFilter.LengthFilter lengthFilter = new InputFilter.LengthFilter(7);
editText.setFilters(new InputFilter[]{hexFilter, lengthFilter});

最新更新