Android NavigationView菜单图标问题

时间:2016-10-26 03:47:00

标签: java android navigation-drawer

我点击时尝试更改导航视图中菜单项的图标。为此,我使用以下方法:

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

我注意到的另一件事是,如果不改变颜色,我改变标题文本,它工作正常。

3 个答案:

答案 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?