Android:InputFilter.filter中的参数是什么意思,什么时候实际调用过滤器?

时间:2014-08-26 19:20:21

标签: android android-edittext android-input-filter

我试图理解InputFilter.filter()方法中的六个参数,所以我写了下面的类。

final class MyFilter implements InputFilter {

static final String TAG = "MyFilter";

@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    Log.d(TAG, "source = \"" + source + "\"");
    Log.d(TAG, "start = " + start);
    Log.d(TAG, "end = " + end);
    Log.d(TAG, "dest = \"" + dest + "\"");
    Log.d(TAG, "dstart = " + dstart);
    Log.d(TAG, "dend = " + dend);
    return null;
}}

我在我的活动中加入了一个EditText并写了:

editText.setFilters(new InputFilter[] { new MyFilter() });

当我修改EditText中的文本时,我得到了一些我根本无法理解的结果。

当我写“a”时,filter()被调用一次,参数为“a”,0,1,“”,0,0。

当我添加'b'使其显示“ab”时,filter()被调用两次,首先是参数 “ab”,0,2,“a”,0,1,然后是参数“ab”,0,2,“ab”,0,2。

当我添加'c'使其显示为“abc”时,filter()仅使用参数“abc”,0,3,“ab”,0,2来调用一次。

当我添加'd'使其显示为“abcd”时,filter()被调用两次,第一次使用参数“abcd”,0,4,“abc”,0,3,然后使用参数“abcd” ,0,4,“abcd”,0,4。

当我添加后续字符时,filter()仅为每个字符调用一次。

发生了什么事?为什么长度为2和4的字符串对长度为1,3,5,6,7,8的字符串的处理方式不同??

另外为什么有6个参数,当2似乎足够?

提前感谢能解释此事的任何人。

0 个答案:

没有答案