Lorsque l'utilisateur place le curseur sur une vue de texte modifiable, telle qu'un élément EditText
, et qu'un clavier physique y 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 devez donc généralement remplacer 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 qu'ils proviennent uniquement d'un clavier physique. Ne comptez jamais sur la réception d'événements de touche pour une touche avec un mode de saisie virtuel (un clavier à l'écran).
Gérer des événements de touche unique
Pour gérer une pression individuelle sur une touche, implémentez onKeyDown()
ou onKeyUp()
, selon le cas. Généralement, utilisez onKeyUp()
si vous souhaitez vous assurer de ne recevoir qu'un seul événement. Si l'utilisateur appuie sur une touche de manière prolongée, 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 à des événements de touche de modification, par exemple lorsqu'une touche est combinée avec Maj ou Ctrl, vous pouvez interroger l'KeyEvent
transmise à la méthode de rappel. Plusieurs méthodes fournissent des informations sur les touches de modification, telles que getModifiers()
et getMetaState()
.
Cependant, la solution la plus simple consiste à vérifier si l'utilisateur appuie sur la touche de modification exacte qui vous intéresse à 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
- Outil d'aide aux raccourcis clavier : un écran système qui permet aux utilisateurs d'effectuer des recherches dans les raccourcis clavier proposés par votre application.