主题相关的选定小部件的颜色

我很确定这个问题已经在某个地方回答了。 这似乎太常见了。 但我找不到答案。 我也无法弄清楚解决scheme。

这是问题:

我想我的一个TableRow具有不同的背景颜色。 这很简单,我只需要添加

android:background="#123456" 

在TableRow的XML声明中。 但是,我也希望我的应用程序有两个主题。 在另一个主题中,TableRow应该有不同的背景颜色。 我只是找不到一种方法来定义一个主题内的颜色值并使用它。 我想input这样的东西:

 <style name="Theme.MyApp" parent="@style/Theme.Light"> <color "my_cool_color">#123456</color> </style> <style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> <color "my_cool_color">#654321</color> </style> 

而且,在TableRow的声明中:

 android:background="@color/my_cool_color" 

所以,当我改变主题时,那个TableRow背景的颜色也会改变。 我已经在很多方面尝试了很多个小时,并没有成功……有一件事我没有尝试,是基于TableRow创build自己的小部件,并为其声明了一个单独的样式 – 我认为这应该工作,但它是解决这么简单的问题太重了。

Solutions Collecting From Web of "主题相关的选定小部件的颜色"

你可以使用属性来做到这一点。 首先在attrs.xml定义你的属性(这个文件在'values'文件夹下):

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

然后在styles.xml为每个主题定义myCoolColor

 <style name="Theme.MyApp" parent="@style/Theme.Light"> <item name="myCoolColor">#123456</item> </style> <style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> <item name="myCoolColor">#654321</item> </style> 

现在,指定myCoolColor作为你的视图的背景:

 android:background="?myCoolColor" 

你可以进一步去使用一个颜色的引用,这样你就可以将你的颜色定义在一个地方。 更改属性以包含参考(注意,我们可以使用颜色或参考):

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

改变你的styles.xml来引用每个主题的颜色:

 <style name="Theme.MyApp" parent="@style/Theme.Light"> <item name="myCoolColor">@color/blue</item> </style> <style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> <item name="myCoolColor">@color/green</item> </style> 

最后定义colors.xml的颜色:

 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="blue">#0000FF</color> <color name="green">#00FF00</color> </resources> 

而已!