Gestire le azioni della tastiera

Prova Compose
Jetpack Compose è il toolkit UI consigliato per Android. Scopri come gestire le azioni della tastiera in Compose.

Quando l'utente imposta lo stato attivo su una visualizzazione testo modificabile, ad esempio un elemento EditText, e ha collegato una tastiera hardware, tutti gli input vengono gestiti dal sistema. Tuttavia, se vuoi intercettare o gestire direttamente l'input da tastiera, puoi farlo implementando i metodi di callback dell'interfaccia KeyEvent.Callback, come onKeyDown() e onKeyMultiple().

Le classi Activity e View implementano l'interfaccia KeyEvent.Callback, quindi in genere esegui l'override dei metodi di callback nell'estensione di queste classi, a seconda dei casi.

Nota: quando gestisci gli eventi della tastiera con la classe KeyEvent e le API correlate, prevedi che gli eventi della tastiera provengano solo da una tastiera hardware. Non fare mai affidamento sulla ricezione di eventi chiave per qualsiasi tasto di un metodo di immissione su schermo (una tastiera sullo schermo).

Gestisci i singoli eventi chiave

Per gestire una singola pressione di un tasto, implementa onKeyDown() o onKeyUp(), a seconda dei casi. In genere, utilizzi onKeyUp() se vuoi assicurarti di ricevere un solo evento. Se l'utente preme e tiene premuto un tasto, onKeyDown() viene chiamato più volte.

Ad esempio, questa implementazione risponde ad alcuni tasti della tastiera per controllare un gioco:

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);
    }
}

Gestisci i tasti di modifica

Per rispondere agli eventi dei tasti di modifica, ad esempio quando un tasto viene combinato con Maiusc o Controllo, puoi eseguire una query su KeyEvent passato al metodo di callback. Diversi metodi forniscono informazioni sui tasti di modifica, ad esempio getModifiers() e getMetaState(). Tuttavia, la soluzione più semplice è verificare se il tasto di modifica che ti interessa viene premuto con metodi come isShiftPressed() e isCtrlPressed().

Ad esempio, ecco di nuovo l'implementazione onKeyUp(), con una gestione aggiuntiva per quando il tasto Maiusc viene tenuto premuto con uno dei tasti:

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);
    }
}

Risorse aggiuntive

  • Keyboard Shortcuts Helper: schermata di sistema che consente agli utenti di cercare le scorciatoie da tastiera offerte dalla tua app.