【问题标题】:How do I add a title to my menu group如何向我的菜单组添加标题
【发布时间】:2021-06-25 16:50:03
【问题描述】:

我想通过为组指定标题或分隔符来区分组,但我找不到组元素的标题选项。

有没有办法添加标题或分隔符?

<group android:id="@+id/menu_group_sort" >
        <item
            android:id="@+id/menu_sort_relevance"
            android:showAsAction="never"
            android:title="@string/sort_relevance"/>
        <item
            android:id="@+id/menu_sort_rating"
            android:showAsAction="never"
            android:title="@string/sort_rating"/>

    </group>

【问题讨论】:

标签: android


【解决方案1】:

我在我的项目中使用了这段代码,看看:

<item
    android:title="Search Option"
    android:id="@+id/menu_search_option"
    android:showAsAction="ifRoom|withText">
    <menu>
        <group>
            <item
                android:id="@+id/menuSearchFilmEpisode"
                android:title="Episode"/>
            <item
                android:id="@+id/menuSearchActor"
                android:title="Actor"/>
            <item
                android:id="@+id/menuSearchDirector"
                android:title="Director"/>
        </group>
    </menu>
</item>

结果是我的操作栏上有一个带有文本图标的组。希望对您有所帮助。

【讨论】:

  • 这会创建一个子菜单。一旦我点击了他们的父母,就展示了这些项目。这不是我需要的。不过谢谢
【解决方案2】:

也许迟了两年,但认为它可能对偶然发现这个问题的人有用......

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
    android:id="@+id/group_one">
    <item android:title="Group Title">
        <menu>
            <item
                android:id="@+id/group_item_one"
                android:title="Item one"/>
            <item
                android:id="@+id/group_item_two"
                android:title="Item two"/>
            <item
                android:id="@+id/group_item_three"
                android:title="Item three"/>
        </menu>
    </item>
</group>
<group
    android:id="@+id/group_two">
    <item
        android:id="@+id/group_two_item_one"
        android:title="Item one"/>
</group>

【讨论】:

  • 组是多余的。持有菜单的项目实际上是组?
  • @MathieuMaree,有没有办法取消嵌套子菜单以显示在项目下方?
【解决方案3】:

虽然这可能不是最好的方法,但我相信它可能会对您有所帮助。 您如何在组内添加额外的禁用项目作为“标题”,您也可以为这些项目创建一个样式,以便它们可以显示您想要的颜色。

 <?xml version="1.0" encoding="utf-8"?>
    <menu
        xmlns:android="http://schemas.android.com/apk/res/android">
        <group>
            <item
                android:title="menu1"
                android:enabled="false"
                android:checkable="false">
            </item>
            <item
                android:title="opt1">
            </item>
            <item
                android:title="opt2">
            </item>
            <item
                android:title="opt3">
            </item>
        </group>
        <group>
            <item
                android:title="menu2"
                android:enabled="false"
                android:checkable="false">
            </item>

            <item
                android:title="opt4">
            </item>
            <item
                android:title="opt5">
            </item>
        </group>
    </menu>

您也可以使用 java 尝试类似的方法。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        menu.addSubMenu(Menu.NONE, 1, 1, "SubMenu");
        menu.add(1, 2, 2, "Item");
        menu.add(1, 3, 3, "Item");

        menu.addSubMenu(Menu.NONE, Menu.NONE, 4, "SubMenu");
        menu.add(4, 5, 5, "Item");
        menu.add(4, 6, 6, "Item");
        menu.add(4, 7, 7, "Item");

        return true;
    }

参数

  • 组 ID 此项目应属于的组标识符。这也可用于定义批次状态更改的项目组。如果项目不应该在一个组中,通常使用 NONE。
  • itemId 唯一的项目 ID。如果您不需要唯一 ID,请使用 NONE。
  • 订购 项目的顺序。如果您不关心订单,请使用 NONE。请参阅 getOrder()。
  • 标题 为项目显示的文本。

然而,我相信两者应该有相同的结果。

希望对你有帮助。

【讨论】:

    【解决方案4】:

    众所周知,item-node可以有title,item-node可以是menu-node的child,menu-node可以是item-node的child,group-node可以是菜单节点的子节点。

    所以我们需要做的就是将组保持在 rootMenu-itemWithTitle-menu 的层次结构中。

    这样,被用作 NavigationView 菜单:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      tools:context=".activity.MainActivity">`
    
        <item android:title="@string/drawer_group_book">
            <menu>
                <group android:id="@+id/nav_group_book"
                    android:checkableBehavior="single">
                    <item
                        android:id="@+id/nav_book_in_stock"
                        android:icon="@drawable/vector_in_stock"
                        android:title="@string/drawer_menu_in_stock"/>
                    <item
                        android:id="@+id/nav_book_wish_list"
                        android:icon="@drawable/vector_wish"
                        android:title="@string/drawer_menu_wish_list"/>
                    <item
                        android:id="@+id/nav_book_lent_out"
                        android:icon="@drawable/vector_out"
                        android:title="@string/drawer_menu_lent_out"/>
                    <item
                        android:id="@+id/nav_book_borrowed"
                        android:icon="@drawable/vector_in"
                        android:title="@string/drawer_menu_borrowed"/>
                </group>
            </menu>
        </item>
    
        <item android:title="Communicate">
            <menu>
                <item
                    android:id="@+id/nav_share"
                    android:icon="@drawable/ic_menu_share"
                    android:title="Share"/>
                <item
                    android:id="@+id/nav_send"
                    android:icon="@drawable/ic_menu_send"
                    android:title="Send"/>
            </menu>
        </item>
    
    </menu>
    

    【讨论】:

      【解决方案5】:

      只需为每个组指定一个唯一的 ID。它会自动创建一个分隔符。

          <?xml version="1.0" encoding="utf-8"?>
          <menu xmlns:android="http://schemas.android.com/apk/res/android">
      <group
          android:id="@+id/group_items"
          android:checkableBehavior="single">
          <item
              android:id="@+id/nav_profile"
              android:icon="@drawable/ic_profile"
              android:title="@string/title_profile" />
      
          <item
              android:id="@+id/nav_notifications"
              android:icon="@drawable/ic_notifcation"
              android:title="@string/title_notifications" />
      
      </group>
      
      <group
          android:id="@+id/group_settings"
          android:checkableBehavior="single">
          <item
              android:id="@+id/nav_privacy_policy"
              android:title="@string/privacy_policy" />
          <item
              android:id="@+id/nav_about_us"
              android:title="@string/nav_about_us" />
      </group>
      

      【讨论】:

        【解决方案6】:

        这可能有点晚了,但它可能对谁有帮助,下面的菜单代码将标题添加到菜单组,并在其下方有 2 个可供选择的可检查选项。

        <?xml version="1.0" encoding="utf-8"?>
        <menu xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android">    
        <group
            android:id="@+id/gp_hour_view"
            android:checkableBehavior="single">
            <item
                android:checkable="false"
                android:title="Display">
                <menu>
                    <group
                        android:id="@+id/gp_hour_sel"
                        android:checkableBehavior="single">
                        <item
                            android:id="@+id/action_pinched_view"
                            android:checked="true"
                            android:orderInCategory="201"
                            android:title="Pinched"
                            app:showAsAction="never" />
                        <item
                            android:id="@+id/action_zoomed_view"
                            android:orderInCategory="201"
                            android:title="Zoomed"
                            app:showAsAction="never" />
                    </group>
                </menu>
            </item>
          </group>
        </menu>
        

        【讨论】:

        • 欢迎来到 Stack Overflow。请edit您的答案解释此代码的作用以及它如何改进这个 7 年前的问题已经有的许多赞成的答案,以便它对其他有类似问题的用户有用。在 Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它是如何解决问题的。
        【解决方案7】:

        这是我的想法:

        <menu> 
            <group> 
                <item android:title="grouptitle"/> 
                <item android:title="item1" android:id="@id+/item1"/>
            </group>
        </menu>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-29
          • 1970-01-01
          • 1970-01-01
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多