У меня есть ScrollView
, содержащий несколько просмотров EditText
и AutoCompleteTextView
. Я хотел бы скрыть клавиатуру, если пользователь прокручивает или нажимает на текстовое поле.
Итак, я добавил это в свой Fragments
onViewCreated()
myScrollView?.viewTreeObserver?.addOnScrollChangedListener {
hideKeyboard()
}
Проблема в , когда я начинаю прокручивать клавиатуру, скрывается, НО, когда я нажимаю EditText
или AutoCompleteTextView
, представление начинает прокручиваться к этому полю, чтобы показать клавиатуру, но поскольку прокрутка имеет addOnScrollChangedListener
, она скрывает клавиатуру. И вид просто прыгает вперед и назад, скрывая и показывая клавиатуру.
Как правильно справиться с этим сценарием?
класс расширения
fun Activity.hideKeyboard() {
hideKeyboard(currentFocus ?: View(this))
}
fun Context.hideKeyboard(view: View) {
val inputMethodManager = getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}
fun Fragment.hideKeyboard() {
view?.let {
activity?.hideKeyboard(it)
}
}