Изменить цвет текста отдельного элемента в PopupMenu

У меня есть всплывающее меню, которое появляется, когда пользователь щелкает изображение. Используемый код:

PopupMenu popupMenu = new PopupMenu(mContext, mImageView);
popupMenu.setOnMenuItemClickListener(MyClass.this);
popupMenu.inflate(R.menu.menu_my_class_options);
popupMenu.show();

В меню есть три действия, и я бы хотел, чтобы текст в одном из них был окрашен в красный цвет (а не в черный).

Это возможно? Я нашел несколько ответов (например, здесь), которые показывают, как это сделать с помощью меню параметров действия, но для них требуется доступ к методу onCreateOptionsMenu ...

Заранее спасибо.

-- РЕДАКТИРОВАТЬ --

Файл меню:

<?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>

person Filipe Ramos    schedule 27.03.2015    source источник
comment
Не могли бы вы предоставить xml-файл menu_my_class_options?   -  person NSimon    schedule 27.03.2015
comment
Отредактировал сообщение, чтобы предоставить XML-файл меню.   -  person Filipe Ramos    schedule 27.03.2015
comment
Вы тогда пришли к этому ответу? stackoverflow.com/a/25731668/4706693   -  person NSimon    schedule 27.03.2015
comment
@NicolasSimon: Да, но это изменит цвет текста всех элементов, а я хочу изменить цвет только одного из них. И обратите внимание, что я не использую меню параметров, я использую всплывающее меню (класс PopupMenu), и у меня есть доступ только к методу onMenuItemClick () , а не какому-либо методу onCreate ....   -  person Filipe Ramos    schedule 30.03.2015


Ответы (3)


Вы можете добиться этого, выполнив следующие шаги.

В вашем style.xml --- добавьте строки

<style name="style" parent="android:Theme.Holo.Light"> 
    <item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceColor</item>
    <item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>

</style>

И ниже код

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

Обновление цвета отдельного пункта меню

Для цвета одного пункта меню вы можете просто использовать приведенный ниже код

@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);
}
person Shadik Khan    schedule 27.03.2015
comment
Спасибо за быстрый ответ, Садик. Разве это не изменило бы цвет текста всех элементов? Я хочу изменить цвет только одного из них ... - person Filipe Ramos; 27.03.2015
comment
@FilipeRamos да, вы правы. Я также добавил код в соответствии с вашими требованиями в обновлении. пожалуйста, проверьте - person Shadik Khan; 27.03.2015
comment
Проблема с этим подходом заключается в том, что я не использую меню параметров, я использую всплывающее меню (класс PopupMenu), и у меня есть доступ только к onMenuItemClick () < / i>, а не какому-либо методу onCreate ...! : - / - person Filipe Ramos; 30.03.2015
comment
Тогда почему бы вам не использовать настраиваемое всплывающее окно. Вам будет легко - person Shadik Khan; 30.03.2015
comment
@Sadiq Как мы можем изменить размер текста в настраиваемом PopupMenu? - person Anshul Tyagi; 13.08.2015

Знаю, что ответ запоздалый, но, может быть, кому-то он будет полезен. Попробуйте использовать это

<string name="action_delete_shipment"><font fgcolor='#FF1400'>Delete Shipment</font></string>
person Pretorian    schedule 12.09.2017

Основываясь на ответе @Shadik Khan, на самом деле вам просто нужно создать SpannableString, изменить цвет или его, прежде чем помещать элемент в список меню. Как показано ниже

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);
                }
person Michael    schedule 16.11.2020