在主题变量中保存颜色值并在活动xml中引用它们?

时间:2015-01-03 23:17:12

标签: android xml styles

我想提供不同的应用主题供我的用户选择。每个主题都有两个变量Color1和Color2,我的想法是在活动xml中引用这些颜色。

类似的东西:

<style name="Theme.LightTheme" parent="Theme.General">
    <item name="android:color1">#000000</item>
    <item name="android:color2">#ffffff</item>
</style>

然后在xml:

活动中
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="?android:color1"
        android:background="?android:color2" />

因此,当主题被更改时,活动中的颜色会发生变化。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以定义自己的属性。大多数人都在res/values/attrs.xml中执行此操作:

<resources>
    <attr name="color1" format="color" />
    <attr name="color1" format="color" />
</resources>

然后在你的风格中,你可以参考你创建的属性(注意那里没有android:前缀):

<style name="Theme.LightTheme" parent="Theme.General">
    <item name="color1">#000000</item>
    <item name="color2">#ffffff</item>
</style>

现在在你的布局XML文件中,你引用当前主题的属性值(再次注意缺少android:前缀):

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="?attr/color1"
    android:background="?attr/color2" />