【问题标题】:How to hold the overflow menu after I click it?点击后如何按住溢出菜单?
【发布时间】:2018-09-05 14:01:13
【问题描述】:

我在溢出菜单中添加了一些复选框。单击溢出菜单中的复选框后,我希望溢出菜单保持不变而不是消失。我怎样才能做到这一点?感谢您的帮助。

这是我的菜单 xml 文件

<item
    android:id="@+id/action_check"
    android:title="@string/action_check"
    android:orderInCategory="1"
    app:showAsAction="never"
    android:visible="true"
    android:checkable="true"/>
<item android:id="@+id/notification"
    android:orderInCategory="2"
    android:title="@string/notification"
    app:showAsAction="never"
    android:visible="true"
    android:checkable="true"/>
<item android:id="@+id/about"
    android:orderInCategory="3"
    android:title="@string/about"
    app:showAsAction="never"></item>

【问题讨论】:

标签: java android overflow-menu


【解决方案1】:

我就是这样做的。

在实现选项菜单的活动中添加以下代码。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //your checking other stuff
        item.setChecked(!item.isChecked());

        //main part for holding onto the menu
        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;
    }

通过添加以下行:item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 我正在标记该项目,因为它具有可展开/可折叠的行为,因此它将调用 setOnActionExpandListener

这里的这一行:item.setActionView(new View(this)); 是项目处于展开状态时的视图。它只是一个虚拟视图,因为我们永远不会让它展开我接下来要解释的方式。

你看到我从 setOnActionExpandListener 的两个方法中返回 false 以抑制项目的展开和折叠,因此我们在上一步中提供的视图将永远不会显示并且菜单将保持打开状态。

以下是您的菜单文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <group android:checkableBehavior="all">


        <item
            android:id="@+id/action_check"
            android:orderInCategory="1"
            android:title="Title 1"
            app:showAsAction="never" />

        <item
            android:id="@+id/notification"
            android:orderInCategory="2"
            android:title="Title 2"
            app:showAsAction="never" />

        <item
            android:id="@+id/about"
            android:orderInCategory="3"
            android:title="Title 3"
            app:showAsAction="never" />

    </group>

</menu>

注意group android:checkableBehavior="all" 行是告诉组中的所有项目都将具有可检查的行为,因此您不必在每个项目中都写可检查。

【讨论】:

    【解决方案2】:

    组是具有某些特征的菜单项的集合,更多信息see

    <group android:id="@+id/group>
        <item
            android:id="@+id/action_check"
            android:title="@string/follow"
            android:orderInCategory="1"
            app:showAsAction="never"
            android:visible="true"
            android:checkable="true"/>
        <item android:id="@+id/notification"
            android:orderInCategory="2"
            android:title="@string/notification"
            app:showAsAction="never"
            android:visible="true"
            android:checkable="true"/>
        <item android:id="@+id/about"
            android:orderInCategory="3"
            android:title="@string/about_us"
            app:showAsAction="never"/>
    </group>
    

    【讨论】:

    • 这段代码到底是做什么的?见How do I write a good answer?
    • group 是具有某些特征的菜单项的集合,更多信息see
    • 添加您的解释以回答不在 cmets 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    相关资源
    最近更新 更多