设置“数字”并输入禁止字符时,EditText隐藏错误消息

问题描述

我有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});