[英]how to set opacity on a button with a transparent background color programmatically
我正在开发一个组件库,目前正在开发按钮组件,但是当涉及到具有透明背景颜色的禁用按钮时,我遇到了问题,android 只是将灰色设置为按钮的背景颜色。
在这里我设置颜色
typeStyles.put("defaultBackgroundColor", context.getResources().getColor(R.color.color_transparent));
在这里我恢复颜色
this.mDefaultBackgroundColor = buttonType.styles.get("defaultBackgroundColor");
我有几种类型的按钮,所以每个按钮都有不同的配置。
导致我出现问题的按钮如下
图像按钮是一个禁用 state 并具有透明背景的按钮,问题在于它在按钮上设置了灰色。
在这里我设置不透明度。
int mColor = mDefaultBackgroundColor;
byte factor = 125;
float alpha = getResources().getFloat(R.dimen.opacity_intense);
float2ByteArray(alpha);
int color = (factor << 24) | (mColor & 0x00ffffff);
disabledDrawable.setColor(color);
disabledDrawable.setStroke(mBorderWidth, mDefaultBackgroundColor);
if (!mEnabled)
this.setAlpha(.5f);
在材料组件库中,这是一种方法(它至少需要版本1.2.0-beta01
):
MaterialColors.compositeARGBWithAlpha(color, alpha);
否则,您可以使用androidx.core.graphics.ColorUtils
class:
ColorUtils.setAlphaComponent(originalARGB, alpha);
例子:
int color = ColorUtils.setAlphaComponent(
ContextCompat.getColor(this,R.color....),xx);
int color = MaterialColors.compositeARGBWithAlpha(
ContextCompat.getColor(this,R.color....),xx);
我终于设法解决了这个问题。 我修改了下面的代码行。
int mColor = mDefaultBackgroundColor;
int color = mColor;
disabledDrawable.setColor(color);
disabledDrawable.setStroke(mBorderWidth, mBorderColor);
if (!mEnabled)
this.setAlpha(.5f);
之前是这样
int mColor = mDefaultBackgroundColor;
byte factor = 125;
float alpha = getResources().getFloat(R.dimen.opacity_intense);
float2ByteArray(alpha);
int color = (factor << 24) | (mColor & 0x00ffffff);
disabledDrawable.setColor(color);
disabledDrawable.setStroke(mBorderWidth, mDefaultBackgroundColor);
if (!mEnabled)
this.setAlpha(.5f);
这是结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.