点击界面隐藏软键盘

2017-06-02  本文已影响0人  wyonxue

点击界面隐藏软键盘

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

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的交互

上一篇下一篇

猜你喜欢

热点阅读