124697
124697

Reputation: 21893

How do I add a title to my menu group

I want to differentiate the groups by giving them a title or divider, but I can't find a title option for the group element.

Is there a way to add a title or divider?

<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>

Upvotes: 36

Views: 26806

Answers (8)

Fede Cana
Fede Cana

Reputation: 167

To have a title in each group within your menu, you can create a disabled item that acts as a title. This way it will not be clickable and will have a different color from the elements in your group. Also, in order to make the difference between selectable and non-selectable items more evident, you can add an icon only to the title item of the group.

<?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:showIn="navigation_view">

    <group
        android:id="@+id/group1"
        android:checkableBehavior="single">

        <item
            android:title="Title 1"
            android:enabled="false"
            android:icon="@drawable/ic_star" />

        <item
            android:title="@string/menu_home" />

        <item
            android:title="@string/menu_home" />

        <item
            android:title="@string/menu_home" />

    </group>

    <group
        android:id="@+id/group2"
        android:checkableBehavior="single">

        <item
            android:title="Title 2"
            android:enabled="false"
            android:icon="@drawable/ic_star" />

        <item
            android:title="@string/menu_home" />

        <item
            android:title="@string/menu_home" />

        <item
            android:title="@string/menu_home" />

    </group>
</menu>

menu preview

Upvotes: 0

Darsh
Darsh

Reputation: 16

This is my idea:

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

Upvotes: 0

Tzigi
Tzigi

Reputation: 1

This might be a little late, but for whom it might help, The below menu code adds title to a menu group and below it 2 checkable options to choose from.

<?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>

Upvotes: 0

JonnyL
JonnyL

Reputation: 424

Perhaps two years too late, but thought it might be useful for whoever stumbles upon this problem...

<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>

Upvotes: 26

Amal Kronz
Amal Kronz

Reputation: 1666

Just give a unique id to each group. It will create a separator automatically.

    <?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>

Upvotes: 1

wangzhangjian
wangzhangjian

Reputation: 296

As we all know, an item-node can has title, and an item-node can be the child of menu-node, further more a menu-node can be a child of item-node, and a group-node can be a child of a menu-node.

so all we need to do is keep the group inside the hierarchy of rootMenu-itemWithTitle-menu.

like this, is is used as a NavigationView menus:

<?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>

Upvotes: 1

Caue Ferreira
Caue Ferreira

Reputation: 287

Although that might not be the best approach, I believe it might help you out. What about you add extra disabled itens as "titles" inside the groups, also you could create a style for those itens so they might show the color you want.

 <?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>

You also can try something like that, using 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;
    }

Parameters

  • groupId The group identifier that this item should be part of. This can also be used to define groups of items for batch state changes. Normally use NONE if an item should not be in a group.
  • itemId Unique item ID. Use NONE if you do not need a unique ID.
  • order The order for the item. Use NONE if you do not care about the order. See getOrder().
  • title The text to display for the item.

Yet, I believe both should have the same result.

I hope it help you.

Upvotes: 7

JJ86
JJ86

Reputation: 5113

I use this code for my project, take a look:

<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>

And the result is that i have a group with text as icon on my action bar. Hope it helps.

Upvotes: 28

Related Questions