2012-03-27 161 views

回答

2

按照此鏈接,介紹瞭如何更改菜單項編程文本。

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

檢查機器人:actionMenuTextColor用於定義文本樣式資源。

+8

有沒有辦法改變它沒有定義樣式資源的子菜單? – Fabii 2012-03-27 18:41:03

+4

這並不回答問題。 – Odys 2016-05-05 19:21:09

+0

...但它是公認的答案! – 2016-11-30 04:59:16

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; 
} 

當你格式化文本樣式時,你會得到「Invalid payload item type」異常。爲了避免這種情況,請覆蓋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 2014-09-02 21:44:37

+1

此解決方案在Android 5.0和6.0上不起作用 – Akshay 2016-02-23 03:15:13

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 2016-02-23 03:15:40

相關問題