How to save colors in array.xml and return it to Color [] array

How to save color values ​​inside array.xml and return it back to my code as Color [] array?

Thanks in advance!

+63
android
02 Feb '12 at 15:04
source share
6 answers

Define your color resources, then add them to the array for access.

<?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> 

Then refer to them as follows:

 int[] rainbow = context.getResources().getIntArray(R.array.rainbow); for (int i = 0; i < tileColumns; i++) { paint.setColor(rainbow[i]); // Do something with the paint. } 
+156
Jul 11 '13 at 2:23
source share

If this is in the array.xml file:

 <resources> <array name="colors"> <item>#ffffff</item> <item>#000000</item> </array> </resources> 

This will give you color values ​​for this array:

 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(); 

This just extends the TypedArray example in the docs: http://developer.android.com/guide/topics/resources/more-resources.html#TypedArray

Hope this helps!

+50
May 21 '12 at 12:13 a.m.
source share

colors.xml

 <resources> <string-array name="colors"> <item>#ff0000</item> <item>#00ff00</item> <item>#0000ff</item> </string-array> </resources> 

The code in the activity class.

 String[] allColors = context.getResources().getStringArray(R.array.colors); Color.parseColor(allColors[0]) // red Color.parseColor(allColors[1]) // green Color.parseColor(allColors[2]) // blue 
+23
Feb 02 '12 at 15:09
source share

I cannot post a comment, so I have to add this as a new answer. I completely agree with Sky Kelsey wrt design choice using the type of resource color. However, I found that the proposed method of accessing them does not work. That’s how I implemented using an XML array to easily scroll through the list of colors and apply colors to various (individually colored) representations.

First an array in 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> 

Then in 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> 

Then, to use it:

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

The key here is to use getResourceId because setColor (int) expects the resource identifier for the color. I was getting "Resource not found" errors when I tried to get the value using getIntArray() or getColor() .

The most popular answer may work ... I have not tried, because I preferred to choose the design of the "array of colors".

+12
Aug 15 '13 at 1:11
source share

In Kotlin it will be much easier

  val colors = resources.obtainTypedArray(R.array.colors).use { ta -> IntArray(ta.length()) { ta.getColor(it, 0) } } 
+1
Jan 08 '19 at 23:02
source share

Color.xml:

  <string-array name="listcolors"> <item>#448AFF</item> <item>#FFC107</item> <item>#009688</item> <item>#ff8000</item> <item>#ffbf00</item> <item>#0000ff</item> <item>#936c6c</item> <item>#7733ff</item> <item>#7733ff</item> <item>#ff8000</item> <item>#448AFF</item> <item>#0000ff</item> </string-array> 

activity.java file

 Context context; String[] colors = context.getResources().getStringArray(R.array.listcolors); String bg_color = colors[i]; //i=1,2,3... 
0
Sep 01 '19 at 2:38
source share



All Articles