我想以编程方式打开optionsMenu,而不需要点击用户的菜单键。我会怎么做?如何以编程方式打开选项菜单?
回答
两种方式做到这一点:
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);
我认为你的答案是最好的,因为openOptionsMenu()会导致应用程序在HTC One和Sony Xperia Acro上崩溃,而你的解决方案可以避免这一点...所以谢谢yOu – 2013-09-24 08:34:29
IWindowManager不是SDK的公共部分。你有没有得到它的参考? – 2015-06-23 01:42:14
或者只需要调用Activity.openOptionsMenu()?
是否可以在Activity的oncreate()方法中执行此语句? – Vikas 2011-04-12 04:57:09
@Vikas。将它放在onAttachedToWindow()中,如下面的Kovac所述。 – 2012-11-01 12:03:26
不工作,我有自定义视图在操作栏,并在childview onClick我打电话打开/关闭optionMenu,也与super.open/close 不工作,任何想法,我错了, – 2014-05-18 10:05:23
把这行代码放在你的onResume()中,这应该有所帮助!
new Handler().postDelayed(new Runnable() {
public void run() {
openOptionsMenu();
}
}, 1000);
显然,在onCreate中执行它会中断应用程序,因为Activity尚未附加到窗口。如果你这样做:
@Override
public void onAttachedToWindow() {
openOptionsMenu();
};
...它的工作原理。
是的,它的工作原理。但是,将'super.onAttachedToWindow()'作为函数的第一行会更好。 – 2012-11-01 21:54:02
从OnClickListener的活动中调用MainActivity:
MainActivity.this.openOptionsMenu();
不适用于我的API20。它什么也没做。 – 2014-09-04 01:22:56
但是这个工程:http://stackoverflow.com/a/17903128/1483390 – 2014-09-04 01:32:26
如果你是一个视图中,您可以使用新的Toolbar
类Support Library
的写
((Activity)getContext()).openOptionsMenu();
对于开发商来说,这是如何完成的:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.showOverflowMenu();
if usi NG AppCompatActivity
getSupportActionBar().openOptionsMenu();
谢谢你,为我工作。 – 2016-12-04 06:01:19
对我来说只是“openOptionsMenu();”做了诀窍.. – 2017-04-17 01:42:24
经过长期的研究和多次尝试后,唯一的办法似乎是模拟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);
什么是main_content这里 – LoveForDroid 2017-03-16 15:55:22
对我来说,在onClick中声明toolbar.showOverflowMenu()
不起作用。 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);
- 1. 如何以编程方式打开Drupal 6子菜单?
- 2. 如何在python tkinter中以编程方式打开菜单?
- 3. 侧边菜单,以编程方式隐藏菜单选项
- 4. android:以编程方式更改选项菜单项
- 5. 以编程方式打开WPF菜单控件
- 6. 如何以编程方式更改选项菜单中的项目?
- 7. 以编程方式关闭选项菜单
- 8. 如何以编程方式隐藏导航抽屉菜单项?
- 9. 以编程方式打开浏览器选项卡的列表
- 10. 以编程方式在回调中打开新选项卡
- 11. 如何以编程方式将所选菜单分配给超级菜单...?
- 12. 是否可以用菜单选项打开另一个菜单?
- 13. 如何以编程方式选择Windows中的弹出菜单项?
- 14. 如何关闭未以编程方式打开的选项卡/窗口?
- 15. 编程方式打开一个下拉菜单
- 16. 滑动菜单以编程方式
- 17. 以编程方式创建菜单DevExpress
- 18. 以编程方式显示dijit /菜单
- 19. UITableView以编程方式选择选项
- 20. 以编程方式调用浏览器右键单击菜单选项?
- 21. 当使用`-popUpMenuPositioningItem:atLocation:inView:`以编程方式将菜单附加到按钮时,如何获得所选菜单项?
- 22. 以编程方式打开kendoDetailTemplate
- 23. Postgres以编程方式打开log_statement
- 24. 以编程方式打开SearchableSpinner
- 25. 以编程方式打开蓝牙
- 26. 以编程方式打开pdf文件
- 27. Primefaces以编程方式打开p:fileUpload
- 28. 以编程方式打开CD托盘
- 29. 以编程方式打开屏幕
- 30. 以编程方式打开窗体
也许英语不是你的母语,但我真的觉得你掉你的问题可以回答太多的话。请尝试编辑。 – 2010-06-28 14:42:56