Как ссылаться от рисования до стиля - PullRequest
8 голосов
/ 23 сентября 2011

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

Например. Я имею в 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

Ответы [ 2 ]

5 голосов
/ 23 сентября 2011

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

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

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

ваша тема A

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

2 голосов
/ 23 сентября 2011

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

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

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

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

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

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

...