【问题标题】:Android - keep options menu openAndroid - 保持选项菜单打开
【发布时间】:2010-11-19 00:09:15
【问题描述】:

我在我的 Android 应用程序中启动并运行了一个选项菜单,我重写了 onCreateOptionsMenu、onOptionsItemSelected 和 onPrepareOptionsMenu 方法来稍微自定义菜单。

我的问题与用户单击菜单项后保持选项菜单打开有关。基本上,我希望能够隐藏菜单,直到用户单击设备菜单键。一旦用户单击此键,我希望能够将菜单保持在适当的位置,而不管用户单击菜单项多少次。如果用户想隐藏选项菜单,他们只需要再次点击设备菜单键。

是否支持(甚至建议)这种类型的交互。如果不支持这种交互,任何替代建议都非常受欢迎。

干杯!

肖恩

【问题讨论】:

    标签: android menu


    【解决方案1】:

    这对于 onCreateOptionsMenu 和其他方法是不可能的。他们总是那样做。

    但你可以用另一种方式来做。但是你必须自己编程整个菜单。基本上在你的 layout.xml 中添加菜单并让它隐藏(可见性 = 消失)。然后覆盖 onKeyDown 方法。在那里你检查它是否是菜单键。如果菜单尚未打开,是的,那么您将显示菜单。如果它已经打开,则将其隐藏。

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

    【讨论】:

    • 谢谢帕特里克 - 我什至没有想过自己隐藏/显示菜单的可能性。
    【解决方案2】:

    对于像我这样在谷歌发现这个问题的人:

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

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

    onOptionsItemSelected中返回falseOnActionExpandListener的方法很重要

    来自@MayurGajra 的这个解决方案。更多细节在这里:How to hold the overflow menu after I click it?

    【讨论】:

    • 此解决方案有效,但会在屏幕旋转时导致内存泄漏(尽管时间很短):活动已泄漏窗口 android.widget.PopupWindow$PopupDecorView。以某种方式关闭 onStop 中的菜单会很好
    猜你喜欢
    • 2013-04-23
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多