11

嗨,我正在使用 android NavigationView。我想为 NavigationView 中的某些项目提供单独的文本颜色,而不是为所有项目。或者我想在 NavigationView 中选择一个项目时动态更改单个项目的文本颜色(仅适用于某些项目)。我怎样才能做到这一点?

4

2 回答 2

23

是的,你可以做到,我也做到了

首先获取要更改颜色的 MenuItem

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

然后用你的颜色应用 spannable

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;
        }
    });
于 2015-06-27T08:05:56.270 回答
0

据我所知,这是不可能的。我已经搜索(我相信你有)试图找到一个如何完成这个的例子,但找不到一个。

我真的建议创建一个自定义视图来做你想做的事情(你的问题不是很详细,所以很难提出一个替代方案)。或者,如果你真的想使用 SDK 提供的东西,也许你可以使用OptionsMenu(它应该允许自定义单个菜单项)。

编辑:事实证明,没有自定义视图也可以做到这一点。有关详细信息,请参阅 moinkhan 接受的答案。

于 2015-06-26T12:31:42.723 回答