如何在没有标题的NavigationView菜单中获取分隔符?

Jef*_*art 38 android divider android-menu navigationview

我正在使用new NavigationView从XML创建我的导航抽屉菜单.我需要在部分菜单项之间放置一个分隔符,它在我的应用程序各部分之间切换,以及底部的设置和帮助和支持链接.

在我看过的所有例子中,我看到如何通过将另一个放入<menu>一个<item>,但<item>需要具有android:title属性来完成,所以我能做的最好就是将标题留空,这在设置之前留下一个空的空格并提供帮助和反馈.

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_section_1"
            android:icon="@drawable/ic_dashboard"
            android:title="@string/section_1"
            android:checked="true" /> <!-- default selection -->
        <item
            android:id="@+id/nav_section_2"
            android:icon="@drawable/ic_dashboard"
            android:title="@string/section_2" />
        <item
            android:id="@+id/nav_section_3"
            android:icon="@drawable/ic_dashboard"
            android:title="@string/section_3" />
    </group>

    <item android:title="@null"> <!-- I don't want a title or space here! -->
        <menu>
            <item
                android:id="@+id/nav_settings"
                android:icon="@drawable/ic_settings"
                android:title="@string/settings" />
            <item
                android:id="@+id/nav_help_feedback"
                android:icon="@drawable/ic_help"
                android:title="@string/help_feedback" />
        </menu>
    </item>
</menu>
Run Code Online (Sandbox Code Playgroud)

我已经试过的各种组合<menu>,<item>以及<group>标签,但没有发现任何东西,将工作.例如,这具有使用上一组中​​的最后一项作为组标题的问题:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_section_1"
            android:icon="@drawable/ic_dashboard"
            android:title="@string/section_1"
            android:checked="true" /> <!-- default selection -->
        <item
            android:id="@+id/nav_section_2"
            android:icon="@drawable/ic_dashboard"
            android:title="@string/section_2" />
        <item
            android:id="@+id/nav_section_3"
            android:icon="@drawable/ic_dashboard"
            android:title="@string/section_3" />
    </group>

    <group> <!-- This puts @string/section_3 as the group title! -->
        <menu>
            <item
                android:id="@+id/nav_settings"
                android:icon="@drawable/ic_settings"
                android:title="@string/settings" />
            <item
                android:id="@+id/nav_help_feedback"
                android:icon="@drawable/ic_help"
                android:title="@string/help_feedback" />
        </menu>
    </item>
</menu>
Run Code Online (Sandbox Code Playgroud)

只需使用菜单XML描述就可以轻松实现此目的.谷歌在他们的材料设计规范中有这种行为.

设置和支持

编辑:

又一次近距离尝试:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="@null"> <!-- Still a space here though! -->
        <menu>
            <group android:checkableBehavior="single"> <!-- And this checkable behavior behaves strangely for some reason -->
                <item
                    android:id="@+id/nav_section_1"
                    android:icon="@drawable/ic_dashboard"
                    android:title="@string/section_1"
                    android:checked="true" /> <!-- default selection -->
                <item
                    android:id="@+id/nav_section_2"
                    android:icon="@drawable/ic_dashboard"
                    android:title="@string/section_2" />
                <item
                    android:id="@+id/nav_section_3"
                    android:icon="@drawable/ic_dashboard"
                    android:title="@string/section_3" />
            </group>
        </menu>
    </item>

    <group> <!-- Finally, no space or title here! -->
        <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/ic_settings"
            android:title="@string/settings" />
        <item
            android:id="@+id/nav_help_feedback"
            android:icon="@drawable/ic_help"
            android:title="@string/help_feedback" />
    </item>
</menu>
Run Code Online (Sandbox Code Playgroud)

这样在分隔线上方和下方的物品之间不留空间,但现在顶部仍有空间.而且,android:checkableBehavior="single"表现得很奇怪.第一次选择时未选择项目,一旦选择了其他项目,则不会取消选择项目.

Ken*_*den 110

来自:NavigationView:如何插入没有子组的分隔符?

看起来你只需要为你的group标签提供唯一的ID.

<group android:id="@+id/my_id">
    <!-- Divider will appear above this item -->
    <item ... />
</group>
Run Code Online (Sandbox Code Playgroud)

正如答案所说:

每次更改组ID时,[NavigationView]都会创建一个分隔符

  • 很好找!我的搜索在这里找不到问题.向组添加ID可以解决问题. (9认同)

小智 5

这是您的问题的确切解决方案。

<?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:id="@+id/menu_top"
        android:checkableBehavior="single">
        <item android:title="Switch Team">
            <menu>
                <item
                    android:id="@+id/team"
                    android:title=""
                    app:actionLayout="@layout/layout_spinner_for_drawer"/>
            </menu>
        </item>
    </group>

    <group
        android:id="@+id/menu_bottom"
        android:checkableBehavior="single">
            <item
                android:id="@+id/nav_home"
                android:icon="@drawable/home"
                android:title="Home" />
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/sharebox"
                android:title="Sharebox" />
            <item
                android:id="@+id/nav_recognize"
                android:icon="@drawable/recognize"
                android:title="Recognize" />
            <item
                android:id="@+id/nav_contact_us"
                android:icon="@drawable/contactus"
                android:title="Contact Us" />
            <item
                android:id="@+id/nav_logout"
                android:icon="@drawable/signout"
                android:title="Logout" />
    </group>
</menu>
Run Code Online (Sandbox Code Playgroud)