安卓NavigationView菜单组分割线

72

安卓支持设计库提供了NavigationView:

 <android.support.design.widget.NavigationView
    ...
    app:menu="@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>
如何在组之间添加分隔线、分隔符或空格(就像图片上的那样)?

添加 <item><menu> [你的项目] </menu></item>... - Harin
5个回答

216

只需要给每个组分配一个唯一的ID,它就会自动创建一个分隔符。

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

4
你能告诉我如何给这条线添加颜色吗? - Yaseen Ahmad
1
如果您在不同的布局文件中有组,则似乎无法正常工作。 - Whome
1
@YaseenAhmad https://dev59.com/FF0a5IYBdhLWcg3wFlRG#30731387 要改变颜色。 - Moinkhan
@RichMorey 创建一个组无法工作。 您必须为它们提供唯一的ID。 - Moinkhan
1
在此处可能仍然需要调用MenuCompat#setGroupDividerEnabled(Menu,boolean)。 - sgibly
显示剩余4条评论

12

你可以这样做。

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

这段代码取自Chris Barnes制作的Design Library示例应用程序https://github.com/chrisbanes/cheesesquare


你的解决方案可行并且添加了字幕,这很好,但问题只是关于分隔符。如果我省略标题,会有分隔符,但也会有应该是标题的空格。 - Shaddow
1
你不需要标题,你只需要给项目一个ID。 - tyczj
@Shaddow 请查看此问题 https://dev59.com/tl0a5IYBdhLWcg3wCEww - tyczj
使用这种解决方案,第二部分中的项目不会被选中。 - Lukasz

11

我是这样使用它的:

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

标识符很重要(+id/group1和+id/group2)。如果没有标识符,您将看不到分隔线。在我的应用程序中可以使用。


2
导航菜单列表中的分割线是通过对菜单项进行分组来实现的,但要确保给予组ID @+id 是必要的。以下是可行的代码示例:
<?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>


对于divider,我们需要将它们分成不同的组?实际上,我正在使用BottomNavigationView - Anshul Tyagi

1
你可以在<item android:title="title_name"></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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接