如何从drawable引用style

我的标签应用程序有两个主题。 在每个主题标签中select和未select状态下都有不同的图像。 如何正确引用图像的主题?

例如。 我有在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" /> 

如何根据当前主题在select器中引用所需的图像? 这不适合我

 <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引用样式

Solutions Collecting From Web of "如何从drawable引用style"

build立你的风格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"

你可以在这里find你的答案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 – 来自我们inheritance的主题。 无论主题定义为被activatedBackgroundIndicator的背景activatedBackgroundIndicator是我们的背景应该是什么。