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

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

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

 <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>标签的各种组合,但还没有find任何可行的组合。 例如,这有一个问题,即使用前一个组中的最后一个项目作为组标题:

 <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在材质devise规范中有这样的行为。

设置和支持

编辑:

又一次密切的尝试:

 <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"performance奇怪。 第一次select时不select项目,一旦select其他项目,则不select项目。

从: NavigationView:如何插入分区没有子组?

看起来你只需要给你的group标签唯一的ID。

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

答案如下:

每当组ID改变时,[NavigationView]将会创build一个分隔符

这是你的问题的确切解决scheme在这里。

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