2014-07-09 17 views
21

Ich muss Textfarbe eines Popuo-Menüs ändern, aber ich finde keine Möglichkeit, dies zu tun, kann ich Hintergrund von Popmenu ändern, aber nicht den Text, bearbeite ich die style.xml auf diese Weise:Android Popupmenü Textfarbe (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> 

wo ist der fehler?

+0

Definieren Sie Ihre Stile in AppTheme, statt AppBaseTheme. AppBaseTheme hat standardmäßig eigene Implementierungen für die API-Stufen 11 und 14, die Ihre Stile neu definiert haben. – Ganster41

+0

möglich duplicate von [Wie PopupMenu stylen?] (Http://stackoverflow.com/questions/12636101/how-to-style-popupmenu) –

+0

@ArtjomB. Einige Überschneidungen, aber keine Duplikate, da sich diese Frage speziell auf AppCompat-Popups bezieht. –

Antwort

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

Ich denke, dass Sie TextAppearance.AppCompat.Base.Widget.PopupMenu verwenden. Hier ist der Fehler, dass Sie einen anderen Elternteil verwenden, der nicht auf den aktuellen Stil reagiert.

Sie haben zu verwenden:

TextAppearance.AppCompat.Light.Widget.PopupMenu.

+1

was bedeutet das? Können Sie das bearbeiten, so dass alles, was das OP getan hat, mit dem zusammengeführt wird, was Sie vorhaben, um das Problem zu lösen? – bharal

+0

Ich kann die Schriftfarbe nicht ändern. Können Sie auf die vollständige Antwort aktualisieren alle Stil erfordern. –

+0

Dies ist, was ich getan habe, basierend auf dieser Antwort und es hat für mich funktioniert, danke Alfaplus!

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> 

und fügen Sie 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

Arbeiten mit appcompatibility Pop Menü –

+2

Dies hat um die richtige Antwort zu sein. –

+0

es funktioniert für mich! – Werb

1

Sie können natürlich die PopupMenu in Ihrer eigenen Art und Weise anpassen. Es ist ganz einfach. Aber zuerst müssen Sie sich um eine sehr wichtige Sache kümmern.

Die PopupMenu wird wie folgt erstellt,

PopupMenu popupMenu = new PopupMenu(context, anchorView); 

Nun ist der „Kontext“ hier spielt eine sehr wichtige Rolle bei dem Styling. Der Stil des PopupMenu hängt vom Stil des von Ihnen übergebenen Kontexts ab. Sei also sehr vorsichtig dabei. Ich verschwendete fast eine halbe Stunde damit, das herauszufinden.

Wenn Sie in einem Fragment sind, übergeben Sie einfach "getActivity()" und Sie sind fertig.

Styling der PopupMenu Artikel

einfach die folgenden Artikel im Stil außer Kraft setzen,

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

Und den Text Aussehen anpassen, wie Sie wollen

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

Wenn Sie möchten, Um den Hintergrund des PopupMenu zu ändern, tun Sie dies

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

Erweiterte Styling

Die PopupMenu Elemente unterstützen nicht die Symbole standardmäßig zeigt. Aber das Zeigen der Symbole kann es so viel besser aussehen lassen. Ich empfehle es zu versuchen.

dies den folgenden Code in Ihrer Tätigkeit setzen und Sie sind nur zu implementieren gut zu gehen,

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

Hoffe, es hilft.

+0

Bitte verwenden Sie Ihre doppelten Flags, anstatt die gleiche Antwort auf mehrere Fragen zu posten (Ich habe bereits abgestimmt, um die Frage zu schließen). Wenn die Frage kein Duplikat ist, müssen Sie Ihre Antworten an die Frage anpassen. –

+0

android: textAppearance_PopupMenu hat auf nexus9 gearbeitet, aber nicht auf nexus7-2012; TextAppearance_PopupMenu ohne "android:" hinzugefügt und es funktioniert; danke – mjollneer

12

In Stilen.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

Das ist genau was benötigt wurde. Vielen Dank. – superbre

+0

Dies sollte die angenommene Antwort sein –

+0

Danke. Das ist es! – Rainmaker

Verwandte Themen