Quando l'utente attiva una visualizzazione di testo modificabile, ad esempio un elementoEditText
, e ha una tastiera hardware collegata, tutto l'input viene gestito dal sistema. Tuttavia, se vuoi intercettare
o gestire direttamente l'input della tastiera, puoi farlo implementando metodi di callback
dall'interfaccia KeyEvent.Callback
, ad esempio onKeyDown()
e onKeyMultiple()
.
Sia le classi Activity
che View
implementano l'interfaccia
KeyEvent.Callback
, quindi generalmente override i metodi di callback nell'estensione di queste classi, come
è opportuno.
Nota:quando gestisci gli eventi della tastiera con la classe KeyEvent
e le API correlate, tieni presente che gli eventi della tastiera provengono solo da una tastiera hardware. Non fare mai affidamento sulla ricezione di eventi correlati ai tasti per qualsiasi tasto su un metodo di immissione soft (una tastiera sullo schermo).
Gestire singoli eventi chiave
Per gestire una singola pressione del tasto, implementa
onKeyDown()
o onKeyUp()
,
in base alle esigenze. Di solito, viene utilizzato
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); } }
Gestire i tasti di modifica
Per rispondere agli eventi chiave dei modificatori, ad esempio quando un tasto è combinato con Maiusc o Ctrl, puoi eseguire query su KeyEvent
, che viene 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 la tastiera modificata esatta che ti interessa è premuta con metodi come isShiftPressed()
e isCtrlPressed()
.
Ad esempio, di seguito è riportata di nuovo l'implementazione di 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
- Guida scorciatoie da tastiera: schermata di sistema che consente agli utenti di cercare le scorciatoie da tastiera offerte dalla tua app.