2

在我的应用程序中,我使用的是 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"已被单击?

如果有人指出我在这里错过了什么,那就太好了。

4

2 回答 2

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

希望能帮助到你。

于 2013-11-23T19:16:17.247 回答
0

This is how I solved the issue but Ricardo's answer works as well.

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);
    }
于 2013-11-24T16:53:05.463 回答