如何以编程方式打开选项菜单?

Bla*_*BRA 56 android menu button android-activity

我想以编程方式打开optionsMenu,而无需单击用户的菜单键.我该怎么办?

Rob*_*ond 92

或者只是调用Activity.openOptionsMenu()

  • 没有工作,我有动作栏中的自定义视图,并在子视图onClick我调用open/close optionMenu,也有super.open/close不工作,任何想法,我在哪里误, (2认同)
  • 我无法在API20中工作。它什么也没做。 (2认同)

小智 32

显然,在onCreate中执行此操作会中断应用程序,因为Activity尚未附加到窗口.如果你这样做:

@Override
public void onAttachedToWindow() {
    openOptionsMenu(); 
};
Run Code Online (Sandbox Code Playgroud)

...有用.

  • 是的,它有效.但是,最好将`super.onAttachedToWindow()`作为函数的第一行. (9认同)

mar*_*mor 16

对于使用新Toolbar类的开发人员来说Support Library,这就是它的完成方式:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.showOverflowMenu();
Run Code Online (Sandbox Code Playgroud)


Roy*_*nto 11

把这行代码放在你的onResume()中,这应该有帮助!

new Handler().postDelayed(new Runnable() { 
   public void run() { 
     openOptionsMenu(); 
   } 
}, 1000); 
Run Code Online (Sandbox Code Playgroud)


Ode*_*ner 8

来自名为MainActivity的活动内的OnClickListener:

MainActivity.this.openOptionsMenu();
Run Code Online (Sandbox Code Playgroud)


小智 5

如果使用AppCompatActivity

getSupportActionBar().openOptionsMenu();
Run Code Online (Sandbox Code Playgroud)


Cri*_*ian 1

有两种方法可以做到这一点:

Activity.getWindow().openPanel(Window.FEATURE_OPTIONS_PANEL, event);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)