问题描述
我有400
的EditText
digits
然后我检查<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 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
方法均未调用,可能是由于{{1 }}。
我可以以某种方式解决此问题,而无需删除TextWatcher
,也无需手动处理digits
中的禁止字符?也许有一种方法可以保证在每次输入操作时都会被调用?
解决方法
我发现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});