最近几天在公司项目中,经常用到AutoCompleteTextView这个控件,用来实现根据用户输入的字符来提示用户可选择的列表,在以往的开发经验 中我们知道AutoCompleteTextView这个控件有一个属性可以设置从第几个字符开始提示用户输入(xml中为android:completionThreshold,代码中为setThreshold(int)),在不设置的情况下默认为2,也就是在输入第二个字符开始根据用户输入显示提示信息,但是根据我们的需求,我们需要在用户点击AutoCompleteTextView这个控件时,就会弹出提示信息,将全部信息都现在在提示信息中供用户选择,如果用户不选择,我们就在用户输入时,从用户输入第一个字符开始显示相应的提示信息,在网上找了很多资料,都没能找得到十分管用的方法,大部分都是复制粘贴的一个自定义控件,实际使用发现代码有问题,报错,但是也不是完全没有作用,在看了那个晚上的代码之后,我尝试在空间的焦点改变事件setOnFocusChangeListener中让控件显示下拉提示界面,就可以实现,上代码
![]()
在设置完之后发现可行,在不需要输入的情况下可以将全部提示信息,显示出来,但是新的问题发生了,由于AutoCompleteTextView这个控件像EditText一样,自动获取焦点事件,所以在页面以上来,焦点就被AutoCompleteTextView控件抢了,所以页面以上来就会显示下来列表,这就产生了很奇葩的用户体验,这是一个焦点问题,但是这个焦点问题的发生都是因为为了上面的功能我在焦点事件中做了更改导致的,纬二路上面的功能,我必须更改焦点事件,所以只能从不让AutoCompleteTextView控件获取到焦点这条思路上走,google了一下,baidu了一下,基本都是在说由于AutoCompleteTextView抢焦点,软件盘在页面开始时就弹出来了(这个问题网上很多,就不赘述了),所用的方法呢也都是设置软件盘的弹出来解决,这个对于我们的bug没有任何帮助,后来在查了很多资料之后,找到一个办法,就是在布局中的根布局上添加两句代码,把焦点在分发的源头抢下来,释放掉就可以了
![]()
![]()
将焦点抢过来释放掉之后,AutoCompleteTextView不会在一上来时就抢占焦点,而是在我们点击时拿到焦点,这个时候才会弹出软键盘同事显示全部的提示信息.
AutoCompleteTextView不输入字符获取提示以及相关焦点问
最新推荐文章于 2024-04-17 16:35:00 发布