Wenn der Nutzer den Fokus auf eine bearbeitbare Textansicht wie ein EditText-Element legt und eine Hardwaretastatur angeschlossen ist, wird die gesamte Eingabe vom System verarbeitet. Wenn Sie die Tastatureingabe jedoch abfangen oder direkt verarbeiten möchten, können Sie dies tun, indem Sie Callback-Methoden aus der KeyEvent.Callback-Schnittstelle implementieren, z. B. onKeyDown() und onKeyMultiple().
Sowohl die Activity- als auch die View-Klasse implementieren die KeyEvent.Callback-Schnittstelle. Daher überschreiben Sie die Callback-Methoden in der Regel in der Erweiterung dieser Klassen.
Hinweis:Wenn Sie Tastaturereignisse mit der KeyEvent-Klasse und zugehörigen APIs verarbeiten, gehen Sie davon aus, dass die Tastaturereignisse nur von einer Hardwaretastatur stammen. Verlassen Sie sich nicht darauf, dass Sie Schlüsselereignisse für eine beliebige Taste auf einer Soft-Input-Methode (einer Bildschirmtastatur) erhalten.
Einzelne Schlüsselereignisse verarbeiten
Wenn Sie einen einzelnen Tastendruck verarbeiten möchten, implementieren Sie je nach Bedarf onKeyDown() oder onKeyUp(). Normalerweise verwenden Sie onKeyUp(), wenn Sie sicherstellen möchten, dass Sie nur ein Ereignis erhalten. Wenn der Nutzer eine Taste drückt und gedrückt hält, wird onKeyDown() mehrmals aufgerufen.
Diese Implementierung reagiert beispielsweise auf einige Tastaturtasten, um ein Spiel zu steuern:
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); } }
Modifikatortasten verarbeiten
Wenn Sie auf Ereignisse von Modifikatortasten reagieren möchten, z. B. wenn eine Taste mit Shift
oder Control kombiniert wird, können Sie die KeyEvent
abfragen, die an die Callback-Methode übergeben wird. Mehrere Methoden liefern Informationen zu Modifikatortasten, z. B. getModifiers() und getMetaState().
Die einfachste Lösung besteht jedoch darin, mit Methoden wie isShiftPressed() und isCtrlPressed() zu prüfen, ob die gewünschte Modifikatortaste gedrückt wird.
Hier ist beispielsweise noch einmal die onKeyUp() Implementierung
mit zusätzlicher Verarbeitung für den Fall, dass die Shift-Taste mit einer der Tasten gedrückt wird:
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); } }
Zusätzliche Ressourcen
- Tastenkombinationshelfer: Systembildschirm, auf dem Nutzer nach den Tastenkombinationen suchen können, die Ihre App bietet.