如何在导航视图中为子菜单提供自定义背景色?
How do I give a submenu a custom backgroundcolor in a navigationview?
我正在尝试为子菜单提供与我的导航视图中其余项目不同的颜色,因此我希望我的整个导航抽屉为白色,但嵌套在导航抽屉中的整个子菜单为灰色。我使用的是标准 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>
如果您查看下面的示例,线条之间的所有内容都应具有浅灰色背景色
像这样。
<?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>
NavigationMenuView navigationMenuView = (NavigationMenuView)navigationView.getChildAt(0);
NavigationMenuView
是 Recyclerview
的扩展。因此您可以将分隔符添加为 ItemDecoration
但您必须检查需要添加分隔符的位置,否则它会添加到所有元素。
另一种方法是使用多个组而不是单个组
您可以使用列表视图而不是像这样在导航抽屉中使用菜单。这样您就可以在适配器中膨胀的 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>
我正在尝试为子菜单提供与我的导航视图中其余项目不同的颜色,因此我希望我的整个导航抽屉为白色,但嵌套在导航抽屉中的整个子菜单为灰色。我使用的是标准 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>
如果您查看下面的示例,线条之间的所有内容都应具有浅灰色背景色
像这样。
<?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>
NavigationMenuView navigationMenuView = (NavigationMenuView)navigationView.getChildAt(0);
NavigationMenuView
是 Recyclerview
的扩展。因此您可以将分隔符添加为 ItemDecoration
但您必须检查需要添加分隔符的位置,否则它会添加到所有元素。
另一种方法是使用多个组而不是单个组
您可以使用列表视图而不是像这样在导航抽屉中使用菜单。这样您就可以在适配器中膨胀的 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>