EditText是android系统自带的控件,通过单击,系统会自动调用当前输入法的软键盘,但是有时候却会出现edittext无法弹出软键盘的情况。
说说我目前遇到这种情况的环境。本人在创建一个装着listview的菜单fragment,右边是相应的每个listitem对于的内容,用另一个fragment来包容一些带有edittext控件的布局。
在一开始单击edittext还是正常的,但是当滑动listview的时候,再次单击edittext,居然没有弹出相应的软键盘。这个问题困扰了我许久,因为edittext也没有提供相应调用软键盘的接口,所以排查起来非常困难。
查阅各种资料,最终通过一个办法解决了这个问题。
重写edittext控件,对其touch事件进行重写
@Override
public boolean onTouchEvent(MotionEvent event) {
if(MotionEvent.ACTION_DOWN == event.getAction()) {
clearFocus(); //在滑动设备列表的时候,editview无法弹出软键盘
}
return super.onTouchEvent(event);
}
注意这里要判断event是属于按下动作,否则的话由于edittext很敏感会导致多次调用clearFocus()。然后就是对每次触摸事件都清除一次焦点。这样无论怎么滑动listview,edittext都能正常的弹出软键盘。
具体的原因本人了解的不深,多次尝试后获得的结论,有没有高人能解释下这个现象帮助跟多的人感激不尽。虽然写作粗糙,但是网上有关这方面的资料少之又少,写作此文只是为遇到相同问题的朋友提供一个引子,有更好解决这个问题的可以留言评论。
原文地址:http://blog.csdn.net/lgj452555712/article/details/38758387