需求:用户在EditText里输入文字时 通过afterTextChanged监听用户输入状态,在输入文字时自动调用后台,请求数据。
问题:在小米等部分手机上时,因为小米系统的问题,输入法在EditText上输入东西时,会优先输入一段带下划线的拼音然后在用户选择某个字的时候才会变成汉字,但是对于afterTextChanged方法来说,不管是拼音还是汉字都会触发监听事件,对于我们而言,很明显那些拼音输入时不需要的。
如我输入 学习 二字,在小米上就是先显示 xuexi 然后才能选择 学习。
(不要说只识别汉字就好,后台规定英文也可以搜,难受)
其实判断用户输入完成后 两秒以后再开始搜索也可以,不过既然这个带下划线拼音的问题出现了,肯定就要解决
算一下如果按这么搜索的话 我们调用了几次后台 整整六次 其中五次是无意义的,所以需要识别出是否输入完成状态,而不是这种带下划线的输入状态。
解决方案:通过观察与猜想(瞎蒙),发现这种(奇葩)手机的输入状态都是带下划线的,所以解决方案就是从下划线开始解决。
Android 系统带有对下划线样式的设置,给一些笔记本APP使用。其中有一个下划线功能专门的参数,费了点劲找到了。
叫
UnderlineSpan
接下来就简单了 我们获取到自己字符串里的Span,判断该Span是否带下划线就可以了
下面上Code
Object[] spans = EditText.getSpans(0, "yourString".length(), Object.class); boolean inputState = false; if (spans != null) { for (Object span : spans) { if (span instanceof UnderlineSpan) { inputState = true; break; } } }
当输入的内容不再带有下划线时,inputState =false
上面这段Code就是写出来它是根据什么判断的,大家可以根据自己的想法重新写一下,这段Code我只是为了方便演示写出来的
(有问题请多指教)