我想在NavigationDrawer中设置所选项目的颜色和背景。它适用于文本和图标,但不适用于所选项目的背景。
ColorStateList textColors = new ColorStateList(
new int[][]{
new int[]{ -android.R.attr.state_checked }, // unchecked
new int[]{ android.R.attr.state_checked } // checked
},
new int[]{
getResources().getColor(R.color.menu_text_color),
getResources().getColor(R.color.md_black_1000)
}
);
navigationView.setItemTextColor(textColors);
navigationView.setItemIconTintList(textColors);
但是当我希望背景以相同的方式改变时,CHECKED状态不起作用,只有未检查状态...
ColorStateList backgroundColors = new ColorStateList(
new int[][]{
new int[]{ -android.R.attr.state_checked }, // unchecked
new int[]{ android.R.attr.state_checked } // checked
},
new int[]{
getResources().getColor(R.color.md_grey_400),
getResources().getColor(R.color.md_grey_700)
}
);
navigationView.setBackgroundTintList(backgroundColors);
navigationView.getMenu().findItem(/* menuitem id */).setChecked(true);
如何设置选中状态菜单项的背景,如文本和图标颜色?
您应该在布局或样式中使用itemShapeFillColor
属性。
这是默认选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.12" android:color="?attr/colorPrimary" android:state_activated="true"/>
<item android:alpha="0.12" android:color="?attr/colorPrimary" android:state_checked="true"/>
<item android:color="@android:color/transparent"/>
</selector>
注意使用itemBackground
。当设置了@null
和/或NavigationView
时(默认行为),使用itemShapeAppearance
生成的成形背景设置为itemShapeAppearanceOverlay
。使用以下itemShape*
属性设置背景样式。设置itemBackground
将覆盖编程背景,并使itemShape*
属性中设置的值被忽略。