将图标设置为菜单项

时间:2016-04-19 11:01:36

标签: android menu navigation-drawer

我有一个带有几个菜单项的导航抽屉。我试图动态更改其中一个菜单项的菜单图标和文本颜色。以下代码位于其中一个具有导航抽屉的活动类的onCreate()中:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
changeItemWiseTextProperties(navigationView.getMenu());

以下是方法定义:

public void changeItemWiseTextProperties(Menu menu) {
    menu.findItem(R.id.nav_testing).
        setTitle(Html.fromHtml("<font color='#3b9ada'>Testing</font>"));

    menu.findItem(R.id.nav_testing).
        setIcon(ContextCompat.getDrawable(this,R.drawable.icon_testing_activated));
}

虽然我可以成功设置菜单项的标题名称和字体颜色,但对菜单图标没有影响。我无法改变这一点。为什么会这样?

1 个答案:

答案 0 :(得分:1)

我检查了我的代码并在日志中打印了icon.toString():menu.findItem(R.id.nav_testing).getIcon().toString()

在以编程方式更改菜单图标之前和之后:menu.findItem(R.id.nav_testing).getIcon()...

结果?我得到了两个不同的价值观。这意味着图标正在改变。但为什么改变没有反映在菜单中?

原因:我有两个图标 - 除了颜色外,每个方面都相同。最初它是icon_testing(灰色),然后我将其设置为icon_testing_activated(蓝色)。

灰色是未选定菜单项的默认颜色,而蓝色是所选菜单项的默认颜色。由于未设置我为其设置蓝色图标(icon_testing_activated)的菜单项,因此它被转换为默认的未选择颜色 - 灰色。由于除了颜色之外两个图标是相同的,我认为setIcon()方法不起作用。

解决方案:我以编程方式检查了我正在进行换色的菜单项:

menu.findItem(R.id.nav_testing).setChecked(true);