2012-07-31 16 views
3

Pour une raison quelconque, si j'appuie longuement sur le bouton de menu pendant que mon application charge du contenu, elle s'arrête juste comme j'ai appuyé sur la touche retour.Comment désactiver complètement le bouton de menu sur Android?

Je ne veux pas que le bouton de menu pour se comporter comme cela si ma question est la suivante:

Comment puis-je bouton de menu désactiver completly? Je n'en ai jamais besoin dans mon application, je veux juste l'éteindre.

i essayé:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 

    if (keyCode == KeyEvent.KEYCODE_BACK){ 
     onBackPressed(); 
    } 


    if (keyCode == KeyEvent.KEYCODE_MENU){ 
     return true; 
    } 
    else{ 
     return super.onKeyDown(keyCode, event); 
    } 

} 

bouton Menu fonctionne toujours ...

Toute aide sera appréciée! Merci.

+0

si vous utilisez ProgressDialog pour télécharger des données puis définissez ProgressDialog cancelable true. alors vous n'avez pas besoin de désactiver le menu arrière. –

+0

Dans certains des téléphones samsung, le menu de presse long est mappé pour la recherche. Si votre téléphone est Samsung, retourner vrai pour la clé de recherche – nandeesh

+0

Rien ne fonctionne encore, si je presse longtemps le bouton de menu, ma boîte de dialogue de progression a été annulée, et mon application se bloque. J'ai vraiment besoin d'un moyen de tuer ce bouton de menu stupide dont je n'ai pas besoin pourquoi je ne peux pas l'éteindre? –

Répondre

10

Vous devez renvoyer true pour que le menu s'affiche; Si vous retournez faux, il ne sera pas affiché. Je devine que cela va fonctionner:

@Override 
public boolean onPrepareOptionsMenu (Menu menu) { 
    .... ..... 
    return false; 
} 
+0

Si je veux seulement le 'désactiver', pas le cacher, alors? – Darpan

+0

Depuis API-11, cette méthode a été modifiée. 'public void onPrepareOptionsMenu (menu Menu)' –

+0

Cette méthode ne fonctionne pas bien lors du sous-classement AppCompatActivity –

0

J'ai dû désactiver le bouton de menu et, ce que je faisais était d'ajouter la ligne suivante:

public boolean dispatchKeyEvent(KeyEvent event) { 
    return true; 
} 

qui indique essentiellement le système d'exploitation que tous les boutons sont pressés là où ils sont déjà traités, donc aucune action ne doit être prise. Ajoutez-le après la méthode onCreate.

0
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    return (keyCode == KeyEvent.KEYCODE_MENU ? true : super.onKeyDown(keyCode, event)); 
} 
3

Vous devez retourner faux.

@Override 
public boolean onMenuOpened(final int featureId, final Menu menu) { 
    super.onMenuOpened(featureId, menu); 
    return false; 
} 
+1

J'ai essayé toutes les méthodes onKeyDown/onKeyUp/dispatchTouchEvent/onPreparedOptionsMenu. c'est le seul qui a fonctionné pour moi – user2968401

+0

Fonctionne avec AppCompatActivity –

0

celui que vous avez posté devrait fonctionner,
quand même essayer cela, il devrait fonctionner

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    final int keyCode = event.getKeyCode(); 
    if (keyCode == KeyEvent.KEYCODE_MENU){ 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
+0

avec votre code j'obtiens la variable d'erreur keyCode est déjà défini. –

Questions connexes