Gérer les actions du clavier

Lorsque l'utilisateur sélectionne un affichage de texte modifiable, par exemple EditText et que l'utilisateur dispose d'un clavier physique, est gérée par le système. Toutefois, si vous souhaitez intercepter ou gérer vous-même la saisie au clavier, vous pouvez le faire en implémentant des méthodes de rappel à partir de KeyEvent.Callback d'interface, telle que onKeyDown() et onKeyMultiple().

Les Activity et les classes View implémentent les KeyEvent.Callback. Vous pouvez donc remplacent généralement les méthodes de rappel dans l'extension de ces classes, approprié.

Remarque:Lorsque vous gérez les événements de clavier avec la commande KeyEvent et les API associées, s'attendent à ce que les événements de clavier provient uniquement d'un clavier matériel. Ne jamais compter sur la réception de clés pour n'importe quelle touche d'un mode de saisie logicielle (clavier à l'écran).

Gérer des événements clés uniques

Pour gérer une pression individuelle sur une touche, implémentez onKeyDown() ou onKeyUp(), le cas échéant. Habituellement, vous utilisez onKeyUp() pour être sûr de ne recevoir qu'un seul événement. Si l'utilisateur appuie et maintient une touche, onKeyDown() est alors 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 Contrôle, vous pouvez interroger KeyEvent transmis à la méthode de rappel. Plusieurs méthodes fournissent des informations sur les touches de modification, getModifiers() et getMetaState(). Toutefois, la solution la plus simple consiste à vérifier la touche de modification exacte qui vous intéresse est appuyée par des méthodes isShiftPressed() et isCtrlPressed().

Par exemple, voici l'implémentation de onKeyUp(). Encore une fois, en cas de maintien de la touche Maj 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

  • Aide aux raccourcis clavier : un écran système qui permet aux utilisateurs de rechercher les raccourcis clavier proposés par votre application.