Android判断软键盘弹出并隐藏的简单完美解决方法(推荐)
程序员文章站
2024-03-03 21:44:28
最近项目中有一个编辑框,下面是个listview。在触发编辑框弹出软键盘后,listview还能滑动,并且listview的item还能响应单击。这样的体验效果很不好。于是...
最近项目中有一个编辑框,下面是个listview。在触发编辑框弹出软键盘后,listview还能滑动,并且listview的item还能响应单击。这样的体验效果很不好。于是便想在滑动或单击item时判断键盘是否弹出,若弹出,则把它隐藏。
网上一搜,发现android并没有直接提供软键盘的弹出与隐藏判断,一些解决方案诸如判断父控件的高度或者判断
if(getwindow().getattributes().softinputmode==windowmanager.layoutparams.soft_input_state_hidden) 隐藏键盘;
的方法并没有用,于是便从官方文档着手。
发现inputmethodmanager有一个方法isactive(view view):如果view是输入法的活动view,则返回true。也就是说,如果是由view触发弹出软键盘,则返回true。哇,那问题就好办了
if(isactive(edittext)) 隐藏键盘
接着让另一个view强制获取焦点,这样isactivite(ediitext)就为false.
这个方法比较简单,代码比较短,也很好理解,希望能够帮助有需要的人,也不枉费我调试几个小时的功夫。
附上代码:
inputmethodmanager inputmethodmanager = (inputmethodmanager)getactivity().getsystemservice(context.input_method_service);<br>private boolean hidekeyboard(){ if(inputmethodmanager.isactive(searchedittext)){<br> //因为是在fragment下,所以用了getview()获取view,也可以用findviewbyid()来获取父控件 getview().requestfocus();//使其它view获取焦点.这里因为是在fragment下,所以便用了getview(),可以指定任意其它view inputmethodmanager.hidesoftinputfromwindow(getactivity().getcurrentfocus().getwindowtoken(), inputmethodmanager.hide_not_always); return true; } return false; }
ps: 如果是手动弹出键盘,getactivity().getcurrentfocus()改成searchedittext.并且手动弹出的键盘isactivie()失效,可用标记来判断.
以上就是小编为大家带来的android判断软键盘弹出并隐藏的简单完美解决方法(推荐)全部内容了,希望大家多多支持~