Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change text color of a single item in a PopupMenu

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>
like image 616
Filipe Ramos Avatar asked Mar 27 '15 15:03

Filipe Ramos


2 Answers

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);
}
like image 67
Shadik Khan Avatar answered Oct 18 '22 18:10

Shadik Khan


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>
like image 24
Pretorian Avatar answered Oct 18 '22 19:10

Pretorian