如何在颜色资源上设置不透明度?

3

我知道可以通过在十六进制代码中添加alpha通道(#AARRGGBB)来设置不透明度,但如果我想使用一个值,而又不希望添加不透明度,该怎么办呢?

例如,我在我的colors.xml文件中使用了深蓝色#074EB2:

<color name="DarkBlue">#074EB2</color>

现在,我有一个带边框的自定义按钮背景。我想要边框使用这个深蓝色,但是增加透明度。按钮看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
    <stroke android:width="1dp" android:color="@color/DarkBlue"/>
    <corners android:radius="2dp"/>
</shape>

我该如何添加透明度?我需要在colors.xml中添加一个新的值来表示透明度吗?比如,<color name="DarkBlueTransparent">#80074EB2</color>?但问题是这种方式不可扩展。如果其他地方还需要使用这个颜色,但是需要80%或90%的透明度呢?我的colors.xml文件会因为不同的透明度数值而变得臃肿。


要么增加更多资源,要么将容器的不透明度设置为所需值。 - Shaishav
我的colors.xml文件会因为我想要的不同透明度值而变得很复杂。你真的需要这么多透明度级别来给各种颜色吗?比如说DarkBlue70Percent和DarkBlue71Percent? - Salem
言过其实,但你明白我的意思。 - h_k
1个回答

6

在xml中无法进行动态不透明度设置。但是你可以在Java端动态应用alpha值。

使用以下方法将alpha值应用于你的颜色。

public static int getColorWithAlpha(int yourColor, int alpha) {
    int red = Color.red(yourColor);
    int blue = Color.blue(yourColor);
    int green = Color.green(yourColor);
    return Color.argb(alpha, red, green, blue);
}

现在调用方法以获取带有alpha的颜色

blueWithAlpha = getColorWithAlpha(darkBlue, 120);

你的alpha值为120

Alpha值应该在0到225之间

现在将你的颜色应用于按钮

mButton.setBackgroundColor(blueWithAlpha);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接