Android 如何监听输入法软键盘关闭事件

241 阅读1分钟
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    int screenH = 0;
    boolean isOpen;
    private int getScreenHeight() {
        if (screenH > 0) {
            return screenH;
        }
        screenH = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE))
                .getDefaultDisplay().getHeight();
        return screenH;
    }
    
    @Override
    public void onGlobalLayout() {
        Rect rect = new Rect();
        getWindowVisibleDisplayFrame(rect);
        screenH = getScreenHeight(); //屏幕高度
        int keyH = screenH - rect.bottom; // 输入法的高度
        boolean keyOpen = Math.abs(keyH) > screenH / 5;
        if(isOpen!=keyOpen){
            isOpen=keyOpen;
            if(!isOpen){
                cleanfocus();//键盘关闭清除当前控件焦点
            }
        }
    }
});
public boolean onKeyIme(int keyCode,KeyEvent event){
    if(keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN){
    clearFocus();
    return true;
    }
    return false;
}