我和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中的禁止字符的情况下修复它?也许有一种方法可以保证在每个输入操作上都会被调用?
发布于 2020-08-21 01:21:19
我发现错误的按键事件出现在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});https://stackoverflow.com/questions/63490274
复制相似问题