如何在array.xml中保存颜色并将其返回到Color []数组

Vic*_*sky 64 android

如何在array.xml中保存颜色值并将其作为Color []数组检索回我的代码?

先谢谢!

Sky*_*sey 158

定义颜色资源,然后将它们添加到阵列以进行访问.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="bright_pink">#FF007F</color>
    <color name="red">#FF0000</color>
    <color name="orange">#FF7F00</color>
    <color name="yellow">#FFFF00</color>
    <color name="chartreuse">#7FFF00</color>
    <color name="green">#00FF00</color>
    <color name="spring_green">#00FF7F</color>
    <color name="cyan">#00FFFF</color>
    <color name="azure">#007FFF</color>
    <color name="blue">#0000FF</color>
    <color name="violet">#7F00FF</color>
    <color name="magenta">#FF00FF</color>

    <array name="rainbow">
        <item>@color/bright_pink</item>
        <item>@color/red</item>
        <item>@color/orange</item>
        <item>@color/yellow</item>
        <item>@color/chartreuse</item>
        <item>@color/green</item>
        <item>@color/spring_green</item>
        <item>@color/cyan</item>
        <item>@color/azure</item>
        <item>@color/blue</item>
        <item>@color/violet</item>
        <item>@color/magenta</item>
    </array>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后像这样访问它们:

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

for (int i = 0; i < tileColumns; i++) {
    paint.setColor(rainbow[i]);
    // Do something with the paint.
}
Run Code Online (Sandbox Code Playgroud)

  • 干净整洁的解决方案.效果很好;) (3认同)

Pat*_*ick 50

如果这是在array.xml中:

<resources>
    <array name="colors">
        <item>#ffffff</item>
        <item>#000000</item>
    </array>
</resources>
Run Code Online (Sandbox Code Playgroud)

这将为您提供该数组的颜色值:

TypedArray ta = context.getResources().obtainTypedArray(R.array.colors);
int[] colors = new int[ta.length()];
for (int i = 0; i < ta.length(); i++) {
    colors[i] = ta.getColor(i, 0);
}
ta.recycle();
Run Code Online (Sandbox Code Playgroud)

这只是扩展了文档中的TypedArray示例:http: //developer.android.com/guide/topics/resources/more-resources.html#TypedArray

希望能帮助到你!

  • 准确地看着这个.恕我直言,这应该是最受欢迎的答案...... (2认同)

Dmy*_*lyk 23

colors.xml

<resources>
    <string-array name="colors">        
        <item>#ff0000</item>
        <item>#00ff00</item>  
        <item>#0000ff</item>
    </string-array>
</resources>
Run Code Online (Sandbox Code Playgroud)

活动类中的代码.

String[] allColors = context.getResources().getStringArray(R.array.colors);

Color.parseColor(allColors[0]) // red
Color.parseColor(allColors[1]) // green
Color.parseColor(allColors[2]) // blue
Run Code Online (Sandbox Code Playgroud)


use*_*491 12

我不能发表评论,所以我必须将其作为一个新的回复.我完全同意Sky Kelsey wrt使用颜色资源类型的设计选择.但是,我发现访问它们的建议方法不起作用.这是我实现使用XML数组轻松遍历颜色列表并将颜色应用于各种(自定义绘制)视图的方式.

首先是arrays.xml中的数组:

    <array name="ingr_color_arr">
      <item>@color/ingr_red1</item>
      <item>@color/ingr_orange1</item>
      <item>@color/ingr_yellow1</item>
      <item>@color/ingr_green1</item>
      <item>@color/ingr_blue1</item>
      <item>@color/ingr_violet1</item>
      <item>@color/ingr_red2</item>
      <item>@color/ingr_orange2</item>
      <item>@color/ingr_yellow2</item>
      <item>@color/ingr_green2</item>
      <item>@color/ingr_blue2</item>
      <item>@color/ingr_violet2</item>
   </array>
Run Code Online (Sandbox Code Playgroud)

然后在color.xml中:

<color name="ingr_red1">#FFCC0000</color>
<color name="ingr_orange1">#FFED5F21</color>
<color name="ingr_yellow1">#FFFAE300</color>
<color name="ingr_green1">#FF5B9C0A</color>
<color name="ingr_blue1">#FF0A0D9C</color>
<color name="ingr_violet1">#FF990A9C</color>
<color name="ingr_red2">#FFFFCCCC</color>
<color name="ingr_orange2">#FFFFEACC</color>
<color name="ingr_yellow2">#FFFFFECC</color>
<color name="ingr_green2">#FFC7F5C4</color>
<color name="ingr_blue2">#FFC4DAF4</color>
<color name="ingr_violet2">#FFE1C4F4</color>
Run Code Online (Sandbox Code Playgroud)

然后使用它:

TypedArray ta = res.obtainTypedArray(R.array.ingr_color_arr);
int colorToUse = ta.getResourceId(intGroupNum.intValue() - 1, R.color.recipe_detail_border);
paint.setColor(colorToUse);
Run Code Online (Sandbox Code Playgroud)

这里的关键是使用getResourceId,因为setColor(int)将期望颜色的资源ID.当我尝试使用getIntArray()或获取值时,我收到"资源未找到"错误getColor().

最流行的答案可能有用...我没有尝试过,因为我更喜欢"颜色阵列"的设计选择.