getResources().getColor(R.color.Black)和直接使用R.color.Black的区别

3

我注意到Eclipse的一个奇怪行为?

我有一个静态变量:

public static colorID = R.color.Black;

有时它与R.color.Black匹配:
if(colorID == R.color.Black)
     //sometimes it works

有时我需要使用 </p>。
if(colorID == getResources().getColor(R.color.Black));

当代码很大时,通过测试寻找故障真的很烦人...

因此,我想知道为什么它有时有效,有时无效,以及为什么返回的整数有时不同,有时相同。它们都引用了我自定义的color.xml文件中的R.color.Black,在我的values文件夹中。那么它们为什么有时不同呢?


添加 final 关键字:public static final colorID = R.color.Black;。我猜你会发现你在多个地方给 colorID 赋了不同的值。 - CommonsWare
1
请注意,getColor() 返回的是颜色值,而不是颜色 ID。如果它匹配了,那么你的代码中可能存在混淆值和 ID 的 bug。 - laalto
@CommonsWare 我有同样的想法。但我总是直接使用R.Color...直接赋值。即使我从“不同的位置”分配它们,也应该没问题吧? - MMike
@laalto 哦,好的,我明白了!我将逐行检查我的代码! - MMike
1个回答

3

getColor返回实际的AARRGGBB颜色值。R.color.Black是一个保存颜色的ID,可能是黑色也可能不是黑色。其中一个是实际值,另一个是对颜色的引用。


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