Tastaturaktionen verarbeiten

Wenn die Nutzenden den Fokus auf eine bearbeitbare Textansicht wie eine EditText und eine Hardware-Tastatur angebracht ist, Eingaben vom System verarbeitet. Wenn Sie jedoch Daten abfangen möchten, oder die Tastatureingabe direkt verarbeiten können, können Sie dies tun, indem Sie Callback-Methoden implementieren. aus KeyEvent.Callback Schnittstelle, z. B. onKeyDown() und onKeyMultiple().

Sowohl die Activity und View implementieren die KeyEvent.Callback-Oberfläche die Callback-Methoden in der Erweiterung dieser Klassen überschreiben, angemessen sein.

Hinweis:Bei der Verarbeitung von Tastaturereignissen mit der Eigenschaft KeyEvent und verwandten APIs, dass die Tastaturereignisse nur von einer Hardwaretastatur kommen. Nie auf den Empfang eines Schlüssels verlassen -Ereignisse für beliebige Tasten einer weichen Eingabemethode (einer Bildschirmtastatur) aus.

Ereignisse mit einem Schlüssel verarbeiten

Um einen einzelnen Tastendruck zu verarbeiten, implementieren Sie onKeyDown() oder onKeyUp(), . Normalerweise verwenden Sie onKeyUp() wenn Sie nur ein Ereignis erhalten möchten. Wenn Nutzende eine Taste gedrückt halten, 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 bedienen

Reaktion auf Modifikatortastenereignisse, z. B. wenn eine Taste mit der Umschalttaste kombiniert wird oder Strg auswählen, können Sie KeyEvent abfragen das an die Callback-Methode übergeben wird. Verschiedene Methoden bieten Informationen zu Modifikatortasten, z. B. getModifiers() und getMetaState(). Die einfachste Lösung ist jedoch zu prüfen, genau die Modifikatortaste, die Ihnen wichtig ist, mit Methoden wie isShiftPressed() und isCtrlPressed().

Hier ist ein Beispiel für die onKeyUp()-Implementierung noch einmal mit zusätzlichen Maßnahmen, wenn die Umschalttaste 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);
    }
}

Weitere Informationen