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

Save color values in theme variables and reference them in activity xml?

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

类似于:

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

然后在 activity xml:

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

所以当主题改变时,活动中的颜色也会改变。

如何做到这一点?

您可以定义自己的属性。大多数人在 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" />