我想为导航抽屉上的所选项目设置不同的颜色,这里是我的代码
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="@dimen/navigation_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemIconTint="@drawable/drawer_list_selector"
app:itemBackground="@drawable/drawer_list_selector"
app:itemTextColor="@drawable/nav_item_text"
/>
drawer_list_lesector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/light_pink_color" />
<item android:state_selected="true" android:drawable="@drawable/light_pink_color"/>
<item android:state_checked="true" android:drawable="@drawable/light_pink_color"/>
<item android:state_focused="true" android:drawable="@drawable/light_pink_color"/>
<item android:state_active="true" android:drawable="@drawable/light_pink_color"/>
<item android:drawable="@android:color/transparent" />
</selector>
light_grey_color.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F1F1F1"/>
</shape>
light_pink_color.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F1E1F1"/>
</shape>
和 nav_item_text.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_checked="true" />
<item android:color="#BBBBBB" />
</selector>
但它仍然没有改变所选项目的颜色
答案 0 :(得分:0)
您可以使用Color State Resource实现此目的。如果您在NavigationView
内部注意到您正在使用
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
此处不使用@color/black
或@color/primary_test
,而是使用Color State List Resource
。为此,首先在xml
目录中创建一个新的color
(例如drawer_item.xml)(它应该在res
目录中。)如果你没有名为{的目录{1}}已经创建了一个。
现在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="@color/drawer_item"// and here for changing the background color of the item which is checked
app:menu="@menu/menu_drawer">
,IconTint
,ItemTextColor
使用单独的颜色状态列表资源。
现在,当您将项目设置为已选中时(在ItemBackground
或以编程方式设置),特定项目的颜色将与未选中项目的颜色不同。
答案 1 :(得分:0)
变化:
app:itemBackground="@drawable/drawer_list_selector"
为:
app:itemBackground="@color/drawer_list_selector"
将文件drawer_list_selector.xml
从/drawable/
文件夹移动到/color/
文件夹(如果不存在则创建一个)。
现在,将drawer_list_selector
更改为颜色的选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#F1E1F1" />
<item android:state_selected="true" android:color="#F1E1F1"/>
<item android:state_checked="true" android:color="#F1E1F1"/>
<item android:state_focused="true" android:color="#F1E1F1"/>
<item android:state_active="true" android:color="#F1E1F1"/>
<item android:color="@android:color/transparent" />
</selector>
答案 2 :(得分:0)
我最近遇到了同样的问题,并最终找到了答案。
在菜单定义文件@menu/activity_main_drawer
中,您需要向要检查的每个项目添加android:checkable="true"
,否则itemBackground
将不会显示选中状态。
不要问我为什么itemIconTint
和itemTextColor
可以在没有此功能的情况下正常工作,但是itemBackground
需要它,对我来说也没有道理。