2

我正在遵循导航视图的配色方案。 在此处输入图像描述

我为背景、文本和图标创建了 3 个选择器。当我设置选择器时,我的导航视图如下所示: 在此处输入图像描述

问题是没有显示任何项目被选中,如果我按下一个项目,所有项目的背景颜色都会变为灰色。图标永远不会获得原色。

以下是 XML:

 <android.support.design.widget.NavigationView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="@android:color/white"
            app:itemTextColor="@drawable/nav_item_text"
            app:itemIconTint="@drawable/nav_item_icon_tint"
            app:itemBackground="@drawable/nav_item_background"
            app:headerLayout="@layout/drawer_student_data_header"
            app:menu="@menu/drawer"
            android:id="@+id/navigationView"/>

nav_item_icon_tint.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/gray_600"/>
    <item android:state_selected="true" android:color="@color/primary" />
    <item android:color="@color/gray_600" />
</selector>

nav_item_text.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/black_87_percent"/>
    <item android:state_selected="true" android:color="@color/primary" />
    <item android:color="@color/black_87_percent" />
</selector>

nav_item_background.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="@color/gray_400"/>
    <item android:state_selected="true" android:drawable="@color/gray_200" />
    <item android:drawable="@android:color/white" />
</selector>
4

3 回答 3

1

我有一个类似的问题,看起来解决它的方法是使用android:state_checked而不是android:state_selected所有三个选择器(至少这为我解决了它)。

于 2016-01-02T13:50:27.750 回答
0

确保您没有从底部导航访问菜单项并将其状态设置为“已检查”两次。为避免这种情况,请使用:

mBottomNavigationView.selectedItemId(R.id.your_menu_item_id);

代替

mBottomNavigationView.menu.getItem(position).setChecked(true);
于 2017-05-01T18:17:08.077 回答
0

您可以使用setItemTextColorandsetItemIconTintList为 NavigationDrawer 的项目设置文本颜色色调和图标颜色色调,

要使用此方法,请将此代码添加到 onCreateView 的末尾:

 int[][] states = new int[][]{
        new int[]{-android.R.attr.state_checked},// unchecked state
        new int[]{android.R.attr.state_checked}, // checked state
};

int[] colors = new int[]{
        ContextCompat.getColor(this, R.color.colorPrimary),
        ContextCompat.getColor(this, R.color.colorPrimaryDark)
};

ColorStateList colorStateList = new ColorStateList(states, colors);
navigationView.setItemTextColor(colorStateList);
navigationView.setItemIconTintList(colorStateList);

此代码将颜色设置为未选中状态和选中状态。您可以将颜色设置为其他状态。

颜色数组和状态数组的成员数应该相等。你可以选择任何你想要的颜色。您可以使用 Color 类或喜欢示例使用资源。在此链接中,您可以找到可用状态列表developer.android

于 2016-01-04T18:14:16.927 回答