5

Ich bin mit einem Problem konfrontiert und ich versuchte mehrere Möglichkeiten, um es zu begegnen, immer noch erfolglos.Kontext/Override Thema Farbe

Meine App verwendet mehrere Themen wie: Halloween, Chirstmas, etc und ich verwende einige Farben Attribute auf Widget wie TabLayout Hintergrund, Textfarbe, etc., um die App zu kontextualisieren.

Die Frage ist: wie verwende ich die gleichen Farben mit differentes Werte Attribute eines Themenkontext abhängig?

So ist im Grunde hier die normalen Möglichkeiten Farben zu erklären:

<color name="mapMarkerSelectedTextColor">@android:color/white</color> 
<color name="mapLoadingIndicatorColor">@color/white</color> 

Aber, Thema und Farben sind unveränderlich so dass ich dachte, vielleicht kann ich wie die Farben im Inneren jedes Thema außer Kraft setzen:

<item name="mapMarkerUnselectedTextColor">@color/christmas_red</item> 
    <item name="mapMarkerSelectedTextColor">@color/white</item> 

=> erfolglos

Andere Blei, diese Farben als Attribute deklarieren:

Und verwenden Sie Thema in meinem XML wie folgt: "?attr/mapLoadingIndicatorColor". Aber diese Funktionen sind nur erlaubt seit Lollipop Version und verursachen Abstürze vor.

Ich habe viel über Themenanpassung, Farbe überwiegendes Lesen, fand aber nie eine klare Lösung über diese Situation.

Danke trotzdem.

Antwort

1

Sie haben erwähnt, dass:

Und wie dieses Thema in meinem XML verwenden: "attr/mapLoadingIndicatorColor". Aber diese Funktion ist nur da Lollipop Version erlaubt und vor crashs verursachen.

Ich bin nicht sicher, dass ?attr/something kann nicht verwendet werden pre-Lutscher (Lollipop hat API-Ebene 21), weil ich es auf Geräten mit API-Ebene 16 in Emulator verwendet und es funktioniert gut. Ich benutzte es, wie unten die Hintergrundfarbe einer Schaltfläche zu ändern, wenn anderes Thema gewählt:

In activity_main.xml (in Layout-Ordner):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="A button" 
     style="?attr/myButton"/> 

</LinearLayout> 

In attrs.xml (in Werten Ordner):

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="myButton" format="reference"></attr> 
</resources> 

in styles.xml (in Werten Ordner):

<resources> 

<!-- default theme --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="myButton">@style/defaultButtonStyle</item> 
</style> 

<style name="defaultButtonStyle" parent="android:Widget.Button"> 
    <item name="android:background">@color/green</item> 
</style> 

<!-- custom theme --> 
<style name="AppTheme.CustomTheme"> 
    <item name="myButton">@style/customButtonStyle</item> 
</style> 

<style name="customButtonStyle" parent="android:Widget.Button"> 
    <item name="android:background">@color/blue</item> 
</style> 

</resources> 

Eigentlich bin ich immer noch qui Te neu zu Android-Programmierung, wenn Sie angeben könnten, wo Sie die Aussage gefunden haben, dass ?attr/mapLoadingIndicatorColor Abstürze Pre-Lollipop verursachen wird, wird es großartig sein! (Ich kann es nicht überall, ich weiß nur nicht elevate Attribut Pre-Lutscher verwenden)

Verwandte Themen