【问题标题】:How to get dividers in NavigationView menu without titles?如何在没有标题的 NavigationView 菜单中获取分隔符?
【发布时间】:2015-06-11 20:06:05
【问题描述】:

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

在我见过的所有示例中,我看到了如何通过在 <item> 中放置另一个 <menu> 来完成此操作,但 <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>

我尝试了&lt;menu&gt;&lt;item&gt;&lt;group&gt; 标签的各种组合,但没有找到任何可行的方法。例如,使用上一组中​​的最后一项作为组标题的问题:

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

只需使用菜单 XML 描述即可轻松完成此操作。 Google 在他们的Material design spec 中有这种行为。

编辑:

又一次近距离尝试:

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

这在分隔线上方和下方的项目之间没有空间,但现在顶部仍然有空间。此外,android:checkableBehavior="single" 的行为也很奇怪。项目在第一次被选中时不会被选中,而在其他项目被选中后也不会被取消选中。

【问题讨论】:

  • 在下面查看我的答案,它非常适合您。 NaviagtionMenuList Divider
  • 你应该检查你的答案,你有未完成的标签并且不起作用

标签: android android-menu divider navigationview


【解决方案1】:

发件人:NavigationView: how to insert divider without subgroup?

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

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

正如答案所说:

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

【讨论】:

  • 好发现!我的搜索在这里找不到问题。将 ID 添加到组就可以了。
  • 但我想我们不能让android:checkableBehavior="single" 跨组应用。叹息
  • @user3175580 我不知道自从您发布此评论后是否有任何变化,但根据 API,菜单中的 groups 支持此行为:developer.android.com/guide/topics/ui/menus.html#groups
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-09-04
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多