我有一个自定义布局,其中包含自定义属性,其中一个是颜色。我有用户将此属性设置为颜色(不是常见的颜色),我使用TypedArray的getColor方法来检索此颜色并将其设置为整数(如果我打印此int,它是负的)。假设我做的是这样的事情:
_currentUser
现在假设用户将属性设置为R.color.special_shade_of_yellow。但是,if块永远不会通过,所以mySpecialMethod()永远不会被调用。出于某种原因,myColor是负值,而R.color.special_shade_of_yellow则不是。为什么他们没有返回相同的值?谢谢!
答案 0 :(得分:0)
Android中的颜色可能会有些混乱。您有颜色资源标识符(例如R.color.my_color
)并且您有颜色值(如0xff0000
),但两者都由{{1}表示价值。
int
将返回颜色值,即您可以直接应用于视图的真实颜色。因此,您不希望将TypedArray.getColor()
与简单的R.color.special_shade_of_yellow
进行比较。
请改为尝试:
==
if (myColor == ContextCompat.getColor(getContext(), R.color.special_shade_of_yellow)) {
...
}
会将您的颜色资源标识符(此处为ContextCompat.getColor()
)解析为颜色值,然后您可以执行{{1比较。