我创建了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>
答案 0 :(得分:1)
我遇到了类似的问题,看起来解决问题的方法是在所有三个选择器中使用android:state_checked
而不是android:state_selected
(至少为我解决了这个问题)。
答案 1 :(得分:0)
您可以使用setItemTextColor
和setItemIconTintList
将设置文字颜色色调和图标颜色色调用于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);