2011-09-23 3 views
8

Мое приложение с вкладками имеет две темы. На вкладках каждой темы разные изображения в выбранном и невыбранном состоянии. Как я могу правильно ссылаться на изображение по теме?Как ссылаться из рисунка на стиль

Например. У меня в 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> 

Также у меня есть tab_shows.xml и 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" /> 

Как можно ссылаться на необходимое изображение, в соответствии с селектором текущая тема? Это не работает для меня

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

В файлах верстки это работает, я имею в виду ссылку на стиль с помощью? StyleName

+0

Получил тот же вопрос здесь: http://stackoverflow.com/q/12115125/317889 – HGPB

+0

я делаю что-то подобное ЗДЕСЬ !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

ответ

2

Вы можете найти ответ на свой вопрос здесь http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

Редактировать
(Дополнительная информация Lukap в комментариях)

  1. Определите одну или несколько тем в themes.xml и задайте определения ваших стилей.
  2. Определите пользовательские атрибуты, пользовательские стили a.k.a., в attrs.xml.
  3. Опишите, что значения ваших пользовательских стилей находятся в styles.xml.

Но вам нужно будет узнать больше о attrs.xml

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

Вместо этого, мы имеем в виду значения какого-либо другого атрибута - activatedBackgroundIndicator - от унаследованной нами темы. Независимо от того, что определяет тема как activatedBackgroundIndicator, это то, что должно быть нашим фоном.

+0

очень хороший учебник – Lukap

+1

Спасибо. Были ли темы моего приложения в этом учебнике. Однако у меня нет ответа на мой вопрос. –

+0

thre - ответ в строках 1. Определите одну или несколько тем в topic.xml и определите определения своих стилей. 2. Определите пользовательские атрибуты, пользовательские стили a.k.a., в attrs.xml. 3. Опишите, какие значения ваших пользовательских стилей находятся в styles.xml. но вам нужно больше узнать о attrs.xml – Lukap

5

Создайте свой стиль A и стиль B

в вашем случае вы положили android:drawable="@drawable/ic_tab_shows_selected_light" вместо фона (я просто скопировал snipets из моего кода) # 000

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

ваша тема А

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

тема B

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

в вашем attr.XML

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

наконец, в виджете вы style="?pageBackground"

+0

ПРИМЕЧАНИЕ В вашем случае вместо фона вы устанавливаете android: drawable = "@ drawable/ic_tab_shows_selected_light" ... и т. Д., Но это способ сделать это – Lukap

+0

Спасибо, я постараюсь сделать это. –

+1

Хм. Несколько стилей это хорошо, я понял. Но я не понимаю, как применить этот подход к выделенному файлу выбора. Я создаю вкладку и передаю ей drawable resourceId (файл селектора). Как я могу установить правильное изображение (по теме) в этом селекторе. Ссылки, такие как? StyleNameToOtherDrawable, не работают. Также не работает из кода spec.setIndicator (res.getDrawable (R.attr.tabShows)); –

Смежные вопросы