最近项目开发中遇到一个问题,有个文本输入,键盘弹出时,正常按返回键,关闭键盘,不退出activity其实是正常的。但是挡不住需求的定义啊,人家觉得是bug ,说要按返回键直接关闭页面。蛋疼。
默认情况下,在SoftInput显示的时候,Back键会优先交给输入法处理,这时Back只会关闭输入法。需要再按Back,才能退出输入框所在的Activity
想要键盘弹出时,能让activity获得back事件,就需要自定义Edittext重载dispatchKeyEventPreIme方法,这个方法的作用就是:
<strong>如果有输入法存在,那么按键消息首先会被派发到输入法窗口,如果想在输入法截获消息之前处理该消息,那么可以重载该函数</strong>
具体实现如下:
public class KeyBackEditText extends EditText {
public KeyBackEditText(Context context) {
super(context);
}
public KeyBackEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public KeyBackEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
((Activity)this.getContext()).onBackPressed();
//依据api等级2.0之后的都可以用第一种
//或者用这一种 ((Activity)this.getContext()).onKeyDown(KeyEvent.KEYCODE_BACK, event);
return true;
}
return super.dispatchKeyEventPreIme(event);
}
}
这样就可以把物理返回事件返回到界面进行处理
网友评论