当设置 "digits" 并输入禁止字符时,EditText 隐藏错误消息
EditText hides error message when "digits" are set and forbidden character entered
我有带 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
)时,错误消息被重置,因为输入被更改,但是 none 的 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});
我有带 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 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
)时,错误消息被重置,因为输入被更改,但是 none 的 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});