如何从drawable引用到样式

时间:2011-09-23 13:19:15

标签: android image reference themes styles

带有标签的我的应用有两个主题。在每个主题中,选项卡具有处​​于选定和未选定状态的不同图像。我如何通过主题正确引用图像?

例如。我有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 个答案:

答案 0 :(得分:5)

建立你的风格A和风格B

在你的情况下你放android:drawable="@drawable/ic_tab_shows_selected_light"而不是背景(我只是从我的代码中复制了snipets)                  #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"

答案 1 :(得分:2)

你可以在这里找到答案 http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

修改
(Lukap在评论中提供的补充信息)

  1. themes.xml中定义一个或多个主题,并在那里设置样式的定义。
  2. attrs.xml中定义自定义属性,即自定义样式。
  3. 描述styles.xml中自定义样式的值。
  4. 但您需要详细了解attrs.xml

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

    相反,我们指的是其他属性的值 - activatedBackgroundIndicator - 来自我们继承的主题。无论主题定义为activatedBackgroundIndicator是我们的背景应该是什么。