Понимание разницы между атрибутами темы и стиля

Я имею дело с определениями цвета 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