web-dev-qa-db-fra.com

Détection de la touche de menu physique, appuyez sur Android

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);
    }
}
40
Entropy1024

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.

82
SK9

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);
    }
}
11
mbonness
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);
    }
}
5
ihab alnaqib

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.

1
Alexanus

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).

0
Ameen