android - 所选小部件的主题相关颜色

标签 android android-layout android-ui android-theme

我很确定这个问题已经在某个地方得到了回答。这似乎太常见了。但我找不到答案。我也想不出解决办法。

问题来了:

我希望我的 TableRow 之一具有不同的背景颜色。很简单,我只需要添加

android:background="#123456" 

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

<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 创建我自己的小部件并为其声明一个单独的样式 - 我认为这应该可行,但它是对于这么简单的问题,解决方案太重了。

最佳答案

您可以使用属性来做到这一点。首先在 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 作为 View 的背景:

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>

就是这样!

关于android - 所选小部件的主题相关颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630694/

相关文章:

java - 是否可以在 Swing 应用程序中使用 android UI 组件?

android - 如何在 Android 上为 USB 传感器使用 Linux C++ 驱动程序?

android - 使用 Android 检测人的跌倒

android - 为空间小部件着色

android - "android:theme"属性忽略重力

java - 将 uiautomator 测试用例与 Android 中的应用程序代码集成

android - 如何创建数字选择器对话框?

android - 如何在Fragment中使用SupportMapFragment?

Android:如何在将项目拖动到边缘时自动垂直滚动 GridView

Android 无法显示 ProgressDialog