2016-12-16 43 views
0

我在color.xml中定義了以下顏色。顏色名稱是BC1,BC2,BC2等。定義了15個這樣的顏色名稱。最後一種顏色是BC15。如何使用R.color使用變量ID讀取顏色

<color name="BC1">#39DD02</color> 
<color name="BC2">#FEA200</color> 
<color name="BC3">#21C3F3</color> 
........ 
<color name="BC15">#21F3F3</color> 

在我的代碼,我想用下面的代碼,使色彩:

ContextCompat.getColor(getContext(), R.color.BC1) 

上面的代碼工作正常。現在,我想在循環中使用這些代碼,以便我可以根據計數器值選擇顏色,以便我可以逐個讀取顏色,如下面的psedo代碼所示。

for(colorID=1;colorID<=15;colorID++) 
{ 

    int businessColor=ContextCompat.getColor(getContext(),R.color.<colorID>) 

    //Do something with the value inside businessColor 
} 

在上面的代碼,我怎麼使用colorID計數器由一個

我試着寫下面看顏色之一。 (假設我可以從陣列獲取hexdecimal值)

ContextCompat.getColor(getContext(), Color.parseColor("#636161")) 

但上面的代碼顯示我錯誤「預期型彩色的資源」。

+0

您可以使用['getIdentifier'從'Resources'(HTTPS ://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String,java.lang.String,java.lang.String))來獲取字符串的標識符。像getResources()。getIdentifier(NameOfYourColor,「color」,getPackageName())''應該可以獲得'getColor'的id。 – dylansturg

+0

在'values/arrays.xml'中定義一個數組並迭代該數組 –

+0

關於'getIdentifier',請務必在文檔中閱讀此註釋 - 「注意:不鼓勵使用此函數。通過標識符而不是名稱來檢索資源。「 – iagreen

回答

1

1.定義你的顏色資源

2.增加他們到一個數組

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    <color name="white">#FFFFFF</color> 
    <color name="yellow">#FFFF00</color> 
    <color name="fuchsia">#FF00FF</color> 
    <color name="red">#FF0000</color> 
    <color name="silver">#C0C0C0</color> 


     <array name="array_name"> 
      <item>@color/white</item> 
      <item>@color/yellow</item> 
      <item>@color/fuchsia</item> 
      <item>@color/red</item> 
      <item>@color/silver</item> 

     </array> 
    </resources> 

int[] colorArray= context.getResources().getIntArray(R.array.array_name); 

for (int i = 0; i < numberOfColumns; i++) { 
    paint.setColor(colorArray[i]); 

} 

可以使用this

+0

你的解決方案肯定適用於Paint.setColor(colorArray [i]),但是如果我在語句ContextCompat.getColor(getContext(),colorArray [colorIndex])中使用colorArray,那麼,在runt時間內,它會失敗,找到。看來ContextCompat.getColor()無法將其識別爲彩色資源。有任何想法嗎? – KurioZ7

+0

我建議你不要在那裏和那裏引用Context。 Activity是Context的一個子類。您可以直接使用這個或NameOfActivity.this來訪問上下文。嘗試像這樣 - > ContextCompat.getColor(this,colorArray [colorIndex]);並更新我 –

+0

我在片段內執行此代碼。我嘗試了你的建議,但是'這'被IDE識別爲錯誤的參數。 – KurioZ7