Разбиране на разликата между атрибутите на темата и стила

Занимавам се с цветови дефиниции на Android L, за да дефинирам редовете на ListView. Имам тема, която съдържа:

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

и в моя ред дефинирах друг:

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

Ако приемем, че стойността на colorAccent ще бъде заменена. но това не важи, ако направя в моя ред:

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

въведете описание на изображението тук

Но работи, ако го направя:

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

въведете описание на изображението тук

Каква е разликата? colorAccent дефинира ли се, когато темата е приложена и не се отменя по-късно? Как да се реши това, за да има ретросъвместимост?


person Guillermo Merino    schedule 06.08.2015    source източник
comment
Прочетете chris.banes.me/2014/11/12/theme- срещу стил   -  person alanv    schedule 06.08.2015
comment
благодаря за коментара, но все още не ми е ясно защо се случва това, доколкото разбирам, стиловете се прилагат локално към изгледа, а темите към неговите наследници. Но защо това променя поведението на самия изглед, където се прилага?   -  person Guillermo Merino    schedule 07.08.2015
comment
Атрибутът android:theme се прилага към самия изглед, както и към неговите наследници. Вътрешно той създава ContextThemeWrapper и раздува изгледа и неговите наследници спрямо този контекст.   -  person alanv    schedule 07.08.2015


Отговори (1)


TextView няма свойство colorAccent. Това е тематичен имот.

person Daniel Luberda    schedule 06.08.2015
comment
Всъщност го прави, използвам ?android:attr/activatedBackgroundIndicator като атрибут за фон и проверявам stackoverflow.com/questions/15008150/ този отговор предполагам, че използва colorAccent отзад - person Guillermo Merino; 07.08.2015
comment
Но това все още е свойство на тема, а не свойство на стил. Ето защо няма да работи със стилове. Това е само функция за Android 5 и по-нова версия - person Daniel Luberda; 07.08.2015