Ho a che fare con le definizioni di colore di Android L per definire le righe di un ListView. Ho un tema che ha:Comprendere la differenza tra gli attributi del tema e dello stile
<item name="colorAccent">@color/color_blue_dark</item>
e nella mia fila ho definito un altro:
<style name="DefaultRow">
<item name="colorAccent">@color/color_sand</item>
<item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>
Partendo dal presupposto che il valore colorAccent verrà sovrascritto. Ma questo non se lo faccio nel mio consecutive:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
...
style="@style/DefaultRow"/>
ma funziona se faccio:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
...
android:theme="@style/DefaultRow"/>
Qual è la differenza? è colorAccent
definito quando il tema viene applicato e non sostituito più tardi? Come risolvere questo per avere retrocompatibilità?
Leggi https://chris.banes.me/2014/11/12/theme-vs-style/ – alanv
grazie per il commento, ma non sono ancora chiaro sul perché questo accada, per quanto ho capito , gli stili sono applicati localmente alla vista e ai temi dei suoi discendenti. Ma perché questo cambia il comportamento sulla vista stessa in cui viene applicato? –
L'attributo 'android: theme' viene applicato alla vista stessa e ai suoi discendenti. Internamente, crea un 'ContextThemeWrapper' e gonfia la vista e i suoi discendenti rispetto a quel contesto. – alanv