web-dev-qa-db-fra.com

Comment ouvrir le menu des options par programme?

Je voudrais ouvrir le menu optionsMenu par programme sans un clic sur la touche de menu de l'utilisateur. Comment je ferais ça?

55
BlaBRA

Ou appelez simplement Activity.openOptionsMenu () ?

90
Robby Pond

Apparemment, le faire dans onCreate brise l'application, puisque Activity n'est pas encore attaché à une fenêtre. Si vous le faites comme ça:

@Override
public void onAttachedToWindow() {
    openOptionsMenu(); 
};

...Ça marche.

31
Kovač

Pour les développeurs utilisant la nouvelle classe Toolbar du Support Library, voici comment procéder:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.showOverflowMenu();
15
marmor

Mettez cette ligne de code dans votre onResume (), cela devrait aider!

new Handler().postDelayed(new Runnable() { 
   public void run() { 
     openOptionsMenu(); 
   } 
}, 1000); 
11
Royston Pinto

à partir d'un OnClickListener dans une activité appelée MainActivity:

MainActivity.this.openOptionsMenu();
8
Oded Breiner

si vous utilisez AppCompatActivity

getSupportActionBar().openOptionsMenu();
5
Abhijit

Deux façons de le faire: 

Activity.getWindow().openPanel(Window.FEATURE_OPTIONS_PANEL, event);

L'argument event est une KeyEvent décrivant la touche utilisée pour ouvrir le menu, ce qui peut modifier l'affichage du menu en fonction du type de clavier d'où il provient. 

Ou ... en simulant que l'utilisateur a appuyé sur le bouton:

IWindowManager wManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
KeyEvent kd = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SOFT_LEFT);
KeyEvent ku = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SOFT_LEFT);
wManager.injectKeyEvent(kd.isDown(), kd.getKeyCode(), kd.getRepeatCount(), kd.getDownTime(), kd.getEventTime(), true);
1
Cristian

Si vous êtes à l'intérieur de votre vue, vous pouvez écrire

    ((Activity)getContext()).openOptionsMenu();
0
Fabio Bianconi

Pour moi, déclarer toolbar.showOverflowMenu() dans onClick n'a pas fonctionné. openOptionsMenu() n'a pas non plus fonctionné pour moi. Au lieu de cela, la manière suivante est travaillée pour moi,

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                toolbar.showOverflowMenu();
            }
        }, 500);
0
Nanda Gopal
toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setTitleTextColor(0xFFFFFFFF);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            toolbar.showOverflowMenu();
        }
    }, 100);
0
Mukesh KrishMeg

Après de longues recherches et de nombreux essais, le seul moyen semble simuler une variable KeyEvent. Cela fait apparaître le menu des options:

BaseInputConnection mInputConnection = new BaseInputConnection( findViewById(R.id.main_content), true);
KeyEvent kd = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU);
KeyEvent ku = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MENU);
mInputConnection.sendKeyEvent(kd);
mInputConnection.sendKeyEvent(ku);
0
Lotfi