J'essaie de détecter quand le bouton de menu physique sur mon Android a été enfoncé. Je pensais que le code ci-dessous fonctionnerait mais il ne fonctionne pas. Où vais-je me tromper s'il vous plaît?
L'erreur renvoyée est "Modificateur illégal 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);
}
}
Je rechercherais un événement clé p, plutôt qu'un événement down, 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; renvoie false
si vous souhaitez que le système gère également l'événement.
Vous pouvez également faire tout cela dans votre instance Activity
car Activity
est une sous-classe indirecte connue de KeyEvent
.
Sur la base de tout ce qui précède, cela semble être la mise en œuvre correcte qui consommera uniquement les événements de touche de menu "haut" et transmettra d'autres événements de clé à la superclasse.
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
// ...
return true;
} else {
return super.onKeyUp(keyCode, event);
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
//Checking for the "menu" key
if (keyCode == KeyEvent.KEYCODE_MENU) {
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
mDrawerLayout.closeDrawers();
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
Assurez-vous de remplacer la méthode onKeyDown dans votre classe Activity. Il existe une autre méthode onKeyDown dans la classe View mais elle ne sera pas appelée si la touche de menu est enfoncée.
Si vous avez géré l'événement, renvoyez simplement true, si vous n'avez pas renvoyé false, le système Android peut transmettre l'événement au reste des composants pour le gérer).