Je voudrais ouvrir le menu optionsMenu par programme sans un clic sur la touche de menu de l'utilisateur. Comment je ferais ça?
Ou appelez simplement Activity.openOptionsMenu () ?
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.
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();
Mettez cette ligne de code dans votre onResume (), cela devrait aider!
new Handler().postDelayed(new Runnable() {
public void run() {
openOptionsMenu();
}
}, 1000);
à partir d'un OnClickListener dans une activité appelée MainActivity:
MainActivity.this.openOptionsMenu();
si vous utilisez AppCompatActivity
getSupportActionBar().openOptionsMenu();
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);
Si vous êtes à l'intérieur de votre vue, vous pouvez écrire
((Activity)getContext()).openOptionsMenu();
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);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitleTextColor(0xFFFFFFFF);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
toolbar.showOverflowMenu();
}
}, 100);
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);