以编程方式设置导航视图菜单项的样式

3

是否有可能通过编程方式设置新导航视图中MenuItem的样式?我正在动态构建菜单,无法使用静态XML文件。我找不到任何相关信息。

更新:我知道如何设置标题和图标,但不知道如何设置文本的透明度等。

更新2:在NavigationView类中,有一个setItemTextColor(ColorStateList)方法。据我所知,不能设置单个项颜色吗?谢谢!

1个回答

9
如果您想设置菜单图标:
首先设置 navigationView.setItemIconTintList(null)
NavigationView navigationView = (NavigationView) findViewById(R.id.main_nav_view);
navigationView.setItemIconTintList(null);

获取菜单项并为其设置图标。

MenuItem menuItem = navigationView.getMenu().getItem(0);
menuItem.setIcon(R.drawable.nav_new_drawable);

同时也可以设置文字颜色,例如:

navigationView.setItemTextColor(ColorStateList textColor);

设置项目背景,如下所示:

navigationView.setItemBackgroundResource(int resId)

---编辑---

既然您已经了解了以上内容,可以尝试下面的代码。

<color name="test_alpha_color">#40999999</color>

MenuItem menuItem = navigationView.getMenu().getItem(0);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.test_alpha_color)), 0, s.length(), 0);
menuItem.setTitle(s);

谢谢您的帮助!我熟悉设置图标。我所指的样式是更改文本颜色(alpha)等。 - Fhl
1
我的修订后的答案能帮到你吗? - Ellie Zou
太棒了,它像魔法一样奏效!我不知道菜单项可以接收SpannableString..! - Fhl
setItemBackgroundResource(int resId)将更改所有菜单项的背景,但我只想更改特定菜单项的背景。我该如何实现? - user1443317
setItemTextColor在25.0.0支持库版本中存在一些问题。我无法设置所选状态的颜色。这里是状态: int [][] states = new int [][]{ new int[] { android.R.attr.state_enabled, -android.R.attr.state_pressed, -android.R.attr.state_selected}, new int[] {-android.R.attr.state_enabled}, new int[] {android.R.attr.state_enabled, android.R.attr.state_selected}, new int[] {android.R.attr.state_enabled, android.R.attr.state_pressed}
};
- user2362956

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