我下面有一个颜色资源:
<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值的属性一样。