引用具有修改后的 alpha 的颜色资源

Referencing a color resource with modified alpha

有没有办法在 xml 资源文件中引用具有修改后的 alpha 值的颜色资源?我正在寻找的是这样的东西:

<!-- base color -->
<color name="myColor">#19AEE0</color>
<!-- redefined color with alpha - not particularly elegant -->
<color name="myColor2">#8019AEE0</color>
<!-- referenced color with alpha -->
<color name="myColorTransparent" alpha="0.5">@color/myColor</color>

我知道这可以通过编程方式轻松完成,但是在为相同颜色定义多个透明度值时,以声明方式进行会更清晰、更易读。

经过一番搜索将颜色重音设置为波纹可绘制对象的颜色后,我发现可以借助 <selector>.

来完成

添加 color 资源文件夹(如果不存在)并在其中创建一个新文件,其基本名称将用作颜色资源。例如,将其命名为 my_color_transparent.xml。然后,粘贴以下内容。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:color="@color/myColor"
        android:alpha=".5" />
</selector>

此时,您可以通过 XML 或像往常一样以编程方式将其引用为 @color/my_color_transparent,例如 values 文件夹中的颜色。

注意: android:alpha 属性用作遮罩,因此 alpha 乘以通过 android:color 属性指定的颜色。例如,如果 @color/myColor 的不透明度为 20%,而 android:alpha 的不透明度为 .5,则 @color/my_color_transparent 的不透明度将为 10%。