41 votes

Détection physique de la touche Menu enfoncée sous Android

J'essaie de détecter quand le bouton de menu physique de mon téléphone Android a été appuyé. Je pensais que le code ci-dessous fonctionnerait, mais cela ne fonctionnait pas. Où est-ce que je me trompe

L'erreur renvoyée est 'Illegal modificateur pour le paramètre onKeyDown; seule la finale est autorisée '

 public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // Do Stuff
    } else {
        return super.onKeyDown(keyCode, event);
    }
}
 

83voto

SK9 Points 9683

Je chercherais un événement clé vers le haut , plutôt qu'un événement vers le bas , avec onKeyUp .

 public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // ........
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
 

Nous retournons true parce que nous gérons l'événement; Renvoyez false si vous souhaitez que le système gère également l'événement.

Vous pouvez aussi faire tout cela dans votre instance Activity car Activity est une sous-classe indirecte connue de KeyEvent .

11voto

mbonness Points 301

Sur la base de tout ce qui précède, cela semble être la bonne implémentation qui consomme uniquement les événements "up" de la touche de menu et transmet d'autres événements clés à la superclasse.

 public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // ...
        return true;
    } else {
        return super.onKeyUp(keyCode, event);
    }
}
 

5voto

ihab alnaqib Points 31
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (keyCode == KeyEvent.KEYCODE_MENU) { 

if (mDrawerLayout.isDrawerOpen(mDrawerList)) {

            mDrawerLayout.closeDrawers();
        } else {
            mDrawerLayout.openDrawer(Gravity.RIGHT);
        }
        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }
}

0voto

Ameen Points 1

Si vous avez géré l'événement, retournez true, si vous ne l'avez pas renvoyé, le système Android pourra alors transmettre l'événement au reste des composants pour le gérer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X