如何为NavigationView中的单个菜单项设置自定义文本颜色?

11

你好,我正在使用Android的NavigationView。我想要为导航视图中的某些项目单独设置文本颜色,而不是所有项目都设置。或者当我在导航视图中选择一个项目时,我想动态地更改单个项目的文本颜色(只适用于特定项目)。我该怎么做?

2个回答

23

是的,你可以做到 我也曾经做过

首先获取你想要更改颜色的菜单项。

 Menu m = navView.getMenu();
 MenuItem menuItem = m.findItem(your_menu_id);

然后使用可变样式将颜色应用到文本

SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new ForegroundColorSpan(Color.your_color), 0, s.length(), 0);
menuItem.setTitle(s); 

就是这样。

现在以下代码是针对您的第二个解决方案,在菜单单击时动态更改文本颜色...

navView.setNavigationItemSelectedListener(new 
    NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            SpannableString s = new SpannableString(menuItem.getTitle());
            s.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
            menuItem.setTitle(s);
            return false;
        }
    });

1
非常狡猾!看起来完全忽略了,因为您可以获取单个菜单项的图标可绘制对象。谢谢! - Daniel Wilson
1
这太棒了!我为此搜索了太长时间,谢谢 :) - gtRfnkN

0
据我所知,这是不可能的。 我已经搜索过(我相信你也是),试图找到如何完成此操作的示例,但无法找到一个。
我真的建议创建一个自定义视图来完成你想要做的事情(在你的问题中没有很好地详细说明,因此很难提出替代方案)。 或者,如果你真的想使用SDK提供的东西,也许你可以使用OptionsMenu(应该允许自定义各个菜单项)。
编辑:原来可以在没有自定义视图的情况下完成此操作。有关详细信息,请参见moinkhan的被接受答案。

1
嗨,这是可能的。看答案! :) - Sudheesh Mohan
谢谢!我更新了我的回复,以便任何遇到这个帖子的人可以看到。 - ryguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接