2016-07-15 11 views
0

Wie stelle ich die Farbe RadioButton s in einem überprüfbaren PopupMenu. Ich verwende die AppCompat-Version. Ich habe die Hintergrundfarbe und die Textfarbe über die Stile erfolgreich eingestellt, aber ich kann nicht herausfinden, wie die Farbe der Optionsfelder eingestellt wird.Wie ändere ich die Farbe der RadioButtons in PopupMenu?

Dies ist, was ich bisher habe;

<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> 
     <item name="popupMenuStyle">@style/myPopupMenuStyle</item> 
     <item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> 
     <item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item> 
    </style> 

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


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

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

Ich habe viele andere Attribute ausprobiert, aber nichts half.

Antwort

1

basierend auf Galdino Antwort auf: https://stackoverflow.com/a/34702166/2661303 und basierend auf Pztar Antwort, und mit etwas Versuch und Irrtum, ich habe die Lösung herausgefunden. Ich benutze das AppCompat PopupMenu.
Fügen Sie Ihrer Stildatei nur Folgendes hinzu (Sie müssen nichts zu Ihrem Hauptthema hinzufügen);

<style name="MyPopupTheme" parent="Widget.AppCompat.PopupMenu"> 
    <item name="colorAccent">@color/primary_dark</item> 
    <item name="android:popupBackground">@color/accent</item> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:textColorSecondary">@android:color/white</item> 
</style> 

Verwenden Sie dann beim Erstellen von PopupMenu folgende;

Context wrapper = new ContextThemeWrapper(getActivity(), R.style.MyPopupTheme); 
PopupMenu popup = new PopupMenu(wrapper, bAnchor, Gravity.END | Gravity.RIGHT | Gravity.TOP, 0, R.style.MyPopupTheme); 

Ich weiß nicht, warum, aber selbst wenn der ContextThemeWrapper verwenden, ich habe immer noch den Stil an den Konstruktor übergeben. Da wir ContextWrapper verwenden, verwenden wir ein bestimmtes Thema für dieses PopupMenu, daher können wir die Akzentfarbe nur für das PopupMenu überschreiben. So jetzt habe ich eine umgekehrte PopupMenu, mit der Akzentfarbe als Hintergrund, den Text und die Tasten in weiß, und die ausgewählte Taste in der Grundfarbe.

Hope this jemand hilft,
Lionscribe

+0

Du hast mich einen Tag gerettet. Vielen Dank! Verstehe nicht, warum der Stil nicht vom Aktivitätsthema angewendet werden kann: @ style/MyPopupTheme Es funktioniert nicht ( –

2
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> 
    <item name="colorAccent">@color/radio_button_color</item> 
    <item name="android:textColorSecondary">@color/radio_button_color2</item> 
</style> 

Quelle: https://stackoverflow.com/a/26850668/1269953

colorAccent ist die Grundfarbe für die Radio-Buttons, und textColorSecondary ist, wie es die Sekundär für sagt, wenn das Optionsfeld nicht ausgewählt ist. Wenn colorAccent in AppCompat Note mit, dass es keine android: Präfix dies der richtige Weg ist, es zu benutzen auf Versionen unter Lollipop

+0

Technisch ist dies der richtige, aber Sie können es nur durch das Thema für die gesamte Aktivität oder App zu ändern, was nicht das, was ich brauche. Ich möchte alle Farben nur im PopupMenu spezifisch ändern. – lionscribe

+0

Ich habe Ihre Antwort in der akzeptierten Lösung referenziert. Vielen Dank. – lionscribe

-1

Eine einfache Möglichkeit, Android Holo Color Thema Farbe auswählen, ON Optionsfeld Option, Download-Zip-Datei kopieren Bilder drwable und kopieren von XML-Dateien in ziehbar und sich als

here