2016-12-16 41 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