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

时间:2015-06-26 11:10:08

标签: android material-design navigationview

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

2 个答案:

答案 0 :(得分:16)

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

首先获取要更改颜色的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;
        }
    });

答案 1 :(得分:0)

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

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

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