点击界面隐藏软键盘

点击界面隐藏软键盘

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

img-design-sketch
img-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的交互

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,035评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,711评论 0 17
  • Android 软键盘隐藏寻找最优解 本文原创,转载请注明出处。欢迎关注我的 简书 ,关注我的专题 Android...
    MeloDev阅读 12,095评论 12 82
  • 耳边放着七月上,淡淡的声音,很是能把人带入她的情思。 午安,七月的梦游者,看过天上的星星。
    大碗_阅读 1,085评论 0 0
  • 爱摄影的奥派阅读 1,488评论 0 0