从导航抽屉菜单中删除子部分和子菜单。

5
我希望能够去除子菜单中产生的不必要空格。
有没有可能我可以通过menu.xml类来实现呢?
这是我的navigation_drawer_menu.xml文件。
<menu xmlns:android="http://schemas.android.com/apk/res/android">


<group android:checkableBehavior="single">
    <item
        android:id="@+id/all"
        android:checked="true"
        android:icon="@drawable/ic_channels"
        android:title="All Channels" />
    .......
    <item
        android:id="@+id/other"
        android:icon="@drawable/ic_other"
        android:title="Others" />

</group>

<item android:title="">
    <menu>
        <item
            android:id="@+id/setting"
            android:icon="@drawable/ic_action_settings"
            android:title="Settings" />
        <item
            android:id="@+id/about"
            android:icon="@drawable/ic_about"
            android:title="About" />
        <item
            android:id="@+id/share"
            android:icon="@drawable/ic_share"
            android:title="Share" />
    </menu>
</item>

Android导航抽屉

谢谢。


请查看我的回答:http://stackoverflow.com/questions/34530355/how-to-add-separator-in-menu-items/34530378#34530378 - Damian Kozlak
3个回答

7
这是我的实现方式。因为你正在向菜单添加一个标题,它并没有意识到它为空。
<?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/nav1"
            android:checked="true"
            android:title="Pos 1" />
        <item
            android:id="@+id/nav2"
            android:title="Pos 2" />

    </group>

    <group
        android:id="@+id/menu_two"
        android:checkableBehavior="single">
        <item
            android:id="@+id/pos3"
            android:title="Pos 3" />
        <item
            android:id="@+id/pos4"
            android:title="Pos 4" />

    </group>

</menu>

1
谢谢,问题在于我没有添加组唯一标识符。添加标识符就解决了问题。谢谢!! - awaistoor

2

首先,请阅读Ian Lake(Android开发者大使)的回答:

NavigationView旨在匹配材料设计导航抽屉的规范,其中规定内容区域之间有8dp的空间。通常没有办法覆盖NavigationView以特别打破这些规范。

material design specs

来源:如何去除Navigation View中不必要的顶部填充?

正如您所看到的,这个不受欢迎的填充是您部分的子标题。

要删除它,您需要删除

<item android:title=""></item>

为此,您需要将所有菜单元素****合并**(没有子部分)成单个组。

更改后,您的代码应该像这样:

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


<group android:checkableBehavior="single">
    <item
        android:id="@+id/all"
        android:checked="true"
        android:icon="@drawable/ic_channels"
        android:title="All Channels" />
    .......
    <item
        android:id="@+id/other"
        android:icon="@drawable/ic_other"
        android:title="Others" />

     <menu>
        <item
            android:id="@+id/setting"
            android:icon="@drawable/ic_action_settings"
            android:title="Settings" />
        <item
            android:id="@+id/about"
            android:icon="@drawable/ic_about"
            android:title="About" />
        <item
            android:id="@+id/share"
            android:icon="@drawable/ic_share"
            android:title="Share" />
       <menu>
</group>

你仍然可以通过以下方法实现自定义导航抽屉:如何在Android中创建自定义导航抽屉

如果您有问题,请随时提问。

希望这能帮到您。


首先,感谢您详细的回答。我已经按照您的回复进行了操作,但令人困惑的是,现在子菜单的标题是从其上方的项目标题获取的。例如,子菜单的标题是“其他”,它位于其上方,如果更改项目名称,则子菜单标题的值会更改为“S”。 - awaistoor
似乎需要给子菜单命名。删除这个<menu>,也就是让所有项目都在同一个菜单中 - 没有子菜单。然后使用样式制作底部边框,并添加到“其他”项目中。它应该可以工作。 - piotrek1543
关于样式化项目,您可以在这里找到:https://dev59.com/uHA85IYBdhLWcg3wF_i0 - piotrek1543
我只想在两个菜单中添加一行简单的代码...你建议的链接是用于整个菜单的样式,而不是导航抽屉菜单,另一个菜单。 - awaistoor
因为您需要为“其他”项目添加样式,该样式将添加底部线条。我认为您不能在这些项目之间添加此<View>android:layout_height="1dp"; android:layout_width="match_parent"; android:background="#0000000000</View>,这将绘制一条线。 - piotrek1543
2
请查看被接受的答案。问题是我没有添加组唯一标识符。添加唯一标识符会为两个不同的组创建分隔符。仍然非常感谢您的帮助 :) - awaistoor

0
为了以编程的方式实现这一点,请使用重载: menu.add(int groupId, int itemId, int order, int titleRes) (并确保为不同的部分提供不同的 groupId)。

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