Как программно изменить цвет текста элемента меню ActionBar?

У меня есть actionBar с несколькими элементами, я хотел бы изменить цвет текста при щелчке элемента. Есть ли способ сделать это программно? Просьба представить и пример или любые ресурсы.

Спасибо

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

  }

Ответ 1

Следуйте этой ссылке, которая объясняет, как программно изменить текст меню.

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

Проверьте наличие android: actionMenuTextColor для определения ресурса стиля для текста.

Ответ 2

Чтобы изменить без определения ресурса стиля, мы можем использовать 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: недопустимый тип элемента полезной нагрузки

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

Ответ 3

Попробуйте 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);
    }
}