我试图了解 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 似乎就足够了?
提前感谢任何可以解释这一点的人。