onKeyListener / dispatchKeyEvent неправильное поведение с Edittext и слушателем клавиатуры - PullRequest
0 голосов
/ 16 октября 2018

У меня есть EditText, где я реализую Слушатель, чтобы знать, когда backspace вниз / вверх

Но у слушателя странное поведение.

Когда я нажимаю и удерживаю любую клавишу на программной клавиатуре, клавиши «Вниз» и «Вверх» вызываются последовательно, но только когда я отпускаю клавишу.

Когда я нажимаю и удерживаю клавишу Backspace, вверх / вверхdown вызываются несколько раз, даже если я все еще нажимаю клавишу.

Я использую журналы, чтобы проверить поведение.См. Код ниже:

    myEditText.setOnKeyListener { v, keyCode, event ->


        if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {

            if (event.action == KeyEvent.ACTION_UP) {
                Log.wtf("delete", "up")

            }

            if (event.action == KeyEvent.ACTION_DOWN) {
                Log.wtf("delete", "down")
            }


        } else {

            if (event.action == KeyEvent.ACTION_UP) {
                Log.wtf("another ", "up")

            }

            if (event.action == KeyEvent.ACTION_DOWN) {
                Log.wtf("another", "down")
            }

        }

        true

    }
}

Журнал, когда я нажимаю и удерживаю клавишу Backspace:

E/delete: down
E/delete: up
E/delete: down
E/delete: up
E/delete: down
E/delete: up
E/delete: down
E/delete: up

Журнал, когда я нажимаю другую клавишу и отпускаю

E/another: down
E/another: up

я получаю ту же ошибку, когда переопределяю dispatchKeyEvent () из действия.

override fun dispatchKeyEvent(event: KeyEvent): Boolean {

    if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {

        if (event.action == KeyEvent.ACTION_UP) {
            Log.wtf("delete", "up")

        }

        if (event.action == KeyEvent.ACTION_DOWN) {
            Log.wtf("delete", "down")
        }


    } else {

        if (event.action == KeyEvent.ACTION_UP) {
            Log.wtf("another ", "up")

        }

        if (event.action == KeyEvent.ACTION_DOWN) {
            Log.wtf("another", "down")
        }

    }

    return true

}

Это правильное поведение?Разве события не будут вызываться только тогда, когда я нажимаю и нажимаю кнопку?

...