Me gustaría abrir las opciones del menú mediante progtwigción sin hacer clic en la tecla de menú del usuario. ¿Como podría hacerlo?
O simplemente llame a Activity.openOptionsMenu () ?
Al parecer, hacerlo en la aplicación onCreate breaks, ya que Activity aún no está adjunta a una ventana. Si lo haces así:
@Override public void onAttachedToWindow() { openOptionsMenu(); };
…funciona.
Para los desarrolladores que usan la nueva clase de Toolbar
de Toolbar
de la Support Library
, así es como se hace:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.showOverflowMenu();
Ponga esta línea de código en su onResume (), ¡esto debería ayudar!
new Handler().postDelayed(new Runnable() { public void run() { openOptionsMenu(); } }, 1000);
desde un OnClickListener dentro de una actividad llamada MainActivity:
MainActivity.this.openOptionsMenu();
si usa AppCompatActivity
getSupportActionBar().openOptionsMenu();
Dos formas de hacerlo:
Activity.getWindow().openPanel(Window.FEATURE_OPTIONS_PANEL, event);
El argumento de event
es un KeyEvent
describe la clave utilizada para abrir el menú, que puede modificar cómo se muestra el menú según el tipo de teclado del que proviene.
O … simulando que el usuario ha presionado el botón:
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 estás dentro de una vista, puedes escribir
((Activity)getContext()).openOptionsMenu();
Después de una larga investigación y muchos bashs, la única forma parece ser simular un KeyEvent
. Esto hace que aparezca el menú de opciones:
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);
Para mí, declarar toolbar.showOverflowMenu()
en onClick no funciona. openOptionsMenu()
tampoco funcionó para mí. En vez de eso, me funciona la siguiente manera,
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);