Приведение клавиши-модификатора к одному ключевому событию - PullRequest
0 голосов
/ 26 мая 2020

Я использую специальную клавиатуру для приложения AndroidTV. Если указанная клавиатура управляется с помощью пульта дистанционного управления, пользователи могут нажимать кнопку Shift, чтобы включать и выключать заглавные буквы. Если клавиатура управляется через физическую клавиатуру, пользователи могут писать прописные буквы, просто удерживая нажатой клавишу Shift при вводе символа.

Проблема, с которой я сталкиваюсь: пользователи, использующие физическую клавиатуру, должны получать визуальную обратную связь, пока удерживается клавиша Shift. Но Android обрабатывает shift как клавишу-модификатор, что означает, что ключевое событие запускается только тогда, когда shift удерживается вместе с другой клавишей. Использование этого кода показывает только визуальную обратную связь в течение короткого промежутка времени, когда пользователь одновременно нажимает клавишу Shift +:

override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
        if (event?.isShiftPressed) {
            if (event.action == KeyEvent.ACTION_DOWN) {
                toggleCaps(true)

            } else if(event.action == KeyEvent.ACTION_UP) {
                toggleCaps(false)

            }
        }
//...
}

Вместо отображения символов верхнего регистра, только если нажата клавиша Shift +, ожидается, что клавиатура будет отображать символы верхнего регистра при удержании клавиши Shift без нажатия дополнительных клавиш. Следовательно, возможно ли использовать shift как отдельное ключевое событие вместо клавиши-модификатора? Или есть какие-то другие идеи о том, как реализовать ожидаемое поведение?

...