Хорошо, в конце концов, никто не ответил мне, поэтому я нашел обходной путь. Это не лучший вариант, но, по крайней мере, в моем случае проблема решена. Мне нужно было отключить / включить клавиатуру по требованию (через функциональную клавишу на защищенном устройстве Zebra), что усложняет задачу, заключается в том, что эта функция должна работать с WebView, где программно нет простого (... иливсе) способ получить доступ к любому элементу управления EditText, встроенному в него. Работа не идеальна и не элегантна, но она работает для меня, поэтому я хотел поделиться с другими, которые, возможно, сталкиваются с похожими проблемами. Прежде всего мы должны обнаружить прикосновения внутри WebView (в KOTLIN):
webView.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View, m: MotionEvent): Boolean {
if (!keybEnabled) {
hideKeyboard()
}
return false
}
})
Затем я добавил запланированное задание для скрытия клавиатуры:
private fun hideKeyboard() {
Handler().postDelayed({
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(webView.getWindowToken(), 0)
}, 200)
}
Метод hideKeyboard () будетпринудительно скрывать клавиатуру до тех пор, пока пользователь не нажмет кнопку, чтобы включить ее (флаг keybEnabled == true).
У этого решения есть 2 недостатка. 1) Если вы уменьшите задержку до значения, близкого к 100 мс, возможно, что программная клавиатура будет скрыта до того, как Android запустит задачу для ее отображения, поэтому она не будет работать. Для моей ситуации достаточно 200 мс, как в примере, но это зависит от производительности устройства. 2) Иногда программная клавиатура появляется на экране в течение нескольких миллисекунд, а затем исчезает (только когда пользователь нажимает на EditText).
Если пункт 2 не является для вас проблемой, это решение должно работать нормально. Надеюсь, что это поможет другим.
ОБНОВЛЕНИЕ
Я нашел немного другое решение, которое решает также внешний вид клавиатуры, описанный выше. Именно по этой ссылке Решение для обработчика .
ЗАКЛЮЧИТЕЛЬНЫЕ СООБРАЖЕНИЯ
Я думаю, что управление софт-клавиатурой в Android ужасно, ононевероятно, что после стольких лет он все еще основан на такой громоздкой логике. Нет функции, которая бы просто отключала / включала программную клавиатуру программно и для всех элементов управления текущей активности, еще хуже, что нет какой-либо функции SDK, которая возвращает статус программной клавиатуры (отображается / скрывается). Я думаю, что это просто неприемлемо, потому что я не думаю, что команда разработчиков Android потратила бы больше 2 часов, чтобы предоставить такие полезные функции.