新しい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記述だけを使用してこれを行う簡単な方法が必要です。 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"
は奇妙な動作をします。初めて選択されたときにアイテムは選択されず、他のアイテムが選択されてもアイテムは選択解除されません。
From: NavigationView:サブグループなしで仕切りを挿入する方法?
group
タグに一意のIDを与えるだけでよいようです。
<group Android:id="@+id/my_id">
<!-- Divider will appear above this item -->
<item ... />
</group>
答えが言うように:
[NavigationView]は、グループIDが変更されるたびに仕切りを作成します
これはあなたの質問に対する正確な解決策です。
<?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>