如何以编程方式更改ActionBar menuitem文本颜色?

时间:2012-03-27 18:34:04

标签: android android-actionbar

我有一个包含多个项目的actionBar,我想在单击项目时更改文本的颜色。无论如何以编程方式执行此操作?请提供示例或任何资源。

由于

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

  }

3 个答案:

答案 0 :(得分: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,并使用return true或false。

参考:

Android: java.lang.IllegalArgumentException: Invalid payload item type

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

答案 1 :(得分:2)

按照此链接说明如何以编程方式更改menuitem文本。

http://developer.android.com/guide/topics/ui/actionbar.html#Style

检查android:actionMenuTextColor,以定义文本的样式资源。

答案 2 :(得分: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);
    }
}