2017-09-06 85 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

相關問題