Android之点击空白处关闭软键盘

Android中点击非EditText区域关闭软键盘:

1. 重写Activity中dispatchTouchEvent方法,计算触摸点位置
    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        if (ev?.action == MotionEvent.ACTION_DOWN) {
            val v = currentFocus
            if (v is EditText) {
                val l = intArrayOf(0, 0)
                v.getLocationInWindow(l)
                onTouchEditText(ev.x > l[0]
                        && ev.x < l[0] + v.getWidth()
                        && ev.y > l[1]
                        && ev.y < l[1] + v.getHeight())
            }
        }
        return super.dispatchTouchEvent(ev)
    }

    private fun onTouchEditText(isTouchInEditText: Boolean) {
        //TODO 触摸点不在EditText内,关闭软键盘
        Toast.makeText(this,
                if (isTouchInEditText) "点击在输入框内" else "点击在输入框外",
                Toast.LENGTH_SHORT).show()
    }

比较推荐使用

2. 为布局根节点设置点击事件
        skill_touch_rootView.setOnClickListener { v ->
            val imm = getSystemService(Context.INPUT_METHOD_SERVICE)
                    as InputMethodManager
            imm.hideSoftInputFromWindow(v.windowToken, 0)
        }

缺点:如果布局中其他控件设置了OnClickListener,则点击该控件区域并不会关闭软键盘。

如下图(灰色为根布局,绿色为按钮,白色为输入框),则只有点击灰色区域才能关闭软键盘。

最后,附上个人测试所用的 SkillEditTouchActivity源码~

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

友情链接更多精彩内容