我在一个应用程序中处理不同的主题。例如,我有一个登录屏幕,对于所有的主题,我想设置不同的背景和文本颜色。
我正在从color.xml中获取颜色。因此,我可能应该用相同的键和不同的颜色代码为所有主题定义背景和文本颜色。
*Theme 1
*Theme 2
*Theme 3
并且只有1个color.xml文件带有
<color name="background">#000000</color>
<color name="textcolor">#FFFFFF</color>
现在我想对所有的主题使用不同的颜色代码。这怎么可能呢。。
知道吗???
这个问题可以通过以下方法解决。首先创建一个attrs.xml文件,在其中定义颜色标识符。比如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="myColor" format="color" />
</resources>
然后创建一个base_theme.xml文件,其中不定义颜色,而是定义属性。就像这样:
<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">?attr/myColor</item>
</style>
最后,你通过扩展基本主题并定义你的特定颜色来创建每个主题,像这样:
<style name="Theme1" parent="BaseTheme">
<item name="myColor">#123456</item>
</style>
值得一提的是,每个主题都可以在单独的文件中。因此,我们可以为每个主题提供不同的颜色。基本上,现在你可以在每个主题中定义你的颜色