更改导航抽屉中已选中菜单项的颜色

问题描述 投票:101回答:6

我正在使用新的Android Design支持库在我的应用程序中实现导航抽屉。

我不知道如何更改所选项目的颜色!

这里是菜单的xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/navigation_item_1"
        android:icon="@drawable/ic_1"
        android:title="@string/navigation_item_1"/>

    <item
        android:id="@+id/navigation_item_2"
        android:icon="@drawable/ic_2"
        android:title="@string/navigation_item_2"/>
</group>

这是放置在android.support.v4.widget.DrawerLayout内的Navigationview xml:

<android.support.design.widget.NavigationView
    android:id="@+id/activity_main_navigationview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:itemIconTint="@color/black"
    app:itemTextColor="@color/primary_text"
    app:menu="@menu/menu_drawer">

    <TextView
        android:id="@+id/main_activity_version"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:textColor="@color/primary_text" />

</android.support.design.widget.NavigationView>

谢谢您的帮助!

[编辑]我已经研究过这样的解决方案:Change background color of android menu

这似乎是很hack的,我认为有了新的设计支持库,将会引入更干净的东西?

android androiddesignsupport
6个回答
242
投票

好吧,您可以使用Color State Resource实现此目的。如果您发现NavigationView内部正在使用

app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"

此处使用@color/black而不是@color/primary_testColor State List Resource。为此,请首先在xml目录(应位于color目录内)中创建一个新的res(例如:painter_item.xml)。如果还没有名为color的目录,请创建一个。 >

现在drawer_item.xml里面做这样的事情

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="checked state color" android:state_checked="true" />
    <item android:color="your default color" />
</selector>

最后一步将是更改您的NavigationView

<android.support.design.widget.NavigationView
    android:id="@+id/activity_main_navigationview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:itemIconTint="@color/drawer_item"  // notice here
    app:itemTextColor="@color/drawer_item" // and here
    app:itemBackground="@android:color/transparent"// and here for setting the background color to tranparent
    app:menu="@menu/menu_drawer">

类似,您可以为IconTintItemTextColorItemBackground使用单独的颜色状态列表资源。

现在,当您将某个项目设置为选中状态(在xml中或通过编程方式设置时,该特定项目的颜色将与未选中的项目不同。


65
投票

我相信app:itemBackground期望可绘制。因此,请按照以下步骤操作:


4
投票

单击NavigateItem中的项目时,需要将NavigateView设置为true


2
投票

这是达到此目的的另一种方法:


0
投票

这是在Activity的onCreate方法中执行的操作:


0
投票

第1步:

© www.soinside.com 2019 - 2024. All rights reserved.