Лучший способ скрыть мягкую клавиатуру на ощупь вне ЛЮБОГО editText - PullRequest
0 голосов
/ 18 апреля 2020

Я всюду искал решение этой проблемы, надеюсь, вы сможете помочь. Мне нужно скрыть программную клавиатуру, когда пользователь прикасается к ЛЮБОМУ тексту редактирования (а не только к тому, который в данный момент сфокусирован). Это то, что я сделал до сих пор:

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"! Вы согласитесь со мной, что это НЕ надежно и ... это отстой.

Может кто-нибудь помочь мне найти лучшее решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...