安卓点击空白隐藏软键盘的方法

  @Override

    public boolean dispatchTouchEvent(MotionEvent ev) {

        if (ev.getAction() == MotionEvent.ACTION_DOWN) {

            View v = getCurrentFocus();  //得到点击焦点

            if (isShouldHideKeyboard(v, ev)) { //判断用户点击的是否是输入框以外的区域

                hideKeyboard(v.getWindowToken());

            }

        }

        return super.dispatchTouchEvent(ev);

    }

    /**

    * 获取InputMethodManager,隐藏软键盘

    *

    * @param token

    */

    private void hideKeyboard(IBinder token) {

        if (token != null) {

            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

            im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);

        }

    }

    private boolean isShouldHideKeyboard(View v, MotionEvent event) {

        if (v != null && (v instanceof EditText)) {  //判断得到的焦点控件是否包含EditText

            int[] l = {0, 0};

            v.getLocationInWindow(l);

            int left = l[0],    //得到输入框在屏幕中上下左右的位置

                    top = l[1],

                    bottom = top + v.getHeight(),

                    right = left + v.getWidth();

            if (event.getX() > left && event.getX() < right

                    && event.getY() > top && event.getY() < bottom) {

                // 点击位置如果是EditText的区域,忽略它,不收起键盘。

                return false;

            } else {

                return true;

            }

        }

        return false;

    }

你可能感兴趣的:(安卓点击空白隐藏软键盘的方法)