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

  • 如何在android中使用xml文件实现这种types的Progressbar
  • 在Android 5中工作的button样式,但不是Android 4
  • windowBackground和活动风格的背景有什么区别?
  • 如何更改默认禁用EditText的样式?
  • 使用父母绘制资源
  • 在主题级别的RecyclerView造型
  • Android - 默认button样式
  • 根据主题更改可绘制
  • 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是我们的背景应该是什么。