Tastaturaktionen verarbeiten

Wenn der Nutzer den Fokus auf eine bearbeitbare Textansicht wie ein EditText-Element legt und eine Hardwaretastatur hat, wird die gesamte Eingabe vom System verarbeitet. Wenn du die Tastatureingabe jedoch selbst abfangen oder direkt verarbeiten möchtest, kannst du Callback-Methoden wie onKeyDown() und onKeyMultiple() von der KeyEvent.Callback-Schnittstelle implementieren.

Die Activity- und die View-Klasse implementieren die KeyEvent.Callback-Schnittstelle, sodass Sie die Callback-Methoden in der Erweiterung dieser Klassen bei Bedarf überschreiben.

Hinweis:Bei der Verarbeitung von Tastaturereignissen mit der KeyEvent-Klasse und zugehörigen APIs sollten Sie davon ausgehen, dass die Tastaturereignisse nur von einer Hardwaretastatur kommen. Verlassen Sie sich niemals auf den Empfang von Schlüsselereignissen für eine Taste bei einer Soft-Eingabemethode, einer Bildschirmtastatur.

Ereignisse mit einzelnem Schlüssel verarbeiten

Für einen einzelnen Tastendruck musst du je nach Bedarf onKeyDown() oder onKeyUp() implementieren. Normalerweise verwenden Sie onKeyUp(), wenn Sie sicherstellen möchten, dass Sie nur ein Ereignis erhalten. Wenn der Nutzer eine Taste hält, wird onKeyDown() mehrmals aufgerufen.

Diese Implementierung reagiert beispielsweise auf einige Tasten der Tastatur, 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 bedienen

Wenn Sie auf Modifikatortastenereignisse reagieren möchten, z. B. wenn eine Taste mit Umschalt oder Strg kombiniert wird, können Sie die KeyEvent abfragen, die an die Callback-Methode übergeben wird. Verschiedene Methoden liefern Informationen zu Modifikatortasten, z. B. getModifiers() und getMetaState(). Die einfachste Lösung besteht jedoch darin, zu prüfen, ob genau die gewünschte Modifikatortaste mit Methoden wie isShiftPressed() und isCtrlPressed() gedrückt wird.

Hier sehen Sie noch einmal die onKeyUp()-Implementierung mit zusätzlichem Handler für den Fall, dass die Umschalttaste bei einer der Tasten gedrückt gehalten 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);
    }
}

Weitere Informationen

  • Keyboard Shortcut Helper : ein Systembildschirm, mit dem Nutzer nach den in Ihrer App angebotenen Tastenkombinationen suchen können.