背景很简单。
需要在用户输入时进行过滤部分字符。
也就是说TextWatcher的onTextChanged不是很好的满足我们的需求。最好的方式是用InputFilter。
很简单的一个api。
测试环境:中文,baidu输入法-》ok
中文,sogou输入法-〉ok
英文,sogou输入法-》fail
aosp,英文,-〉fail
英文,facemoji -》fail
fail的表现是
“输入abc,联想词有abc,edittext填充的是abcabc”
“输入abcdefg,联想词abcdefg,按删除,edittext一直填充,无法正常删除”
我第一反应就是输入法的兼容问题。
参考资料有
//www.greatytc.com/p/1b2d54f865d3
https://jmeow.org/android/jie-jue-edittext-zhong-inputfilter-yu-lian-xiang-ci-shu-ru-fa-chong-tu/
本质是联想词的处理有点问题。
理论上禁用联想就可以了,我尝试限制 InputType -》 no_suggestion
这应该是影响最小的flag了
自测aosp ok,facemoji ,sogou fail
我再加大flag -> TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
密码输入总不会有联想词了吧
aosp,facemoji ok,sogou fail
我的解决方案,不再使用inputfilter了,用另外的交互方案来解决。
参考链接里的方案,用了,效果很差,不推荐。