Проблема со скрытием клавиатуры при прокрутке до поля EditText - PullRequest
2 голосов
/ 05 августа 2020

У меня есть 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)
    }
}
...