Android - 保持选项菜单打开

时间:2010-11-19 00:09:16

标签: android menu

我在我的Android应用程序中启动并运行了一个选项菜单,我已经覆盖了onCreateOptionsMenu,onOptionsItemSelected和onPrepareOptionsMenu方法来自定义菜单。

我的问题与用户点击菜单项后保持“选项”菜单打开有关。基本上,我希望能够隐藏菜单,直到用户点击设备菜单键。用户点击此密钥后,无论用户点击菜单项的次数多少,我都希望能够保留菜单。如果用户想要隐藏“选项”菜单,则只需再次单击设备菜单键即可。

是否支持这种交互(甚至是可取的)。如果不支持此互动,则非常欢迎任何替代建议。

干杯!

肖恩

2 个答案:

答案 0 :(得分:5)

使用onCreateOptionsMenu和其他方法无法做到这一点。他们总是这样做。

但你可以用另一种方式做到这一点。但是你必须自己编写整个菜单。基本上在layout.xml中添加Menu并让它被隐藏(visibility = gone)。然后你覆盖onKeyDown方法。在那里你检查它是否是菜单键。如果菜单尚未打开,则显示菜单。如果已经打开,则隐藏它。

不应该太难。好的方面是,您可以使菜单看起来完全符合您的需要,并让它以您想要的方式做出反应。

答案 1 :(得分:2)

对于像我这样在Google中发现此问题的人:

要在选择项目后保持菜单打开,您需要以下代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    item.setChecked(!item.isChecked());

    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
    item.setActionView(new View(this));
    item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            return false;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            return false;
        }
    });
    return false;
}

重要的是在false中返回onOptionsItemSelectedOnActionExpandListener的方法

来自@MayurGajra的解决方案。此处有更多详细信息:How to hold the overflow menu after I click it?