导航视图的选择器行为不正确

时间:2015-10-16 02:03:45

标签: android android-selector navigationview android-navigationview

我遵循导航视图的这种配色方案。 enter image description here

我创建了3个选择器,用于背景,文本和图标。 当我设置选择器时,我的导航视图如下所示: enter image description here

问题是没有选择任何项目,如果我按下一个项目,所有项目'背景颜色变为灰色。图标永远不会成为主要颜色。

以下是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>

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用setItemTextColorsetItemIconTintList将设置文字颜色色调和图标颜色色调用于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

答案 2 :(得分:0)

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

mBottomNavigationView.selectedItemId(R.id.your_menu_item_id);

而不是

mBottomNavigationView.menu.getItem(position).setChecked(true);