Quando l'utente imposta lo stato attivo su una visualizzazione di testo modificabile, ad esempio un elemento EditText
, e l'utente ha una tastiera hardware collegata, tutto l'input viene gestito dal sistema. Tuttavia, se vuoi intercettare o gestire direttamente l'input da tastiera, puoi implementare i metodi di callback dall'interfaccia KeyEvent.Callback
, come onKeyDown()
e onKeyMultiple()
.
Entrambe 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 i tasti su un metodo di immissione software (una tastiera sullo schermo).
Gestire singoli eventi chiave
Per gestire una singola pressione dei tasti, implementa
onKeyDown()
o onKeyUp()
,
a seconda dei casi. In genere, utilizzi
onKeyUp()
se vuoi assicurarti di ricevere un solo evento. Se l'utente 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); } }
Gestire i tasti di modifica
Per rispondere agli eventi dei tasti di modifica, ad esempio quando un tasto viene combinato con Maiusc
o Ctrl, puoi eseguire una query sul valore KeyEvent
che viene trasmesso al metodo di callback. Esistono diversi metodi che forniscono informazioni sui tasti di modifica, come getModifiers()
e getMetaState()
.
Tuttavia, la soluzione più semplice consiste nel verificare se
il tasto di modifica esatto che ti interessa viene premuto con metodi come
isShiftPressed()
e isCtrlPressed()
.
Ad esempio, ecco di nuovo l'implementazione di onKeyUp()
, con una gestione aggiuntiva per i casi in cui 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
- Aiuto per le scorciatoie da tastiera : una schermata di sistema che consente agli utenti di cercare le scorciatoie da tastiera offerte dalla tua app.