假设我在我的应用程序中定义了两个主题:AppTheme.Blue和AppTheme.Green,相应地,我希望有一组颜色,因此我可以根据两个不同的主题应用它。
例如,当我在ContextCompat.getColor(context, R.color.color_primary);
下面调用AppTheme.Green
时,它将返回绿色?attr/colorPrimary
,但如果在AppTheme.Blue
下则返回蓝色,因此小部件将始终为与标题栏颜色相同。
如何定义这两组颜色,系统会根据当前采用的主题动态选择它?
答案 0 :(得分:1)
据我所知,你在谈论使用多个主题。这是您的问题的一个场景。
在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();
如果您选择的主题是蓝色,那么文本颜色也将是蓝色。希望这足够了。