美文网首页
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