美文网首页
点击界面隐藏软键盘

点击界面隐藏软键盘

作者: wyonxue | 来源:发表于2017-06-02 20:25 被阅读0次

    点击界面隐藏软键盘

    通常有一类需求,在页面中软键盘打开时,希望点击屏幕其他的任何地方,把软键盘隐藏掉。
    比如登录,注册之类的常见页面。

    img-design-sketchimg-design-sketch

    在实际开发中,一般是通过处理其他控件的点击事件,在onClick中调用隐藏软键盘的方法,从而达到相应效果,但是在页面复杂的时候,要实现的onClick方法会很多,甚至还有逻辑处理冲突的情况,这样做就显得非常不友好。

    下面这种方式通过监听处理全局触摸事件,以较为简洁的方式实现这个功能。

    原理
    通过重写ActivitydispatchTouchEvent(MotionEvent ev)方法,全局监听触摸事件,当点击页面时,发现如果焦点在EditText上,就把软键盘隐藏,否则不做处理。

    实现

    \\...BaseActivity.java
     @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
                // 过滤掉不想处理view,filterViewByIds()子类实现提供过滤的控件;
                // isTouchView()表示点击事件是否发生在参数view上
                if (isTouchView(filterViewByIds(), ev)) return super.dispatchTouchEvent(ev);
                if (hideSoftByEditViewIds() == null || hideSoftByEditViewIds().length == 0)
                    return super.dispatchTouchEvent(ev);
                View v = getCurrentFocus();
                // hideSoftByEditViewIds()子类实现提供希望Base处理焦点判断的EditText
                if (isFocusEditText(v, hideSoftByEditViewIds())) {
                    //隐藏键盘
                    KeyBoardUtils.hideInputForce(this);
                    clearViewFocus(v, hideSoftByEditViewIds());
                }
            }
            return super.dispatchTouchEvent(ev);
        }
    

    其中实现方法hideSoftByEditViewIds(), filterViewByIds()即可实现该功能。
    具体实现可以查看源代码:Github代码仓库

    Reference
    一行代码实现Android软键盘与EditText的交互

    相关文章

      网友评论

          本文标题:点击界面隐藏软键盘

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