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源码~
网友评论