Android NavigationView setBackgroundTintList不起作用

问题描述 投票:0回答:1

我想在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);

如何设置选中状态菜单项的背景,如文本和图标颜色?

android navigation-drawer navigationview material-components-android android-navigationview
1个回答
0
投票

您应该在布局或样式中使用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*属性中设置的值被忽略。

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