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

2019-02-19  本文已影响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源码~

上一篇 下一篇

猜你喜欢

热点阅读