Как программно открыть меню опций?

Я хотел бы открыть optionsMenu программно, не нажимая на кнопку меню от пользователя. Как мне это сделать?

Solutions Collecting From Web of "Как программно открыть меню опций?"

Или просто вызовите Activity.openOptionsMenu () ?

Очевидно, что делать это в onCreate breaks app, так как Activity еще не привязана к окну. Если вы сделаете это так:

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

…оно работает.

Для разработчиков, использующих новый класс Toolbar Support Library , так оно и делается:

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

Поместите эту строку кода в свой onResume (), это должно помочь!

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

Из OnClickListener внутри действия, называемого MainActivity:

 MainActivity.this.openOptionsMenu(); 

При использовании AppCompatActivity

 getSupportActionBar().openOptionsMenu(); 

Два способа сделать это:

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

Аргумент event – это KeyEvent описывающий ключ, используемый для открытия меню, который может изменять способ отображения меню в зависимости от типа клавиатуры.

Или … путем моделирования того, что пользователь нажал кнопку:

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

Если вы находитесь внутри своего вида, вы можете написать

  ((Activity)getContext()).openOptionsMenu(); 

После долгого исследования и многих попыток, единственный способ, похоже, KeyEvent . Появится меню параметров:

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

Для меня объявление toolbar.showOverflowMenu() в onClick не работает. openOptionsMenu() также не работал для меня. Вместо этого для меня работает следующий способ:

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