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"/>
Aber es funktioniert, wenn ich tun:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
...
android:theme="@style/DefaultRow"/>
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?
Lesen https://chris.banes.me/2014/11/12/theme-vs-style/ – alanv
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? –
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