NavigationView:如何在没有子组的情况下插入分隔符?

22

如何在新的NavigationView中放置一个没有标题子组的分隔符?

<?xml version="1.0" encoding="utf-8"?>

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


<group android:checkableBehavior="single">
    <item
        android:id="@+id/drawer_armario"
        android:icon="@drawable/armario"
        android:title="@string/armario"  />
    <item
        android:id="@+id/drawer_amigos"
        android:icon="@drawable/amigos"
        android:title="@string/amigos" />

</group>

<item android:title="Configuración">
    <menu>
        <item

            android:id="@+id/drawer_ajustes"
            android:icon="@drawable/ajustes"
            android:title="@string/ajustes" />
        <item
            android:id="@+id/drawer_ayuda"
            android:icon="@drawable/ayuda"
            android:title="@string/ayuda" />
        <item
            android:id="@+id/drawer_sign_out"
            android:icon="@drawable/sign_out"
            android:title="@string/sign_out" />

    </menu>

</item>

我想在“amigos”和“ajustes”项目之间插入一条线,但不需要“Configuración”标题。

谢谢!


使用Jin的答案。它有效。 - hungryghost
4个回答

58

您所需做的就是定义一个带有唯一ID的group。我查看了NavigationView的实现,每次更改组ID时,它都会创建一个分隔线。

例如:

<group android:id="@+id/my_id">
    <!-- Divider will appear above this item -->
    <item ... />
</group>

哦,我需要尝试一下!希望它能够正常工作,因为这一直困扰着我。我会测试并回报结果的!! - hungryghost
1
<dimen name="navigation_separator_vertical_padding">0dp</dimen> 设置为零,这样做可以去除填充,除非您希望每个组都有填充。 - Dan Brough
@DanBrough,您如何在菜单项中使用垂直指定?通过定义<dimen name="navigation_separator_vertical_padding">0dp</dimen>。 - Atmaram
@DanBrough,这怎么帮助去除分隔符的填充呢?:\ 你能再检查一下你的评论吗? - Zahan Safallwa
1
现在它被称为“design_navigation_separator_vertical_padding”。在这里阅读相关信息:https://dev59.com/s10a5IYBdhLWcg3wNWXA - Dan Brough

6

我尝试了这个方法,它起作用了。

请查看实现代码,从第122-125行

这是我的菜单文件,它会创建分隔符:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MyFirstMNCActivity">
    <group android:id="@+id/grp1">
        <item
            android:id="@+id/navigation_item_1"
            android:checked="true"
            android:icon="@drawable/ic_home"
            android:title="@string/navigation_item_1" />

    </group>

    <group android:id="@+id/grp2">

        <item
            android:id="@+id/navigation_item_2"
            android:icon="@drawable/ic_home"
            android:title="@string/navigation_item_2" />
    </group>
</menu>

6
NavigationView navigationView = (NavigationView) findViewById(R.id.navigation);
NavigationMenuView navMenuView = (NavigationMenuView) navigationView.getChildAt(0);
navMenuView.addItemDecoration(new DividerItemDecoration(appContext,DividerItemDecoration.VERTICAL_LIST));

下面是DividerItemDecoration的要点

DividerItemDecoration.java


我可以将addItemDecoration线的高度更改为1像素吗? - Prabs
是的,你可以在DividerItemDecoration中更新它。我猜它已经是1像素了。如果不是,请将其更新为1像素。 - Ravi Theja
怎么办?有没有什么方法可以做到这一点?addItemDecoration不接受任何决定线条大小的参数。 - Prabs

3

使用XML

<android.support.design.widget.NavigationView
...
app:itemIconTint="@android:color/black" 
... />

编程方式

 yourNavigationView.setItemIconTintList(null);

我认为这是一个好答案。
祝你好运。

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