在我的应用程序中,我使用的是ActionBarSherlock 4.4。
由于ForcedOverflow已从最新版本中删除,因此我使用以下XML代码复制OverflowMenu。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_overflow"
android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark"
android:orderInCategory="100"
android:showAsAction="always">
<menu>
<item
android:id="@+id/action_settings"
android:showAsAction="never"
android:title="@string/action_settings" />
<item
android:id="@+id/recycleBin"
android:showAsAction="never"
android:title="Recycle Bin" />
</menu>
</item>
</menu>
对于Android 4.3和2.3.3,Overflow现在对我来说非常合适。
我的问题:
2.3.3设备有一个硬件菜单键。我希望当按下菜单键时,应该打开溢出选项菜单。
我在Activity中使用了以下代码,但它不起作用。 (我在LogCat中收到消息)
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
if (event.getAction() == KeyEvent.ACTION_UP &&
keyCode == KeyEvent.KEYCODE_MENU) {
Log.d("HomeActivity", "OpenOptionsMenu");
openOptionsMenu();
return true;
}
}
return super.onKeyUp(keyCode, event);
}
我环顾四周,尝试了所有建议的解决方案。但是没有人在谈论使用 openOptionsMenu()
打开自定义溢出菜单。
我在这里遗漏了什么吗?
有没有办法让它看起来好像点击了父溢出图标项android:id="@+id/menu_overflow"
?
如果有人指出我在这里错过了什么,那就太好了。
答案 0 :(得分:1)
我今天和你一样有同样的问题。我认为这是因为ActionBarSherlock有自己的选项菜单实现,它覆盖了Android的一个,在此过程中禁用了openOptionsMenu()
方法。也许这是图书馆里的一个错误?
无论如何,我通过覆盖包含菜单的活动中的onKeyUp
解决了这个问题,如下所示:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
View v = findViewById(R.id.YOUR_MENU_VIEW_HERE);
v.performClick();
return true;
}
return super.onKeyUp(keyCode, event);
}
希望它有所帮助。
答案 1 :(得分:0)
这就是我解决问题的方法,但Ricardo's answer也有效。
private Menu optionsMenu;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getSupportMenuInflater().inflate(R.menu.display_all, menu);
optionsMenu = menu;
return true;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
if (event.getAction() == KeyEvent.ACTION_UP &&
keyCode == KeyEvent.KEYCODE_MENU) {
//openOptionsMenu();
optionsMenu.performIdentifierAction(R.id.menu_overflow, 0);
return true;
}
}
return super.onKeyUp(keyCode, event);
}