Как дать подменю собственный цвет фона в навигационном представлении?

Я пытаюсь придать подменю другой цвет, чем остальные мои элементы в моем навигационном представлении, поэтому я хочу, чтобы весь мой навигационный ящик был белым, но все подменю, вложенное в навигационный ящик, было серым. Я использую стандартный навигационный ящик студии Android.

Мой код:

<group android:id="@+id/firstgroup">
    <item
        android:id="@+id/nav_kalender"
        android:icon="@drawable/ic_menu_kalender"
        android:title="@string/str_menu_kalender" />
    <item android:title="@string/str_menu_title_klassement">
        <menu>
            <item
                android:id="@+id/nav_indklassement"
                android:icon="@mipmap/ic_menu_indklassement"
                android:title="@string/str_menu_indklassement" />
            <item
                android:id="@+id/nav_clubklassement"
                android:icon="@drawable/ic_menu_clubklassement"
                android:title="@string/str_menu_clubklassement" />
            <item
                android:id="@+id/nav_nietverwerkteritten"
                android:icon="@drawable/ic_menu_nietverwerkteritten"
                android:title="@string/str_menu_nietverwerkteritten" />
            <item
                android:id="@+id/nav_reglement"
                android:icon="@drawable/ic_menu_reglement"
                android:title="@string/str_menu_reglement" />
            <item
                android:id="@+id/nav_prijzen"
                android:icon="@drawable/ic_menu_prijzen"
                android:title="@string/str_menu_prijzen" />
        </menu>
    </item>
</group>

Если вы посмотрите на пример ниже, все между строк должно иметь светло-серый цвет фона.

введите здесь описание изображения


person Mathias Cochet    schedule 29.03.2016    source источник


Ответы (3)


NavigationMenuView navigationMenuView = (NavigationMenuView)navigationView.getChildAt(0);

NavigationMenuView является расширением Recyclerview. Таким образом, вы можете добавить разделитель как ItemDecoration, но вы должны проверить положение, в котором необходимо добавить разделитель, иначе он будет добавлен ко всем элементам.

Другой подход заключается в использовании нескольких групп вместо одной группы.

person Ravi Theja    schedule 29.03.2016
comment
как бы вы дали группе собственный фон, чем ? - person Mathias Cochet; 29.03.2016
comment
вы можете переопределить метод OnDraw украшения предмета, но вы должны сделать это отдельно для каждого индекса, если хотите иметь разные цвета. Я не думаю, что это будет лучшим решением. Но вы можете попробовать. - person Ravi Theja; 29.03.2016

Вы можете использовать список вместо использования меню в навигационном ящике, подобном этому. Так что вы можете дать любой желаемый цвет в вашем xml файле, надувающемся в адаптере.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
    layout="@layout/app_bar_main2"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <include layout="@layout/nav_header_main2"/>
        <ListView
            android:id="@+id/lst_menu_items"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:divider="@null"
            android:dividerHeight="0dp"/>
        </LinearLayout>
    <!--app:headerLayout="@layout/nav_header_main2"
    app:menu="@menu/activity_main2_drawer" >-->
    </android.support.design.widget.NavigationView>

person Shahal    schedule 29.03.2016

как это.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group>
    <item
        android:id="@+id/nav_home"
        android:checkable="true"
        android:icon="@drawable/ic_dashboard"
        android:title="Home"/>
    <item
        android:id="@+id/nav_messages"
        android:checkable="true"
        android:icon="@drawable/ic_event"
        android:title="Messages"/>
    <item
        android:id="@+id/nav_friends"
        android:checkable="true"
        android:icon="@drawable/ic_headset"
        android:title="Friends"/>
    <item
        android:id="@+id/nav_discussion"
        android:checkable="true"
        android:icon="@drawable/ic_forum"
        android:title="Discussion"/>
</group>

<item android:title="Sub items">
    <menu>
        <item
            android:checkable="true"
            android:icon="@drawable/ic_dashboard"
            android:title="Sub item 1"/>
        <item
            android:checkable="true"
            android:icon="@drawable/ic_forum"
            android:title="Sub item 2"/>
    </menu>
</item>

</menu>
person shingle    schedule 29.03.2016
comment
это не ответ на мой вопрос. - person Mathias Cochet; 29.03.2016