Android - 从custom属性中获取的颜色返回的值与colors.xml中的相同颜色不同

时间:2017-09-06 03:49:58

标签: android colors attributes hex android-custom-view

我有一个自定义布局,其中包含自定义属性,其中一个是颜色。我有用户将此属性设置为颜色(不是常见的颜色),我使用TypedArray的getColor方法来检索此颜色并将其设置为整数(如果我打印此int,它是负的)。假设我做的是这样的事情:

_currentUser

现在假设用户将属性设置为R.color.special_shade_of_yellow。但是,if块永远不会通过,所以mySpecialMethod()永远不会被调用。出于某种原因,myColor是负值,而R.color.special_shade_of_yellow则不是。为什么他们没有返回相同的值?谢谢!

1 个答案:

答案 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比较。