美文网首页我爱编程
Android点击EditText以外隐藏输入法

Android点击EditText以外隐藏输入法

作者: JeremySun0823 | 来源:发表于2018-06-21 21:23 被阅读0次

    输入法引起的显示问题

    Background:今天在开发时遇到了一个小问题,点击EditText弹出的输入法,在我点击其他控件时没有消失,影响了其他控件的显示。
    solution: 重写Activity的dispatchTouchEvent方法,拦截Touch事件,判断是否点击控件是否为EditText。如果不是,那么就隐藏输入法。

        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            // 拦截ACTION_DOWN事件,判断是否需要隐藏输入法
            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
                View view = getCurrentFocus();
                if (isShouldHideInput(view, ev)) {
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm != null) {
                        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                    }
                }
                return super.dispatchTouchEvent(ev);
            }
    
            // 交由DecorView去做Touch事件的分发
            if (getWindow().superDispatchTouchEvent(ev)) {
                return true;
            }
    
            // Activity内没有View对这个Touch事件做处理,那么有Activity来处理
            return onTouchEvent(ev);
        }
    
        private boolean isShouldHideInput(View view, MotionEvent ev) {
            \\ 1、判断是否是EditText,如果不是,直接返回false
            if (view != null && (view instanceof EditText)) {
                int[] location = {0, 0};
                view.getLocationOnScreen(location);
                int left = location[0];
                int top = location[1];
    
                \\ 2、判断Touch的点是否在EditText外
                if (ev.getX() < left || (ev.getX() > left + view.getWidth())
                        || ev.getY() < top || (ev.getY() > top + view.getHeight())) {
                    return true;
                } else {
                    return false;
                }
            }
            return false;
        }
    

    reference: https://blog.csdn.net/h649305597/article/details/53519320

    知识点:Touch事件的分发处理
    https://blog.csdn.net/carson_ho/article/details/54136311

    相关文章

      网友评论

        本文标题:Android点击EditText以外隐藏输入法

        本文链接:https://www.haomeiwen.com/subject/exwcyftx.html