如何在没有标题的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>