我点击时尝试更改导航视图中菜单项的图标。为此,我使用以下方法:
private void selectDrawerItem(final MenuItem menuItem){
for (int i = 0; i < navigationView.getMenu().size(); i++){
Log.e(TAG, "Clearing " + navigationView.getMenu().getItem(i).getItemId() + " " + navigationView.getMenu().getItem(i).getIcon());
navigationView.getMenu().getItem(i).getIcon().setTint(ContextCompat.getColor(this, R.color.white));
}
switch (menuItem.getItemId()){
default:
break;
case R.id.drawer_item_one:
menuItem.getIcon().setTint(ContextCompat.getColor(this, R.color.accent));
Log.e(TAG, "Setting " + menuItem.getItemId() + " " + menuItem.getIcon());
break;
}
Log.e(TAG, "-----END-----");
menuItem.setChecked(true);
//drawerLayout.closeDrawers();
}
问题是每当我点击第一个项目时,它会正确地将所有图标重置为白色,但它会将所选图标设置为强调颜色和我单击的前两个菜单项。我不明白发生了什么。日志清楚地表明它只设置了一次背景颜色,为什么其中3个被设置?
似乎我添加到switch语句的任何抽屉项目都会导致前3个项目也改变背景颜色。发生了什么事?
修改
如果我替换switch语句中的代码,只是添加一个延迟,它似乎工作:
case R.id.drawer_item_one:
new Handler(getMainLooper()).postDelayed(new Runnable(){
@Override
public void run(){
menuItem.getIcon().setTint(ContextCompat.getColor(context, R.color.primary_dark));
}
}, 50);
break;
我不想添加延迟,如何在没有奇怪的解决方法的情况下完成这项工作?
编辑2
我注意到的另一件事是,如果不改变颜色,我改变标题文本,它工作正常。
答案 0 :(得分:0)
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:itemIconTint="@drawable/navigation_selected_item"
app:itemTextColor="@drawable/navigation_selected_item"
app:menu="@menu/drawer" />
----------------------------------------------------------------
navigation_selected_item.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is used when the Navigation Item is checked -->
<item android:color="@color/selected_color" android:state_checked="true" />
<!-- This is the default text color -->
<item android:color="@color/default_color" />
</selector>
答案 1 :(得分:0)
答案 2 :(得分:0)
请参阅以下链接,为每个菜单项添加不同的颜色。 How to give color to menu items for Navigation drawer?