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

  @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;

    }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

友情链接更多精彩内容