web-dev-qa-db-ja.com

NavigationViewメニューでタイトルなしで仕切りを取得する方法は?

新しい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 でこの動作をしています。

Settings and support

編集:

さらに別の近い試み:

<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"は奇妙な動作をします。初めて選択されたときにアイテムは選択されず、他のアイテムが選択されてもアイテムは選択解除されません。

38
Jeff Lockhart

From: NavigationView:サブグループなしで仕切りを挿入する方法?

groupタグに一意のIDを与えるだけでよいようです。

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

答えが言うように:

[NavigationView]は、グループIDが変更されるたびに仕切りを作成します

109
Kenny Worden

これはあなたの質問に対する正確な解決策です。

<?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>
4
Sagar Yadav