5

Mam do czynienia z problemem i próbowałem na kilka sposobów, aby stawić mu czoła, wciąż nieskuteczne.Kolor tła kontekstowego/przesłaniania

Moja aplikacja wykorzystuje wiele tematów, takich jak: Halloween, Chirstmas, itp. I używam niektórych atrybutów kolorów na widżecie, takim jak tło TabLayout, Kolor tekstu itp., Aby kontekstualizować aplikację.

Pytanie brzmi: Jak używać tych samych atrybutów kolorów z różnymi wartościami w zależności od kontekstu kompozycji?

Więc w zasadzie tu jest normalne sposoby zadeklarować kolory:

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

Ale motyw i kolory są niezmienne więc pomyślałem, może zastąpić te kolory wewnątrz każdego z tematów takich jak:

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

=> nieudana

Inne ołów, zadeklarować te kolory jako atrybuty:

<attr name="mapLoadingIndicatorColor" format="reference|color" /> 
<attr name="map_autocomplete_accent_color" format="reference|color" /> 

I użyj motywu w moim XML w ten sposób: "?attr/mapLoadingIndicatorColor". Ale ta funkcja jest dozwolona tylko od wersji Lollipop i powoduje awarie wcześniej.

Wiele czytałem na temat dostosowywania kompozycji, nadpisywania kolorów, ale nigdy nie znalazłem jednoznacznego rozwiązania tej sytuacji.

Dzięki i tak.

Odpowiedz

1

Wspomniałeś, że:

I użyć motywu w moim XML jak poniżej: "attr/mapLoadingIndicatorColor". Ale ta funkcja jest dostępna tylko od wersji Lollipop i powoduje awarię .

nie jestem pewien, że ?attr/something nie mogą być stosowane wstępnie Lollipop (Lizak ma poziom API 21), ponieważ użyłem go na urządzeniach z poziomu API 16 w emulatorze i działa dobrze. Używałem go jak poniżej, aby zmienić kolor tła przycisku, gdy zostanie wybrany inny motyw:

W activity_main.xml (w folderze układu):

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

W attrs.xml (w folderze wartości):

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

w styles.xml (w wartościach folder):

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

Faktycznie, jestem nadal qui jesteś nowy w programowaniu Androida, jeśli możesz określić, gdzie znalazłeś stwierdzenie, że ?attr/mapLoadingIndicatorColor spowoduje awarie pre-Lollipop, będzie świetnie! (Nie mogę go nigdzie znaleźć, wiem tylko, że nie możesz użyć atrybutu podniesienia pre-Lollipop)