Android NavigationView menu group divider

51,982

Solution 1

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_feature"
        android:checkableBehavior="single">
        <item android:id="@+id/navdrawer_item_map"
            android:checked="true"
            android:icon="@drawable/ic_drawer_map"
            android:title="@string/navdrawer_item_map"/>

    </group>
    <group android:id="@+id/group_settings"
        android:checkableBehavior="single">
        <item android:id="@+id/navdrawer_item_settings"
            android:icon="@drawable/ic_drawer_settings"
            android:title="@string/navdrawer_item_settings"/>

    </group>
</menu>

Solution 2

you do something like this.

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

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_dashboard"
            android:title="Home" />
        <item
            android:id="@+id/nav_messages"
            android:icon="@drawable/ic_event"
            android:title="Messages" />
        <item
            android:id="@+id/nav_friends"
            android:icon="@drawable/ic_headset"
            android:title="Friends" />
        <item
            android:id="@+id/nav_discussion"
            android:icon="@drawable/ic_forum"
            android:title="Discussion" />
    </group>

    <item android:title="Sub items">
        <menu>
            <item
                android:icon="@drawable/ic_dashboard"
                android:title="Sub item 1" />
            <item
                android:icon="@drawable/ic_forum"
                android:title="Sub item 2" />
        </menu>
    </item>

</menu>

this code is taken from the Design Library example app made by Chris Barnes https://github.com/chrisbanes/cheesesquare

Solution 3

I'm using it this way:

<group
        android:id="@+id/group1"
        android:checkableBehavior="single">
        <item
            android:id="@+id/menu1"
            android:icon="@drawable/somedrawable"
            android:title="Lorem ipsum" />
</group>
<group
        android:id="@+id/group2"
        android:checkableBehavior="single">
        <item
            android:id="@+id/menu2"
            android:icon="@drawable/somedrawable"
            android:title="Dolor it amet" />
</group>

IDs are important (+id/group1 and +id/group2). Without ids you won't see divider. It is working in my app.

Solution 4

Divider in NavigationMenuList achieved using grouping the Menu items but make sure you are giving group id @+id that is necessary. Below is working code for you

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
    android:id="@+id/gp_one"
    android:checkableBehavior="single">
    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/ic_avatar"
        android:title="Home" />
</group>

<group
    android:id="@+id/gp_two"
    android:checkableBehavior="single">
    <item
        android:id="@+id/nav_account"
        android:icon="@drawable/ic_avatar"
        android:title="My Account" />
    <item
        android:id="@+id/nav_orders"
        android:icon="@drawable/ic_avatar"
        android:title="My Orders" />
    <item
        android:id="@+id/nav_wishlist"
        android:icon="@drawable/ic_avatar"
        android:title="My Wishlist" />
</group>

<group
    android:id="@+id/gp_three"
    android:checkableBehavior="single">
    <item
        android:id="@+id/nav_rateus"
        android:icon="@drawable/ic_avatar"
        android:title="Rate Us" />
    <item
        android:id="@+id/nav_share"
        android:icon="@drawable/ic_avatar"
        android:title="Share" />
    <item
        android:id="@+id/nav_logout"
        android:icon="@drawable/ic_avatar"
        android:title="Logout" />
</group>

Solution 5

You can add your text between <item android:title="title_name"> and </item>

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_display_image"
            android:title="Load Image"
            android:icon="@drawable/ic_menu_gallery"
            app:showAsAction="always"

            app:actionLayout="@layout/switch_nav_drawer"/>
        <item
            android:id="@+id/nav_camera"
            android:icon="@drawable/ic_menu_camera"
            android:title="Saved News" />
        <item
            android:id="@+id/nav_gallery"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Gallery" />
        <item
            android:id="@+id/nav_slideshow"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="Slideshow" />

    </group>

    <item android:title="Settings">
        <menu>
            <item
                android:id="@+id/nav_manage"
                android:icon="@drawable/ic_menu_manage"
                android:title="Tools" />
        </menu>
    </item>

    <item
        android:id="@+id/about_us"
        android:icon="@drawable/ic_info_black_24dp"
        android:title="About Us"></item>


</menu>
Share:
51,982
Shaddow
Author by

Shaddow

I am studying computer science at the Polish university in Nowy Sacz.

Updated on July 05, 2022

Comments

  • Shaddow
    Shaddow almost 2 years

    Android support design library provide NavigationView:

     <android.support.design.widget.NavigationView
        ...
        app:menu="@menu/navigation_drawer_items" />
    

    menu/navigation_drawer_items:

    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <group android:checkableBehavior="single">
            <item .../>
            ...
        </group>
    
        <group android:checkableBehavior="single">
            <item .../>
            ...
        </group>
    
    </menu>
    

    How to add divider, separator or space between groups (like on picture)?

    enter image description here

  • Shaddow
    Shaddow almost 9 years
    Your solution works and its add subtitle, which is nice, but question was just about separator. If I omit title, there is divider but also space where should be title.
  • tyczj
    tyczj almost 9 years
    you dont need a title, all you have to do is give the item an id
  • tyczj
    tyczj almost 9 years
    @Shaddow see this question stackoverflow.com/questions/30790420/…
  • Yaseen Ahmad
    Yaseen Ahmad almost 8 years
    can you tell me how add color to this line
  • Whome
    Whome over 7 years
    This doesn't seem to work if you have groups in different layout files.
  • Moinkhan
    Moinkhan over 7 years
    @YaseenAhmad stackoverflow.com/a/30731387/3544839 to chnge the color
  • Rich Morey
    Rich Morey about 7 years
    Creating a group did not work for me. I did figure out that this style <item name="android:itemBackground">@drawable/menu_divider</item> Lets you set the background for the menu item so you can create a divider for each menu item. However, I would like a divider just between groups.
  • Moinkhan
    Moinkhan about 7 years
    @RichMorey Creating a group doesn't work. You have to give them an unique ID.
  • Anshul Tyagi
    Anshul Tyagi about 7 years
    For divider we'll have to divide them in separate groups ? Actually I'm using BottomNavigationView
  • BHAVIK
    BHAVIK almost 7 years
    now it is not working with latest sdk?
  • Moinkhan
    Moinkhan almost 7 years
    yeah it's working
  • Lukasz
    Lukasz over 5 years
    items from second section don't get selected with this solution
  • sgibly
    sgibly about 5 years
    Calling MenuCompat#setGroupDividerEnabled(Menu, boolean) may still be necessary here.
  • user1908375
    user1908375 about 5 years
    @sgibly this is working for ThemeOverlay.AppCompat.* Styles. Thank you!