如何以编程方式更改ActionBar菜单项文本颜色?

11

我有一个带有多个项的actionBar,我想在单击该项时更改文本的颜色。 有没有办法以编程方式实现这一点? 请提供示例或任何资源。

谢谢

  public void catalogClick(MenuItem item){
     //highlight menuitem etc.

  }
3个回答

4

如果不定义样式资源,我们可以使用SpannableString进行更改。

    @Override
public boolean onPrepareOptionsMenu(Menu menu) {
            //To style first menu item
    MenuItem menuItem = menu.getItem(0);
    CharSequence menuTitle = menuItem.getTitle();
    SpannableString styledMenuTitle = new SpannableString(menuTitle);
    styledMenuTitle.setSpan(new ForegroundColorSpan(Color.parseColor("#00FFBB")), 0, menuTitle.length(), 0);
    menuItem.setTitle(styledMenuTitle);

    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    Toast.makeText(this, item.getTitle() + " clicked!", Toast.LENGTH_LONG).show();
    return true;
}

当您格式化文本样式时,可能会出现“无效的有效负载项类型”异常。为了避免这种情况,请重写onMenuItemSelected,并使用返回true或false。
参考: Android:java.lang.IllegalArgumentException:Invalid payload item type

http://vardhan-justlikethat.blogspot.in/2013/02/solution-invalid-payload-item-type.html


2
我尝试了这个,但没有任何效果。当在Android 4.4上编译和运行时,它对你有效吗? - arlomedia

2

8
有没有一种方法可以在不定义样式资源的情况下进行更改? - Fabii
5
这不回答所提出的问题。 - Odys

1
尝试使用Firewall_Sudhan的答案,但迭代菜单的子菜单。
@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    SubMenu subMenu = menu.getItem(0).getSubMenu();
    for (int i = 0; i <  subMenu.size(); i++) {
        MenuItem menuItem = subMenu.getItem(i);
        CharSequence menuTitle = menuItem.getTitle();
        SpannableString styledMenuTitle = new SpannableString(menuTitle);
        styledMenuTitle.setSpan(new ForegroundColorSpan(Color.BLACK), 0, menuTitle.length(), 0);
        menuItem.setTitle(styledMenuTitle);
    }
}

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