我有一个带有几个菜单项的导航抽屉。我试图动态更改其中一个菜单项的菜单图标和文本颜色。以下代码位于其中一个具有导航抽屉的活动类的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));
}
虽然我可以成功设置菜单项的标题名称和字体颜色,但对菜单图标没有影响。我无法改变这一点。为什么会这样?
答案 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);