2015-08-06 12 views
6

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

enter image description here

ma funziona se faccio:

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

enter image description here

Qual è la differenza? è colorAccent definito quando il tema viene applicato e non sostituito più tardi? Come risolvere questo per avere retrocompatibilità?

+2

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

+0

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

+1

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

risposta

0

TextView non ha una proprietà colorAccent. È una proprietà a tema.

+0

In realtà, lo è, sto usando? Android: attr/activatedBackgroundIndicator come attributo per lo sfondo e controllo http://stackoverflow.com/questions/15008150/how-does-androidattr-activatedbackgroundindicator-work questa risposta presumo che sta usando colorAccent nella parte posteriore –

+0

Ma è ancora una proprietà a tema, non una proprietà di stile. Questo è il motivo per cui non funzionerà con gli stili. È solo Android 5 e versioni successive –

Problemi correlati