2016-04-21 20 views
1

Ich habe mit PopupMenu Styling gekämpft, und nach viel Forschung, der Prozess der Erstellung eines benutzerdefinierten PopupMenu Stil für mein Thema schien ziemlich geradlinig. Zum Beispiel scheint die Antwort auf this question wie eine einfache Möglichkeit, die Hintergrundfarbe eines PopupMenu zu ändern. Keine dieser Lösungen hat jedoch für mein Projekt funktioniert. Also fing ich an, in die Stilquellen zu graben, um herauszufinden, was ich eigentlich erben sollte, um das PopupMenu in meinem eigenen Projekt zu stylen.Benutzerdefinierte PopupMenu Stile werden ignoriert

Ich bin mit meinen Tests auf einem Mobilteil API läuft 19 und meine Basis Thema sieht wie folgt aus:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- ... --> 
    <item name="android:popupMenuStyle">@style/CustomPopupMenu</item> 
</style> 

<style name="CustomPopupMenu" parent="@style/Widget.AppCompat.Light.PopupMenu"> 
    <item name="android:popupBackground">@color/retina_burning_hot_pink</item> 
</style> 

Dies ist die Lösung, die hier die meisten der akzeptierten Antworten zeigen. Aber das style mein PopupMenu nicht. Also habe ich mich in die Quellen vertieft, um die Genetik meines Themas zu finden und zu sehen, welche Standardeinstellungen verwendet werden. Dies ist, was ich gefunden habe:

<style name="Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light.DarkActionBar"/> 
<style name="Base.Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light"> 
<style name="Base.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light"/> 

Und dann in Base.V7.Theme.AppCompat.Light fand ich diese Standardeinstellungen:

<!-- Popup Menu styles --> 
<item name="popupMenuStyle">@style/Widget.AppCompat.Light.PopupMenu</item> 
<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item> 
<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item> 
<item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindow</item> 
<item name="dropDownListViewStyle">?android:attr/dropDownListViewStyle</item> 

So soweit ich das beurteilen kann, mein Thema von Theme.AppCompat.Light.DarkActionBar erbt, die einen Standard-PopupMenu Stil verwendet von @style/Widget.AppCompat.Light.PopupMenu. Ich erben dann diesen Stil, um meine eigenen PopupMenu-Einstellungen festzulegen. Ich habe sichergestellt, dass meine Aktivität und meine Anwendung das richtige Thema verwenden. Ich bin mir nicht sicher, warum das sonst nicht funktioniert. Ich habe auch diese Einstellungen versucht:

Ich habe benutzerdefinierte Stile für jede, und keiner von ihnen arbeitete. Was könnte alle meine benutzerdefinierten Stile überschreiben? Jede Hilfe würde geschätzt werden, weil ich ratlos bin.


EDITS

Hier ist mein Manifest ...

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.blah.blah"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".Activities.MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Hier ist AppTheme.NoActionBar

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 
+0

werden Sie das Thema im Manifest Einstellung? – Sree

+0

@Sree - Ja, wie in der Frage angegeben. – NoChinDeluxe

+0

Können wir den Code sehen (Sie tun es wahrscheinlich richtig, aber nur um sicher zu gehen) – Sree

Antwort

0

Ich glaube, Sie ein Elternteil für AppCompat.NoActionBar definieren müssen. Versuchen Sie parent="Theme.AppCompat.Light.NoActionBar" und fügen Sie auch <item name="android:popupMenuStyle">@style/CustomPopupMenu</item> hinzu.

+0

Ich habe das schon ausprobiert und es machte keinen Unterschied. Ich habe versucht, 'AppTheme' zu ​​dem Elternteil zu machen, und jetzt habe ich einfach Ihren Vorschlag versucht und es ändert einige Farben der Dinge, aber das PopupMenu bleibt unverändert. – NoChinDeluxe

+0

Hmm .. das sollte funktionieren.Kann ich die Änderungen sehen, die Sie mit meinen Vorschlägen gemacht haben? – Sree

+0

Ich habe es so geändert, wie Sie es vorgeschlagen haben. Ich habe die obere Zeile '