【Android】动态设置 View 的背景颜色 BackgroundColor 无效的问题

问题描述

我们都知道 setBackgroundColor() 方法用于动态设置 view 的背景颜色。今天在做需求的时候,需要根据情况动态更新自定义 view 的背景颜色,于是就想当然的这么写:

mItemView.setBackgroundColor(R.color.message_red)

结果呈现出来的 UI 效果并不是我们想要的。纳闷了好久。。。。

然而,如果自己定义一个 color.xml 文件,然后在 xml 中引用此文件中的颜色,却是一切顺利。

原因:

颜色4个字节从高到低对应 不透明度 红 绿 蓝 四个分量,0xFFFFFF 对应不透明度的分量是0,所以后面不管是什么背景都是透明的。0xFFFFFFFF 就是白色了,0x80FFFFFF 就是半透明的白色。
1、Color.rgb() 会自动把不透明读设成255,

2、解析字符串颜色 “#FFFFFF” 也能判断出只给出了三个分量会自动把不透明度设成255。

3、而对于整数0xFFFFFF和0x00FFFFFF是一样的,是完全透明的。

解决办法

1、可以参考, HEX与RGB互相转换

setBackgroundColor(Color.rgb(255, 0, 0)); 

2、利用系统的 parseColor 设置(HEX 形式/16进制形式)

setBackgroundColor(Color.parseColor(“#6495ED”));

3、通过 resources 或者 ContextCompat(推荐)

setBackgroundColor(getResources().getColor(R.color.cornflowerblue));

setBackgroundColor(ContextCompat.getColor(this, R.color.message_red)); // 更推荐后者
发布了79 篇原创文章 · 获赞 207 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/u011489043/article/details/101100429