2014-07-09 21 views
21

Ho bisogno di cambiare il colore del testo di un menu popuo ma non trovo alcun modo per farlo, posso cambiare lo sfondo del popmenu ma non il testo, modifico lo style.xml in questo modo:Colore testo menu popup android (AppCompat)

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> 
    <!-- API 14 theme customizations can go here. --> 

    <item name="popupMenuStyle">@style/MyPopupMenu</item> 
    <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> 
    <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item> 
</style> 

<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu"> 
    <item name="android:popupBackground">#0F213F</item> 
</style> 

<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Small"> 
    <item name="android:textColor">#ffffff</item> 
</style> 

<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Large"> 
    <item name="android:textColor">#ffffff</item> 
</style> 

dov'è l'errore?

+0

Definire gli stili in AppTheme, invece di AppBaseTheme. AppBaseTheme ha le proprie implementazioni per i livelli API 11 e 14 per impostazione predefinita, che ha ridefinito i tuoi stili. – Ganster41

+0

possibile duplicato di [Come personalizzare PopupMenu?] (Http://stackoverflow.com/questions/12636101/how-to-style-popupmenu) –

+0

@ArtjomB. Alcuni si sovrappongono ma non un duplicato perché questa domanda riguarda specificamente i popup di AppCompat. –

risposta

21
<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item> 
<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item> 

Penso che si sta utilizzando TextAppearance.AppCompat.Base.Widget.PopupMenu. Ecco l'errore, stai utilizzando un altro genitore che non risponde allo stile corrente.

devi usare:

TextAppearance.AppCompat.Light.Widget.PopupMenu.

+1

cosa significa? puoi modificare questo in modo che qualunque cosa l'OP abbia fatto si unisca a qualsiasi cosa tu voglia fare per risolvere il problema? – bharal

+0

Non riesco a cambiare il colore del carattere. Puoi aggiornare alla risposta completa tutti richiedono stile. –

+0

Questo è quello che ho fatto in base a questa risposta e ha funzionato per me, grazie Alfaplus! @ colore/colorToolbarText

30

In styles.xml

<style name="itemTextStyle.AppTheme" parent="@android:style/TextAppearance.Widget.IconMenu.Item"> 
     <item name="android:textColor">@drawable/color_item_popup</item> 
     <item name="android:textSize">@dimen/text_content</item> 
    </style> 

e aggiungere in AppTheme

<item name="android:itemTextAppearance">@style/itemTextStyle.AppTheme</item> 

color_item_popup.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="@color/primary_text"/> 
    <item android:state_focused="true" android:color="@color/primary_text"/> 
    <item android:color="@color/secondary_text"/> 
</selector> 
+1

opere con appcompatibility menu a comparsa –

+2

Questo ha per essere la risposta corretta. –

+0

funziona per me! – Werb

1

È possibile, ovviamente, personalizzare il PopupMenu nel proprio modo. È abbastanza semplice. Ma prima devi occuparti di una cosa molto importante.

Il PopupMenu si crea in questo modo,

PopupMenu popupMenu = new PopupMenu(context, anchorView); 

Ora il "contesto" qui gioca un ruolo molto importante nella styling. Lo stile del PopupMenu dipende dallo stile del contesto che si passa. Quindi stai molto attento in questo. Ho perso quasi mezz'ora a capirlo.

Se si è in un frammento basta passare "getActivity()" e il gioco è fatto.

Styling degli elementi PopUpMenu

Basta ignorare i seguenti articoli nel tuo stile,

<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> 
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> 

<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item> 
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item> 

e personalizzare l'aspetto del testo che si desidera,

<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small"> 
      <item name="android:textColor">@color/text_hint_color</item> 
</style> 

<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large"> 
      <item name="android:textColor">@color/text_hint_color</item> 
</style> 

Se si desidera per cambiare lo sfondo del PopupMenu, fai questo

<item name="popupMenuStyle">@style/myPopupMenuStyle</item> 
    <item name="android:popupMenuStyle">@style/myPopupMenuStyle</item> 

avanzata Styling

Le voci PopUpMenu non supportano che mostra le icone di default. Ma mostrare le icone può farlo sembrare molto meglio. Consiglio di provarlo.

Per attuare questo basta mettere il seguente codice nella vostra attività e vi sono buone per andare,

@Override 
    public boolean onMenuOpened(int featureId, Menu menu) { 
     if (featureId == Window.FEATURE_ACTION_BAR && menu != null) { 
      if (menu.getClass().getSimpleName().equals("MenuBuilder")) { 
       try { 
        Method m = menu.getClass().getDeclaredMethod(
          "setOptionalIconsVisible", Boolean.TYPE); 
        m.setAccessible(true); 
        m.invoke(menu, true); 
       } catch (NoSuchMethodException e) { 
        Log.e("tag", "onMenuOpened", e); 
       } catch (Exception e) { 
        throw new RuntimeException(e); 
       } 
      } 
     } 
     return super.onMenuOpened(featureId, menu); 
    } 

Speranza che aiuta.

+0

Usa le tue bandiere duplicate invece di postare esattamente la stessa risposta a più domande (ho già votato per chiudere la domanda). Se la domanda non è un duplicato, devi aggiustare le risposte per far corrispondere la domanda. –

+0

android: textAppearance_PopupMenu ha funzionato su nexus9, ma non su nexus7-2012; aggiunto textAppearance_PopupMenu senza "android:" e funziona; grazie – mjollneer

12

In stili.xml:

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu.Overflow"> 
    <item name="android:popupBackground">@color/white</item> 
</style> 

in Java:

Context wrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenu); final PopupMenu popupMenu = new PopupMenu(wrapper, view);

+0

Questo è esattamente ciò che era necessario. Grazie. – superbre

+0

Questa dovrebbe essere la risposta accettata –

+0

Grazie. È così! – Rainmaker

Problemi correlati