在XML中声明透明度不同的原色,而没有显式声明每个颜色资源



我下面有一个颜色资源:

<color name="colorPrimary">#546e7a</color>

我想将这个颜色资源设置为我自定义主题的许多文本类型的颜色。然而,对于每个主题,我可能想要更改颜色资源的透明度值(即rgba中的a(。如果可能的话,我确实想重新定义一个新的颜色资源,如下所示(只是因为我可能使用了很多不同的透明度值(:

<color name="colorPrimary12Percent">#1FD81B60</color>

在给定颜色资源和透明度值(例如rgba(colorResourceValue, transparencyValue)(的情况下,XML中是否有某种函数可以更改颜色资源值的透明度?我想用上述函数做什么的一个例子:

<style name="SomeNewStyle" parent="InheritFromThis">
<item name="android:textColor">rgba(@color/colorPrimary, 12%)</item> <!-- This is what I want -->
</style>

尝试ColorStateList。你可以在Android样式中找到一个有用的描述:首选主题属性。

ColorStateList可以按主题/样式组合文本颜色和alpha值,如下所示:

定义一个将保存alpha值的自定义属性:

<resources>
<declare-styleable name="MyAttrs">
<attr name="textAlpha" format="float" />
</declare-styleable>
</resources>

定义ColorStateList

<selector>
<item android:alpha="?attr/textAlpha" android:color="?attr/colorPrimary" />
</selector>

把所有的风格放在一起:

<style name="AppTheme">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="textAlpha">0.5</item>
<item name="android:textColor">@drawable/color_state_list_example</item>
</style>

如果要按样式更改颜色而不使用colorPrimary,则可以定义一个附加属性来保持颜色,就像alpha值的属性一样。

最新更新