Android EditText结合了InputFilter和TextWatcher

时间:2015-11-22 14:17:04

标签: android performance

基本上我想了解 InputFilter TextWatcher 的更多深度差异和使用方案。

根据文件
输入过滤器:可以将InputFilters附加到Editables以限制可以对其进行的更改。
TextWatcher:当某个类型的对象附加到Editable时,将在更改文本时调用其方法。 因此,如果我错了,可以用来约束更改纠正我

哪一个更好?为什么?我的场景是我需要一个在小数点后至少有6个字符的EditText。

  

1)我知道这是......所以我试着回答这个疑问,但找不到满意的答案。请原谅我,如果我发错了问题,如果你贬低这个问题那么提供原因......我不会争论太多,并立即删除问题。
2)另外请不要按照代码中提到的要求发布代码。即使您发布片段请解释。

1 个答案:

答案 0 :(得分:7)

TextWatcher用于在用户输入时收到通知 InputFilter决定可输入的内容。

例如,
假设我想让用户输入温度。此温度必须是所有数字,并且在十进制之后只能包含两位数。仔细观察,我需要TextWatcherInputFilter

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

}