为什么 R.color.myColor 给出了错误的颜色?
Why does R.color.myColor give wrong color?
我已经问过关于这个话题的问题了但是我不明白为什么它在引用时会给出随机颜色?它应该给出正确的颜色,这是不可能的,因为它是参考,或者它甚至不应该给出任何颜色。但是为什么颜色不对?
提前致谢
当您查看 Android 源代码时,您会发现有两种类型的资源注释 @ColorRes
和 @ColorInt
。
它们的用法如下:
@ColorRes int myColorResource = R.color.myColor;
@ColorInt int myColorValue = getColor(myColorResource)
所以基本上,Android 中的颜色实际上是一个整数值,其编码为:
int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
其中:
- A:阿尔法
- R:红色分量
- G:绿色成分
- B:蓝色成分
(您可以在 https://developer.android.com/reference/android/graphics/Color 阅读更多相关信息)。
现在回到你的问题,android 中的资源实际上由整数值表示,因此你的 R.color.myColor
将持有 123456789
的整数值(这是随机生成的值在构建时,因此对于每个构建,您可能会为此获得不同的值。您可以通过记录它来检查此值)。
现在,Android 将此传递的整数值视为 @ColorInt
(已解析的颜色值)而不是 @ColorRes
(需要解析以获得颜色值的资源)。因此,Android 将尝试从此值中提取 A、R、G 和 B 分量并呈现不正确的颜色。
参考文献:
我已经问过关于这个话题的问题了
提前致谢
当您查看 Android 源代码时,您会发现有两种类型的资源注释 @ColorRes
和 @ColorInt
。
它们的用法如下:
@ColorRes int myColorResource = R.color.myColor;
@ColorInt int myColorValue = getColor(myColorResource)
所以基本上,Android 中的颜色实际上是一个整数值,其编码为:
int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
其中:
- A:阿尔法
- R:红色分量
- G:绿色成分
- B:蓝色成分
(您可以在 https://developer.android.com/reference/android/graphics/Color 阅读更多相关信息)。
现在回到你的问题,android 中的资源实际上由整数值表示,因此你的 R.color.myColor
将持有 123456789
的整数值(这是随机生成的值在构建时,因此对于每个构建,您可能会为此获得不同的值。您可以通过记录它来检查此值)。
现在,Android 将此传递的整数值视为 @ColorInt
(已解析的颜色值)而不是 @ColorRes
(需要解析以获得颜色值的资源)。因此,Android 将尝试从此值中提取 A、R、G 和 B 分量并呈现不正确的颜色。
参考文献: