我正在使用新的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>
我尝试了<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>
只需使用菜单XML描述即可轻松完成此操作。谷歌在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"
表现得很奇怪。第一次选择时未选择项目,一旦选择了其他项目,则不会取消选择项目。
答案 0 :(得分:108)
来自: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时创建分隔符
答案 1 :(得分:4)
这是您的问题的完全解决方案。
<?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>