Reputation: 1795
I have a popup menu that appears when the user clicks an image. The code used is:
PopupMenu popupMenu = new PopupMenu(mContext, mImageView);
popupMenu.setOnMenuItemClickListener(MyClass.this);
popupMenu.inflate(R.menu.menu_my_class_options);
popupMenu.show();
The menu has three actions, and I would like that the text in one of them to be colored red (instead of black).
Is that possible?
I've found some answers (e.g., here) that show how to do this with the activity's Options Menu, but they require access to the onCreateOptionsMenu
method...
Thanks in advance.
-- EDIT --
The menu file:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item_edit"
app:showAsAction="ifRoom|withText"
android:title="@string/action_edit_address"
android:visible="true"/>
<item
android:id="@+id/item_retake_photo"
app:showAsAction="ifRoom|withText"
android:title="@string/action_retake_photo"
android:visible="true"/>
<item
android:id="@+id/item_delete"
app:showAsAction="ifRoom|withText"
android:title="@string/action_delete_shipment"
android:visible="true"/>
</menu>
Upvotes: 13
Views: 8459
Reputation: 117
Based on the answer of @Shadik Khan, actually you just need to create SpannableString, change the color or it before putting the item into the menu list. Like below
if (messageActionMap.keyAt(i) == LIST_ITEM_DELETE) {
SpannableString itemRecall = new SpannableString(messageActionMap.valueAt(i));
itemRecall.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.red)), 0, itemRecall.length(), 0);
mMessagePopupMenu.getMenu().add(Menu.NONE, messageActionMap.keyAt(i), 1, itemRecall);
}
Upvotes: 1
Reputation: 169
I know that this answer is belated, but maybe it will be useful for somebody. Try to use this
<string name="action_delete_shipment"><font fgcolor='#FF1400'>Delete Shipment</font></string>
Upvotes: 9
Reputation: 1215
You can achieve this by following steps.
In your style.xml--- add the lines
<style name="style" parent="android:Theme.Holo.Light">
<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceColor</item>
<item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>
</style>
And below code
<style name="myPopupMenuStyle" parent="@style/Widget.AppCompat.Light.PopupMenu">
</style>
<style name="myPopupMenuTextAppearanceColor" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">#000000(Your Color Code)</item>
</style>
Update for single menu item color
For single menu item color you can simply use the below code
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu, menu);
int positionOfMenuItem = 0;
// 0 or whatever your item position at which you want to change the color...
MenuItem item = menu.getItem(positionOfMenuItem);
SpannableString s = new SpannableString("My red MenuItem");
s.setSpan(new ForegroundColorSpan(Color.RED//your color), 0, s.length(), 0);
item.setTitle(s);
}
Upvotes: 15