美文网首页
Android之点击空白处关闭软键盘

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

作者: 木木禾木 | 来源:发表于2019-02-19 18:52 被阅读0次

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源码~

相关文章

网友评论

      本文标题:Android之点击空白处关闭软键盘

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