2015-08-06 15 views
6

Tôi đang xử lý các định nghĩa màu của Android L để xác định các hàng của một ListView. Tôi có một chủ đề trong đó có:Hiểu sự khác biệt giữa thuộc tính chủ đề và kiểu dáng

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

và trong hàng của tôi, tôi đã xác định một khác:

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

Giả sử rằng giá trị colorAccent sẽ được ghi đè. nhưng điều đó không nếu tôi làm trong hàng của tôi:

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

enter image description here

Nhưng nó hoạt động nếu tôi làm:

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

enter image description here

sự khác biệt là gì? là colorAccent đang được xác định khi chủ đề được áp dụng và không được ghi đè sau? Làm thế nào để giải quyết điều này để có khả năng tương thích?

+2

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

+0

cảm ơn nhận xét, nhưng tôi vẫn chưa rõ tại sao điều này lại xảy ra, theo như tôi hiểu , kiểu được áp dụng cục bộ cho chế độ xem và chủ đề cho con cháu của nó. Nhưng tại sao điều này lại thay đổi hành vi trên chính chế độ xem khi nó đang được áp dụng? –

+1

Thuộc tính 'android: theme' được áp dụng cho chính chế độ xem cũng như con cháu của nó. Bên trong, nó tạo ra một 'ContextThemeWrapper' và thổi phồng khung nhìn và con cháu của nó dựa vào ngữ cảnh đó. – alanv

Trả lời

0

TextView không có thuộc tính colorAccent. Nó là một tài sản chủ đề.

+0

Thực ra, tôi đang sử dụng? Android: attr/activatedBackgroundIndicator làm thuộc tính cho nền và kiểm tra http://stackoverflow.com/questions/15008150/how-does-androidattr-activatedbackgroundindicator-work câu trả lời này tôi giả định rằng nó sử dụng colorAccent ở mặt sau –

+0

Nhưng nó vẫn là một thuộc tính theme, không phải thuộc tính style. Đây là lý do tại sao nó sẽ không làm việc với phong cách. Đó là tính năng chỉ dành cho Android 5 trở lên –

Các vấn đề liên quan