2015-02-18 7 views
5

Ich versuche, meine appcompat-v7-Symbolleiste zu stylen, um eine andere Hintergrundfarbe für mein Überlaufmenü zu haben. Ich habe versucht, die Designs für meine App und Stile für meine Symbolleiste zu verwenden, aber ich konnte dies nicht erreichen.Stil appcompat-v7 Symbolleiste Menühintergrund

Dies ist meine Symbolleiste:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"                                
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:layout_width="match_parent" 
    app:theme="@style/AppToolbarTheme" 
    android:layout_height="wrap_content"> 

Hier ist der Stil, den ich erstellt:

<style name="AppToolbarTheme" parent="Theme.AppCompat.NoActionBar"> 
     <item name="android:textColorPrimary">@color/white</item> 
     <item name="android:textColorSecondary">@color/cian</item> 
    </style> 

Mein Hauptthema Theme.AppCompat.Light erweitert.

Weiß jemand, wie kann ich das tun? Wenn es nicht möglich ist, die Stile zu verwenden, gibt es einen anderen Weg, dies zu erreichen?

+0

prüfen diese Frage [http://Paketüberfluss.com/Fragen/26699482/Styling-the-Pop-up-Menü-in-android-5-0] [1] [1]: http://stackoverflow.com/questions/26699482/styling-the -popup-menu-in-android-5-0 – Semanticer

Antwort

32

Fügen Sie diese auf Ihre Symbolleiste Element

app:popupTheme="@style/ThemeOverlay.YourPopup" 

Dann in Ihrem styles.xml definieren das Popup-Menü Stil

<style name="ThemeOverlay.YourPopup" parent="ThemeOverlay.AppCompat.Light"> 
    <item name="android:colorBackground">@color/mtrl_white_100</item> 
    <item name="android:textColor">@color/mtrl_light_blue_900</item> 
</style> 

<style name="ThemeOverlay.YourPopup" parent="ThemeOverlay.AppCompat.Light"> 
    <item name="android:colorBackground">@color/mtrl_white_100</item> 
    <item name="android:textColorPrimary">@color/mtrl_light_blue_900</item> 
</style> 

Beachten Sie, dass Sie android:colorBackground und niemals android:background verwenden müssen. Letzteres würde auf alles angewendet werden, das keinen Hintergrund hat (hier das Menü selbst und jeden Menüpunkt), der erstere gilt nur für das Popup-Menü.

Update: Das gleiche gilt für textColorPrimary und textColor.

  • Popup-Menüelement definiert android:textColor="?android:textColorPrimary".
  • android:textColorPrimary ist ein Thema Attribut, es ist auf Themen definiert.
  • android:textColor ist ein Stil Attribut, es ist auf Widgets definiert.
  • Wenn wir android:textColor in einem Thema definiert haben, würde es auf jedes Widget angewendet werden, das sein eigenes android:textColor nicht definiert.
+0

Danke @ eugen-pechanec, es hat gut für mein Menü funktioniert! – viniciusmr3

+0

Dies hat nicht für mich funktioniert, aber [dies] (https://stackoverflow.com/questions/26554996/change-toolbar-color-in-appcompat-21) tat. – Android

+0

@Android Ich habe einen Fehler gemacht, danke für's Bemerken, jetzt sollte es funktionieren. –

1

Sie verwenden den Namespace android nicht, wenn Sie AppCompat Attribute verwenden. Ändern Sie den Code wie folgt:

<style name="AppToolbarTheme" parent="Theme.AppCompat.NoActionBar"> 
     <item name="textColorPrimary">@color/white</item> 
     <item name="textColorSecondary">@color/cian</item> 
</style> 
+0

dies funktionierte für die farbe meiner symbole auf der toolbar. Vielen Dank! – viniciusmr3

+0

Keine Ressource gefunden, die dem angegebenen Namen entspricht: attr 'textColorPrimary'. – dr4cul4

+0

@ dr4cul4 Finden Sie wie folgt ' @ farbe/weiß' –

0

Fügen Sie diese auf Ihre Symbolleiste in Ihrer activity.xml-Datei: -

app:popupTheme="@style/ThemeOverlay.YourApp" 

Und dann in Ihrem styles.xml Fügen Sie diese: -

<style name="ThemeOverlay.YourApp" parent="ThemeOverlay.AppCompat.Light"> 
     <item name="android:colorBackground">@android:color/darker_gray</item> 
     <item name="android:textColorPrimary">@color/TextColorPrimary</item> 
    </style> 
Verwandte Themen