android 软键盘弹出的情况下 back事件

最近项目开发中遇到一个问题,有个文本输入,键盘弹出时,正常按返回键,关闭键盘,不退出activity其实是正常的。但是挡不住需求的定义啊,人家觉得是bug ,说要按返回键直接关闭页面。蛋疼。

默认情况下,在SoftInput显示的时候,Back键会优先交给输入法处理,这时Back只会关闭输入法。需要再按Back,才能退出输入框所在的Activity

想要键盘弹出时,能让activity获得back事件,就需要自定义Edittext重载dispatchKeyEventPreIme方法,这个方法的作用就是:
如果有输入法存在,那么按键消息首先会被派发到输入法窗口,如果想在输入法截获消息之前处理该消息,那么可以重载该函数

具体实现如下:

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);   
   }
}

这样就可以把物理返回事件返回到界面进行处理

你可能感兴趣的:(android 软键盘弹出的情况下 back事件)