2017-09-06 127 views
0

我有一个具有自定义属性的自定义布局,其中一个是颜色。我有用户设置此属性为一种颜色(不是一种常见的颜色),我使用TypedArray的getColor方法来检索这种颜色并将其设置为一个整数(如果我打印出这个int,它是负的)。比方说,我做这样的事情:Android - 从自定义属性获取的颜色返回与colors.xml中相同颜色不同的值

int myColor; 
TypedArray ta = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, 0, 0); 
myColor = ta.getColor(R.styleable.MyView_myColor, -1); 

if (myColor == R.color.special_shade_of_yellow) { 
    mySpecialMethod() 
} 

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

回答

0

Android中的颜色可能会有些混乱。您有颜色资源标识符(如R.color.my_color),并且您有颜色值(如0xff0000),但两者都由int值表示。

TypedArray.getColor()将返回色值,即可以直接应用于视图的真实色彩。因此,您不希望通过简单的==R.color.special_shade_of_yellow进行比较。

试试这个:

if (myColor == ContextCompat.getColor(getContext(), R.color.special_shade_of_yellow)) { 
    ... 
} 

ContextCompat.getColor()将解决您的颜色资源标识符(这里R.color.special_shade_of_yellow)到颜色值,然后就可以执行==比较。

+0

哇,很高兴知道!这是修复。非常感谢! – Elise

相关问题