Когда пользователь фокусируется на редактируемом текстовом представлении, например элементе EditText, и у него подключена аппаратная клавиатура, все входные данные обрабатываются системой. Однако если вы хотите перехватывать или напрямую обрабатывать ввод с клавиатуры, вы можете сделать это, реализовав методы обратного вызова из интерфейса KeyEvent.Callback, такие как onKeyDown() и onKeyMultiple().
Классы Activity и View реализуют интерфейс KeyEvent.Callback, поэтому вы можете переопределить методы обратного вызова в расширении этих классов.
Примечание. При обработке событий клавиатуры с помощью класса KeyEvent и связанных API ожидайте, что события клавиатуры поступают только от аппаратной клавиатуры. Никогда не полагайтесь на получение событий нажатия клавиш для любой клавиши при вводе с экранной клавиатуры.
Обработка событий нажатия одной клавиши
Чтобы обработать нажатие отдельной клавиши, реализуйте метод onKeyDown() или onKeyUp(). Обычно метод onKeyUp() используется, когда нужно получить только одно событие. Если пользователь нажмет и будет удерживать клавишу, метод onKeyDown() будет вызван несколько раз.
Например, в этой реализации некоторые клавиши клавиатуры используются для управления игрой:
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_D -> { moveShip(MOVE_LEFT) true } KeyEvent.KEYCODE_F -> { moveShip(MOVE_RIGHT) true } KeyEvent.KEYCODE_J -> { fireMachineGun() true } KeyEvent.KEYCODE_K -> { fireMissile() true } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_D: moveShip(MOVE_LEFT); return true; case KeyEvent.KEYCODE_F: moveShip(MOVE_RIGHT); return true; case KeyEvent.KEYCODE_J: fireMachineGun(); return true; case KeyEvent.KEYCODE_K: fireMissile(); return true; default: return super.onKeyUp(keyCode, event); } }
Обработка клавиш-модификаторов
Чтобы реагировать на события клавиш-модификаторов, например когда клавиша нажимается в сочетании с Shift или Control, вы можете запросить KeyEvent, который передается методу обратного вызова. Некоторые методы предоставляют информацию о клавишах-модификаторах, например getModifiers() и getMetaState().
Однако проще всего проверить, нажата ли нужная клавиша-модификатор, с помощью методов isShiftPressed() и isCtrlPressed().
Например, вот как можно реализовать onKeyUp() с дополнительной обработкой нажатия клавиши Shift вместе с одной из клавиш:
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { ... KeyEvent.KEYCODE_J -> { if (event.isShiftPressed) { fireLaser() } else { fireMachineGun() } true } KeyEvent.KEYCODE_K -> { if (event.isShiftPressed) { fireSeekingMissle() } else { fireMissile() } true } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { ... case KeyEvent.KEYCODE_J: if (event.isShiftPressed()) { fireLaser(); } else { fireMachineGun(); } return true; case KeyEvent.KEYCODE_K: if (event.isShiftPressed()) { fireSeekingMissle(); } else { fireMissile(); } return true; default: return super.onKeyUp(keyCode, event); } }
Дополнительные ресурсы
- Помощник по быстрым клавишам. Системный экран, на котором пользователи могут искать быстрые клавиши, доступные в вашем приложении.