Menu Android支持:设计导航查看选中的菜单子项

Menu Android支持:设计导航查看选中的菜单子项,menu,navigation,menuitem,submenu,Menu,Navigation,Menuitem,Submenu,我最近开始将我的android应用程序转换为使用最新的支持库support:design 在实现新的NavigationView时,我偶然发现了一个显示所选菜单项的问题 我的navdrawer\u menu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item

我最近开始将我的android应用程序转换为使用最新的支持库support:design

在实现新的NavigationView时,我偶然发现了一个显示所选菜单项的问题

我的navdrawer\u menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/navigation_item_home"
        android:icon="@drawable/ic_home_black"
        android:title="@string/navdrawer_item_home" />
</group>

    <item
        android:id="@+id/navigation_subheader"
        android:title="@string/navdrawer_subheader_title1">
        <menu>
            <group android:checkableBehavior="single">
            <item
                android:id="@+id/navigation_sub_item1"
                android:icon="@drawable/ic_home_black"
                android:title="@string/navdrawer_sub_item1" />
            </group>
        </menu>
    </item>
</menu>
如果我只在标签之间使用普通的菜单项,这将非常有效,但对于副标题来说效果不太好。单击子项不会将其设置为选中状态,直到我两次单击同一项,并且不会取消选中之前选中的任何项

结果是这样的:


我用这种非常有效的方法解决了这个反复出现的问题

我们必须简单地记住所选项目的id,在NavigationView上为菜单充电,然后再次选择该项目

为此,您需要采用类似于菜单抽屉的方式:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/section_1"
        android:title="@string/section_title">

        <menu>
            <group android:checkableBehavior="single">
                <item
                    android:id="@+id/item_1_section_1"
                    android:icon="@drawable/ic_icon"
                    android:title="@string/title"/>

                <item
                    android:id="@+id/item_2_section_1"
                    android:icon="@drawable/ic_icon"
                    android:title="@string/title"/>
                ...
            </group>
        </menu>
    </item>
        ...
    <item
        android:id="@+id/section_x"
        android:title="@string/section_title">

        <menu>
            <group android:checkableBehavior="single">
                <item
                    android:id="@+id/item_1_section_x"
                    android:icon="@drawable/ic_icon"
                    android:title="@string/title"/>

                <item
                    android:id="@+id/item_2_section_x"
                    android:icon="@drawable/ic_icon"
                    android:title="@string/title"/>
                ...
            </group>
        </menu>
    </item>
</menu>

每个项目都必须在一个组中,以便该组可以在用户选择时控制项目的视觉行为。试试看:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/navigation_item_home"
        android:icon="@drawable/ic_home_black"
        android:title="@string/navdrawer_item_home" />
    <item
        android:id="@+id/navigation_subheader"
        android:title="@string/navdrawer_subheader_title1">
        <menu>
            <group android:checkableBehavior="single">
            <item
                android:id="@+id/navigation_sub_item1"
                android:icon="@drawable/ic_home_black"
                android:title="@string/navdrawer_sub_item1" />
            </group>
        </menu>
    </item>
</group>
</menu>

这很简单。 只需为每个项目添加android:checkable=“true”

例如

<item
        android:id="@+id/navigation_item_home"
        android:icon="@drawable/ic_home_black"
        android:title="@string/navdrawer_item_home"
        android:checkable="true" />

我建议采用@MichelFortes提供的解决方案,因为它解决了我在NavigationView中的子菜单项问题。这是我的代码,它是有效的


在这里,您选择的每个项目都将被选中并高亮显示!
再次感谢@MichelFortes;)

这似乎可以完成任务,但当我这样做时,它只会加载菜单的第一组。有什么想法吗?这是一个Android支持库错误:@约翰凡登贝格,如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/navigation_item_home"
        android:icon="@drawable/ic_home_black"
        android:title="@string/navdrawer_item_home" />
    <item
        android:id="@+id/navigation_subheader"
        android:title="@string/navdrawer_subheader_title1">
        <menu>
            <group android:checkableBehavior="single">
            <item
                android:id="@+id/navigation_sub_item1"
                android:icon="@drawable/ic_home_black"
                android:title="@string/navdrawer_sub_item1" />
            </group>
        </menu>
    </item>
</group>
</menu>
<item
        android:id="@+id/navigation_item_home"
        android:icon="@drawable/ic_home_black"
        android:title="@string/navdrawer_item_home"
        android:checkable="true" />
<group android:checkableBehavior="single">
    <item
        android:id="@+id/your_id_item"
        android:icon="@drawable/your_icon_if_you_want"
        android:title="@string/title_for_this_item" />

   <!-- you can add here as many items as you want -->

</group>

<item
    android:title="@string/submenu_title">
    <menu>
        <group android:checkableBehavior="single">
            <item
                android:id="@+id/submenu_item_id"
                android:icon="@drawable/icon_if_exists"
                android:title="@string/title_for_item" />

          <!-- you can add here as many items as you want -->

        </group>
    </menu>
</item>