假设我在我的App中定义了两个主题:AppTheme.Blue和AppTheme.Green,并且相应地,我想要设置颜色,因此可以根据两个不同的主题来应用它。

例如,当我在ContextCompat.getColor(context, R.color.color_primary);下调用AppTheme.Green时,它将返回绿色作为?attr/colorPrimary,但是在AppTheme.Blue下返回蓝色,因此小部件将始终与标题栏具有相同的颜色。

如何定义这两种颜色,系统会根据当前采用的主题动态选择它吗?

最佳答案

据我了解,您正在谈论使用多个主题。这是您提出问题的方案。

在styles.xml中定义两个主题

主题蓝:

 <style name="AppTheme.Blue" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primaryColor_blue</item>
        <item name="colorPrimaryDark">@color/primaryColorDark_blue</item>
        <item name="colorAccent">@color/primaryAccent_blue</item>
        <item name="backgroundColor">@color/primaryColorDark_blue</item>
    </style>


主题绿色:

<style name="AppTheme.Green" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primaryColor_green</item>
    <item name="colorPrimaryDark">@color/primaryColorDark_green</item>
    <item name="colorAccent">@color/primaryAccent_green</item>
    <item name="backgroundColor">@color/primaryColorDark_green</item>
</style>


相应地在color.xml中定义所有颜色

添加以下代码以获取所选主题的原色并将其设置为小部件。

TypedValue typedValue = new TypedValue();
Resources.Theme theme = this.getTheme();
theme.resolveAttribute(android.R.attr.textColorPrimary, typedValue, true);
TypedArray arr =
        this.obtainStyledAttributes(typedValue.data, new int[]{
                android.R.attr.colorPrimary});
int primaryColor = arr.getColor(0, -1);
yourTextView.setTextColor(primaryColor);  //ex
arr.recycle();


如果您选择的主题是蓝色,则文本颜色也将是蓝色。希望这足够了。

关于android - Android多color.xml选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42483730/

10-12 01:18