当您输入或删除字符时,文本会被复制,但不是每次,而是每隔一次。
在调试器下,我看到在复制之前dstart=dend=dest.length
,source
包含更改之后应该出现的所有文本start=0
,end=source.length
过滤器代码:
class FileNameInputFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
StringBuilder sb = new StringBuilder();
for (int i = start; i < end; i++) {
char ch = source.charAt(i);
if ("/\\:*?\"<>|".indexOf(ch) == -1) {
sb.append(ch);
}
}
return sb.toString();
}
}
如何克服这个问题?
加法
在一个单词内重复一次,严格每隔一次,这就是输入“Hello World!”的样子:
HHelHHelloHHelHHello WWorWWorldWWorWWorld!
数字输入和删除正常,只有字母有问题。
过滤器的逻辑:如果您不喜欢某些内容,则返回空字符串,否则返回 null(保持不变)。事实上,除了从缓冲区插入之外,检查是逐个字符进行的。
我找到了一个解决方案:如果过滤器没有改变任何东西,则必须返回它。
null
但尚不清楚为什么返回等效文本会破坏逻辑。框架错误?此选项几乎按其应有的方式工作,除了输入标点符号后会添加空格 - 它们是单独的调用,因此我不知道如何在不影响用户故意输入的情况下过滤掉它们。