Я использую специальную клавиатуру для приложения 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 как отдельное ключевое событие вместо клавиши-модификатора? Или есть какие-то другие идеи о том, как реализовать ожидаемое поведение?