Я всюду искал решение этой проблемы, надеюсь, вы сможете помочь. Мне нужно скрыть программную клавиатуру, когда пользователь прикасается к ЛЮБОМУ тексту редактирования (а не только к тому, который в данный момент сфокусирован). Это то, что я сделал до сих пор:
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
if (event.action == MotionEvent.ACTION_DOWN) {
val v = currentFocus
if (v is EditText) {
val coords = intArrayOf(0,0)
v.getLocationOnScreen(coords)
val x = event.rawX + v.left - coords[0]
val y = event.rawY + v.top - coords[1]
if (x < v.left || x > v.right || y < v.top || y > v.bottom) {
v.clearFocus()
v.postDelayed({
val v2 = currentFocus
if (v2 !is EditText) {
val imm: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(v.getWindowToken(), 0)
}
}, 100)
}
}
}
return super.dispatchTouchEvent(event)
}
... это работает достаточно прилично, но я ненавижу "postDelayed"! Вы согласитесь со мной, что это НЕ надежно и ... это отстой.
Может кто-нибудь помочь мне найти лучшее решение?