2012-03-27 3 views
11

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

Благодаря

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

    } 

ответ

2

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

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

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

+8

Есть ли способ, чтобы изменить его без определения ресурса стиля? – Fabii

+4

Это не отвечает на заданный вопрос. – Odys

+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

Я пробовал это, и это не имело никакого эффекта. Он работает для вас при компиляции и запуске на Android 4.4? – arlomedia

+1

Это решение не работает на Android 5.0 и 6.0 – Akshay

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); 
    } 
} 
+0

Это решение не работает на Android 5.0 и 6.0 – Akshay

Смежные вопросы