我有一个包含多个项目的actionBar,我想在单击项目时更改文本的颜色。无论如何以编程方式执行此操作?请提供示例或任何资源。
由于
public void catalogClick(MenuItem item){
//highlight menuitem etc.
}
答案 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);
}
}