Lorsque l'utilisateur donne la priorité à une vue de texte modifiable, comme un élément EditText
, et qu'un clavier physique est connecté, toutes les entrées sont gérées par le système. Toutefois, si vous souhaitez intercepter ou gérer directement la saisie au clavier, vous pouvez le faire en implémentant des méthodes de rappel à partir de l'interface KeyEvent.Callback
, telles que onKeyDown()
et onKeyMultiple()
.
Les classes Activity
et View
implémentent l'interface KeyEvent.Callback
. Vous remplacez donc généralement les méthodes de rappel dans votre extension de ces classes, le cas échéant.
Remarque:Lorsque vous gérez des événements de clavier avec la classe KeyEvent
et les API associées, attendez-vous à ce que les événements de clavier ne proviennent que d'un clavier physique. Ne comptez jamais sur la réception d'événements de touche pour une touche d'une méthode de saisie logicielle (clavier à l'écran).
Gérer les événements de touche unique
Pour gérer une pression sur une touche individuelle, implémentez onKeyDown()
ou onKeyUp()
, selon le cas. En général, vous utilisez onKeyUp()
si vous souhaitez vous assurer de ne recevoir qu'un seul événement. Si l'utilisateur appuie de manière prolongée sur une touche, onKeyDown()
est appelé plusieurs fois.
Par exemple, cette implémentation répond à certaines touches du clavier pour contrôler un jeu:
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); } }
Gérer les touches de modification
Pour répondre aux événements de touche de modification, par exemple lorsqu'une touche est combinée avec Maj ou Ctrl, vous pouvez interroger la KeyEvent
transmise à la méthode de rappel. Plusieurs méthodes fournissent des informations sur les touches de modification, telles que getModifiers()
et getMetaState()
.
Toutefois, la solution la plus simple consiste à vérifier si la touche de modification exacte qui vous intéresse est enfoncée à l'aide de méthodes telles que isShiftPressed()
et isCtrlPressed()
.
Par exemple, voici à nouveau l'implémentation de onKeyUp()
, avec une gestion supplémentaire lorsque la touche Maj est maintenue enfoncée avec l'une des touches:
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); } }
Ressources supplémentaires
- Assistant de raccourcis clavier : écran système qui permet aux utilisateurs de rechercher les raccourcis clavier proposés par votre application.