基本上我想了解 InputFilter 和 TextWatcher 的更多深度差异和使用方案。
根据文件
输入过滤器:可以将InputFilters附加到Editables以限制可以对其进行的更改。
TextWatcher:当某个类型的对象附加到Editable时,将在更改文本时调用其方法。 因此,如果我错了,可以用来约束更改纠正我
哪一个更好?为什么?我的场景是我需要一个在小数点后至少有6个字符的EditText。
1)我知道这是......所以我试着回答这个疑问,但找不到满意的答案。请原谅我,如果我发错了问题,如果你贬低这个问题那么提供原因......我不会争论太多,并立即删除问题。
2)另外请不要按照代码中提到的要求发布代码。即使您发布片段请解释。
答案 0 :(得分:7)
TextWatcher
用于在用户输入时收到通知
InputFilter
决定可输入的内容。
例如,
假设我想让用户输入温度。此温度必须是所有数字,并且在十进制之后只能包含两位数。仔细观察,我需要TextWatcher
和InputFilter
。
InputFilter
只允许数字。
final InputFilter[] filters = new InputFilter[]
{ DigitsKeyListener.getInstance(true, true) };
textView.setFilters(filters);
现在,这将允许小数点后超过两位数的数字。为什么?因为InputFilter
仅限制可以键入的键。这是TextWatcher
进来的时候。
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// you need this to avoid loops
// or your stack will overflow
if(!textView.hasWindowFocus() || textView.hasFocus() || s == null){
return;
}
// Now you can do some regex magic here to see
// if the user has entered a valid string
// "\\d+.\\d{6,}" for your case
}