2011-09-23 20 views
8

Ứng dụng của tôi có tab có hai chủ đề. Trong mỗi tab chủ đề có hình ảnh khác nhau ở trạng thái đã chọn và không được chọn. Làm thế nào tôi có thể tham khảo đúng cách hình ảnh theo chủ đề?Cách tham chiếu từ drawable to style

Ví dụ: Tôi có trong themes.xml

<?xml version="1.0" encoding="utf-8"?> 

<style name="LightTheme" parent="@android:style/Theme.Light"> 
    <item name="tabShows">@drawable/ic_tab_shows_unselected_light</item> 
    <item name="tabShowsSelected">@drawable/ic_tab_shows_selected_light</item> 
    <item name="tabNews">@drawable/ic_tab_news_selected_light</item> 
    <item name="tabNewsSelected">@drawable/ic_tab_news_unselected_light</item> 
</style> 

<style name="DarkTheme" parent="@android:style/Theme.Black"> 
    <item name="tabShows">@drawable/ic_tab_shows_unselected_dark</item> 
    <item name="tabShowsSelected">@drawable/ic_tab_shows_selected_dark</item> 
    <item name="tabNews">@drawable/ic_tab_news_selected_dark</item> 
    <item name="tabNewsSelected">@drawable/ic_tab_news_unselected_dark</item> 
    </style> 

Ngoài ra tôi có một tab_shows.xml và tab_news.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true" android:drawable="@drawable/ic_tab_shows_selected_light"/> 
<item android:state_selected="false" android:drawable="@drawable/ic_tab_shows_unselected_light" /> 

Làm thế nào tôi có thể tham khảo hình ảnh cần thiết trong bộ chọn theo chủ đề hiện tại? này không làm việc cho tôi

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true" android:drawable="?tabShowsSelected"/> 
<item android:state_selected="false" android:drawable="?tabShows" /> 

Trong file bố trí làm việc này, tôi có nghĩa là tài liệu tham khảo phong cách qua? StyleName

+0

Got cùng một vấn đề ở đây: http://stackoverflow.com/q/12115125/317889 – HGPB

+0

Tôi đang làm một cái gì đó tương tự ĐÂY !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

Trả lời

2

Bạn có thể tìm thấy câu trả lời của bạn ở đây http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

Sửa
(Thông tin thêm bởi Lukap trong ý kiến)

  1. Xác định một hoặc nhiều chủ đề trong themes.xml và đặt định nghĩa kiểu của bạn tại đó.
  2. Xác định thuộc tính tùy chỉnh, kiểu tùy chỉnh a.k.a., trong attrs.xml.
  3. Mô tả giá trị của kiểu tùy chỉnh của bạn là styles.xml.

Nhưng bạn sẽ cần phải đọc thêm về attrs.xml

<item name="android:background">? android:attr/activatedBackgroundIndicator</item> 
</style> 

Thay vào đó, chúng ta đang đề cập đến giá trị của một số thuộc tính khác - activatedBackgroundIndicator - từ diện được kế thừa của chúng tôi. Bất kể chủ đề nào được định nghĩa là activatedBackgroundIndicator là nền tảng của chúng ta.

+0

nó là hướng dẫn rất đẹp – Lukap

+1

Cảm ơn. Chủ đề ứng dụng của tôi có được hướng dẫn này không. Tuy nhiên nó không có câu trả lời cho câu hỏi của tôi. –

+0

thre là câu trả lời trong các dòng 1. Xác định một hoặc nhiều chủ đề trong themes.xml và thiết lập các định nghĩa về phong cách của bạn ở đó. 2. Xác định thuộc tính tùy chỉnh, kiểu tùy chỉnh a.k.a., trong attrs.xml. 3. Mô tả giá trị của các kiểu tùy chỉnh của bạn trong styles.xml. nhưng bạn sẽ cần đọc thêm về attrs.xml – Lukap

5

Build của bạn phong cách A và phong cách B

trong trường hợp của bạn, bạn đặt android:drawable="@drawable/ic_tab_shows_selected_light" thay vì nền (Tôi chỉ cần sao chép snipets từ mã của tôi) # 000

<style name="styleB"> 
     <item name="android:background">#000</item> 
    </style> 

chủ đề của bạn Một

<style name="Theme.A"> 
     <item name="pageBackground">@style/styleA</item> 
    </style> 

chủ đề B

<style name="Theme.Blue"> 
     <item name="pageBackground">@style/styleB</item> 
    </style> 

trong attr của bạn.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="pageBackground" format="reference" /> 
</resources> 

cuối cùng trong widget của bạn, bạn làm style="?pageBackground"

+0

LƯU Ý trong trường hợp của bạn thay vì nền bạn đặt android: drawable = "@ drawable/ic_tab_shows_selected_light" ... vâng, nhưng đây là cách để làm điều đó – Lukap

+0

Cảm ơn, tôi sẽ cố gắng làm điều này. –

+1

Hmm. Nhiều phong cách này là tốt, tôi đã nhận nó. Nhưng tôi không hiểu làm thế nào để áp dụng phương pháp này để chọn tập tin drawable. Tôi tạo tab và chuyển đến nó resourceId drawable (selector file) Làm thế nào tôi có thể thiết lập hình ảnh bên phải (theo chủ đề) trong bộ chọn này. Các tham chiếu như styleNameToOtherDrawable không hoạt động. Cũng không làm việc từ mã spec.setIndicator (res.getDrawable (R.attr.tabShows)); –

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