2015-08-06 22 views
6

Ich habe es mit Android L Farbdefinitionen zu tun, um die Zeilen eines ListView zu definieren. Ich habe ein Thema, das hat:Den Unterschied zwischen Design- und Stilattributen verstehen

<item name="colorAccent">@color/color_blue_dark</item> 

und in meiner Reihe habe ich ein anderes definiert:

<style name="DefaultRow"> 
    <item name="colorAccent">@color/color_sand</item> 
    <item name="android:background">?android:attr/activatedBackgroundIndicator</item> 
</style> 

Unter der Annahme, dass colorAccent Wert außer Kraft gesetzt wird. aber das bedeutet nicht, ob ich in meiner Reihe tun:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      ... 
      style="@style/DefaultRow"/> 

enter image description here

Aber es funktioniert, wenn ich tun:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
       ... 
       android:theme="@style/DefaultRow"/> 

enter image description here

Was ist der Unterschied? ist colorAccent definiert, wenn das Thema angewendet wird und nicht später überschrieben? Wie löst man das, um Retrokompatibilität zu haben?

+2

Lesen https://chris.banes.me/2014/11/12/theme-vs-style/ – alanv

+0

danke für den Kommentar, aber ich bin immer noch nicht klar darüber, warum das passiert, soweit ich verstehe Stile werden lokal auf die Ansicht und Themen auf ihre Nachkommen angewendet. Aber warum ändert sich das Verhalten in der Ansicht selbst, wo es angewendet wird? –

+1

Das Attribut "android: theme" wird sowohl auf die Ansicht selbst als auch auf ihre Nachkommen angewendet. Intern erstellt es einen "ContextThemeWrapper" und bläht die Ansicht und ihre Nachkommen gegen diesen Kontext auf. – alanv

Antwort

0

TextView hat keine colorAccent Eigenschaft. Es ist eine Themeneigenschaft.

+0

Eigentlich, ich benutze? Android: attr/activatedBackgroundIndicator als Attribut für den Hintergrund und die Überprüfung http://StackOverflow.com/Questions/15008150/how-does-androidattr-activatedbackgroundindicator-work diese Antwort nehme ich an es ist mit colorAccent in der Rückseite –

+0

Aber es ist immer noch eine Thema-Eigenschaft, nicht Stil-Eigenschaft. Aus diesem Grund wird es nicht mit Stilen funktionieren. Es ist Android 5 und höher nur Feature –

Verwandte Themen