2015-03-27 17 views
5

Ho un menu popup che appare quando l'utente fa clic su un'immagine. Il codice utilizzato è:Cambia il colore del testo di un singolo oggetto in un PopupMenu

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

Il menu ha tre azioni, e vorrei che il testo in uno di loro per essere di colore rosso (invece di nero).

È possibile? Ho trovato alcune risposte (per esempio , here) che mostrano come fare questo con il menu Opzioni della propria attività, ma richiedono l'accesso al metodo onCreateOptionsMenu ...

Grazie in anticipo.

- EDIT -

Il file del menu:

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

Potresti fornire l'xml di menu_my_class_options? – NSimon

+0

Modificato il messaggio per fornire il file xml del menu. –

+0

sei arrivato attraverso questa risposta? http://stackoverflow.com/a/25731668/4706693 – NSimon

risposta

6

È possibile raggiungere questo obiettivo seguendo i passaggi.

Nella tua style.xml --- aggiungere le linee

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

</style> 

E sotto il codice

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

Aggiornamento per singola voce di menu a colori

Per singolo colore voce di menu può semplicemente usare il codice sottostante

@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); 
} 
+0

Grazie per la rapida risposta, Sadiq. Non cambierebbe il colore del testo di tutti gli oggetti? Voglio solo cambiare il colore di uno di loro ... –

+0

@FilipeRamos si hai ragione. Ho anche aggiunto il codice come da requirment in aggiornamento. Si prega di verificare – Sadiq

+0

Il problema con questo approccio è che non sto usando il menu delle opzioni, sto usando un menu a comparsa (_PopupMenu_ classe), e ho solo accesso al metodo _onMenuItemClick() _ e non a qualsiasi _onCreate ..._ metodo! : -/ –

0

So che questa risposta è tardiva, ma forse sarà utile per qualcuno. Prova a usare questo

<string name="action_delete_shipment"><font fgcolor='#FF1400'>Delete Shipment</font></string>