我有一個有多個項目的actionBar,我想在點擊項目時改變文本的顏色。無論如何要以編程方式進行此操作?請提供示例或任何資源。如何以編程方式更改ActionBar menuitem文本顏色?
感謝
public void catalogClick(MenuItem item){
//highlight menuitem etc.
}
我有一個有多個項目的actionBar,我想在點擊項目時改變文本的顏色。無論如何要以編程方式進行此操作?請提供示例或任何資源。如何以編程方式更改ActionBar menuitem文本顏色?
感謝
public void catalogClick(MenuItem item){
//highlight menuitem etc.
}
按照此鏈接,介紹瞭如何更改菜單項編程文本。
http://developer.android.com/guide/topics/ui/actionbar.html#Style
檢查機器人:actionMenuTextColor用於定義文本樣式資源。
要更改而不定義樣式資源,我們可以使用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
嘗試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);
}
}
此解決方案在Android 5.0和6.0上不起作用 – Akshay 2016-02-23 03:15:40
有沒有辦法改變它沒有定義樣式資源的子菜單? – Fabii 2012-03-27 18:41:03
這並不回答問題。 – Odys 2016-05-05 19:21:09
...但它是公認的答案! – 2016-11-30 04:59:16