Android 仿微信点击空白处隐藏键盘

二话不说,来,直接上效果


test.gif

第一步监听Activity的dispatchTouchEvent和onTouchEvent事件,在有的手机里面onTouchEvent不会触发,保险起见,这两个方法都加上,另外特别注意的是,这个两个事件的监听可以写在BaseActivity中!
代码如下:

 @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        hideSolftKeyboard(event);
        return super.dispatchTouchEvent(event);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        hideSolftKeyboard(event);
        return super.onTouchEvent(event);
    }

    /**
     * 隐藏键盘
     */
    public void hideSolftKeyboard(MotionEvent event){
        try{
            if(event.getAction() == MotionEvent.ACTION_DOWN){

                View focusView = getCurrentFocus();
                //除了点击EidtText自身区域的其他任何区域,都将键盘收起
                if(null != focusView && null != focusView.getWindowToken() && !ViewUtils.isTouchView(event, focusView)){

                    SolftInputUtil.hideSoftInputFromWindow(this);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

到这里代码就写完了,另外需要补充下辅助代码段
1.ViewUtils.isTouchView:判断当前触摸的是不是当前获取焦点的EditText
2.SolftInputUtil.hideSoftInputFromWindow:隐藏键盘

    /**
     * 是否触摸了当前焦点控件
     * @param event
     * @param focusView
     * @return
     */
    public static boolean isTouchView(MotionEvent event, View focusView){
        if(null == event || null == focusView){
            return false;
        }

        float x = event.getX();
        float y = event.getY();
        int[] outLocation = new int[2];
        focusView.getLocationOnScreen(outLocation);
        RectF rectF = new RectF(outLocation[0], outLocation[1] ,outLocation[0] + focusView.getWidth() ,outLocation[1] + focusView.getHeight());
        if(x >= rectF.left && x <= rectF.right && y >= rectF.top && y <= rectF.bottom){
            return true;
        }

        return false;
    }


    /**
     * 隐藏Activity里面获得焦点的View的软键盘
     *
     * @param activity
     */
    public static void hideSoftInputFromWindow(Activity activity) {
        InputMethodManager parentImm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (parentImm.isActive()) {
            View view = activity.getCurrentFocus();
            if (null != view) {
                parentImm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }
    }

代码随简单,希望也能帮到一部分朋友们。

你可能感兴趣的:(Android 仿微信点击空白处隐藏键盘)