Как убирать клавиатуру при клике на любое место экрана кроме текстового поля?
Помогите написать функцию которая бы реализовала следующую возможность: при клике на EditText клавиатура показывалась, а при клике на любом месте экрана кроме другого EditText убиралась. То есть при переходе из одного EditText в другое клавиатура просто должна оставаться. Пробовал разные варианты кода, но в каждом из-них были какие-то артефакты - или клавиатура закрывалась/открывалась при переходе между EditText или не закрывалась при клике на toolbar'e... Для примера коды: (1)
binding.root.setOnTouchListener { view, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
false
}
(2)
val listOfDates = listOf(myEditText1, myEditText2, myEditText3, myEditText4)
listOfDates.forEach { i ->
i.onFocusChangeListener = object : View.OnFocusChangeListener {
override fun onFocusChange(v: View, hasFocus: Boolean) {
if (hasFocus) {
return
}
if (!hasFocus) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(v.windowToken, 0)
}
}
}
}
}
(3)
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
if (event.action == MotionEvent.ACTION_DOWN) {
notHideKeyboard()
}
return super.dispatchTouchEvent(event)
}
private fun notHideKeyboard() {
val listOfDates = listOf(myEditText1, myEditText2, myEditText3, myEditText4)
listOfDates.forEach { i ->
i.onFocusChangeListener = object : View.OnFocusChangeListener {
override fun onFocusChange(v: View, hasFocus: Boolean) {
if ((v is EditText) and (hasFocus)) {
return
}
else ((v !is EditText) and (hasFocus)) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(v.windowToken, 0)
return
}
}
}
}
}