android主题 - 定义自定义主题中的颜色

时间:2012-10-03 07:26:58

标签: android android-theme

我确信有一个简单的答案,但我无法找到它所以我把它扔进stackoverflow ...; - )

我将把它作为一个例子。我有一个Android应用程序,用户可以在首选项中选择主题 - 深色或浅色主题。根据所选主题,我必须在我的应用程序中调整20种颜色。所以我希望我可以在主题中定义颜色,然后在我的TextViews等中使用这些如此定义的颜色的名称。但到目前为止,我无法弄清楚如何做到这一点,在这里和那里找不到任何解决方案。我真的不想为这20种颜色中的每种颜色定义一种额外的暗色和浅色样式,但到目前为止这似乎是我能找到的唯一解决方案。

非常感谢任何提示

马丁:

更新

在伪语法中,这就是我要找的东西。有可能吗?

<style name="AppTheme.MyDark" parent="android:Theme">
  -?-> titleColor = "#ffffff"
  -?-> introColor = "#ffaaaa"  
</style>

<style name="AppTheme.MyLight" parent="android:Theme.Light">
  -?-> titleColor = "#000000"
  -?-> introColor = "#004444"  
</style>


<TextView
        android:id="@+id/quoteTitle"
        android:textColor=@titleColor
        ...
</TextView>

<TextView
        android:id="@+id/quoteIntro"
        android:textColor=@introColor
        ...
</TextView>

1 个答案:

答案 0 :(得分:59)

我找到了一个似乎有用的解决方案。首先,您需要在attr.xml中定义自定义颜色字段

<?xml version="1.0" encoding="utf-8"?>
<resources>

<attr name="titleColor" format="reference|color" />
<attr name="introColor" format="reference|color" />

</resources>

接下来,您可以定义主题

<style name="AppTheme.MyDark" parent="android:Theme">
   <item name="titleColor">#FFFFFF</item>
   <item name="introColor">#FFFFFF</item>
</style>


<style name="AppTheme.MyLight" parent="android:Theme">
   <item name="titleColor">#000000</item>
   <item name="introColor">#004444</item>
</style>

最后在你的布局中

<TextView
    android:id="@+id/quoteTitle"
    android:textColor="?titleColor"
    ...
</TextView>

<TextView
    android:id="@+id/quoteIntro"
    android:textColor="?introColor"
    ...
</TextView>

我发现解决方案主要是here

在官方的android文档中似乎没有关于使用属性的解释。我找到的最佳资源是here