11

I have a list of colours

<?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> <color name="gray">#808080</color> <color name="olive">#808000</color> <color name="purple">#800080</color> <color name="maroon">#800000</color> <color name="aqua">#00FFFF</color> <color name="lime">#00FF00</color> <color name="teal">#008080</color> <color name="green">#008000</color> <color name="blue">#0000FF</color> <color name="navy">#000080</color> <color name="black">#000000</color> </resources> 

(I took this list from another question someone asked)

What I want to do is get all the color names. I want the list so I can then populate the lot in a spinner. The pseudo code would be like this.

List ofColours = getListOfColors(R.color); for(int i = 0 ; i < ofColours.size() ; i ++) { String colour = getResources().getColor(ofColours.get(i)); addColourToSpinner(colour); } 

What I want is the list of colours. I hope that explains it Cheers for all the help

4
  • 2
    Do I look like a Guru? Commented Nov 12, 2012 at 13:07
  • 1
    So.. what exactly is the question here? Commented Nov 12, 2012 at 13:07
  • How do I get a list of the colours! Commented Nov 12, 2012 at 13:11
  • try this stackoverflow.com/a/13157347/1752867 that's similar your problem... Commented Nov 12, 2012 at 13:26

4 Answers 4

13

You can access the list of colors using reflection:

Field[] fields = Class.forName(getPackageName()+".R$color").getDeclaredFields(); for(Field field : fields) { String colorName = field.getName(); int colorId = field.getInt(null); int color = getResources().getColor(colorId); Log.i("test", colorName + " => " + colorId + " => " + color); } 
Sign up to request clarification or add additional context in comments.

11 Comments

I don't see why it would not
Just curious (just read it again and realized it sounded critical). I never tried it on one, but it's a really cool trick
You really don't need Reflection for this.
@AdamArold I'm currious how you would answer the question.
Downvoting without commenting is really weird.
|
6

I got stuck doing this for my project. It took long time to make this and i hope it helps some people. I ended up combining an example from here

http://www.ipcas.com/blog/2011/12/android-color-picker/

and a color list provided from here

Web colors in an Android color xml resource file

Just delete colors you dont need and make whatever you like. (Alot faster than making your own)

This is my Strings.xml

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">AppName</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="title_activity_visitor">Visitor</string> <!-- Translation: Hint: White, Blue, Red...--> <string name="accolor">Hint: White, Blue, Red&#8230;</string> <integer name="colorGridColumnWidth">65</integer> <color name="AliceBlue">#F0F8FF</color> <color name="AntiqueWhite">#FAEBD7</color> <color name="aqua">#00FFFF</color> <color name="Aqua">#00FFFF</color> <color name="Aquamarine">#7FFFD4</color> <color name="Azure">#F0FFFF</color> <color name="Beige">#F5F5DC</color> <color name="Bisque">#FFE4C4</color> <color name="black">#000000</color> <color name="Black">#000000</color> <color name="BlanchedAlmond">#FFEBCD</color> <color name="Blue">#0000FF</color> <color name="BlueViolet">#8A2BE2</color> <color name="Brown">#A52A2A</color> <color name="BurlyWood">#DEB887</color> <color name="CadetBlue">#5F9EA0</color> <color name="Chartreuse">#7FFF00</color> <color name="Chocolate">#D2691E</color> <color name="Coral">#FF7F50</color> <color name="CornflowerBlue">#6495ED</color> <color name="Cornsilk">#FFF8DC</color> <color name="Crimson">#DC143C</color> <color name="Cyan">#00FFFF</color> <color name="DarkBlue">#00008B</color> <color name="DarkCyan">#008B8B</color> <color name="DarkGoldenrod">#B8860B</color> <color name="DarkGray">#A9A9A9</color> <color name="DarkGreen">#006400</color> <color name="DarkKhaki">#BDB76B</color> <color name="DarkMagenta">#8B008B</color> <color name="DarkOliveGreen">#556B2F</color> <color name="DarkOrange">#FF8C00</color> <color name="DarkOrchid">#9932CC</color> <color name="DarkRed">#8B0000</color> <color name="DarkSalmon">#E9967A</color> <color name="DarkSeaGreen">#8FBC8F</color> <color name="DarkSlateBlue">#483D8B</color> <color name="DarkSlateGray">#2F4F4F</color> <color name="DarkTurquoise">#00CED1</color> <color name="DarkViolet">#9400D3</color> <color name="DeepPink">#FF1493</color> <color name="DeepSkyBlue">#00BFFF</color> <color name="DimGray">#696969</color> <color name="DodgerBlue">#1E90FF</color> <color name="dullwhite">#FFDDDDDD</color> <color name="FireBrick">#B22222</color> <color name="FloralWhite">#FFFAF0</color> <color name="ForestGreen">#228B22</color> <color name="fuchsia">#FF00FF</color> <color name="Fuchsia">#FF00FF</color> <color name="Gainsboro">#DCDCDC</color> <color name="GhostWhite">#F8F8FF</color> <color name="Gold">#FFD700</color> <color name="Goldenrod">#DAA520</color> <color name="gray">#808080</color> <color name="Gray">#808080</color> <color name="green">#008000</color> <color name="Green">#008000</color> <color name="GreenYellow">#ADFF2F</color> <color name="Honeydew">#F0FFF0</color> <color name="HotPink">#FF69B4</color> <color name="IndianRed">#CD5C5C</color> <color name="Indigo">#4B0082</color> <color name="Ivory">#FFFFF0</color> <color name="Khaki">#F0E68C</color> <color name="Lavender">#E6E6FA</color> <color name="LavenderBlush">#FFF0F5</color> <color name="LawnGreen">#7CFC00</color> <color name="LemonChiffon">#FFFACD</color> <color name="LightBlue">#ADD8E6</color> <color name="LightCoral">#F08080</color> <color name="LightCyan">#E0FFFF</color> <color name="LightGoldenrodYellow">#FAFAD2</color> <color name="LightGreen">#90EE90</color> <color name="LightGrey">#D3D3D3</color> <color name="LightPink">#FFB6C1</color> <color name="LightSalmon">#FFA07A</color> <color name="LightSeaGreen">#20B2AA</color> <color name="LightSkyBlue">#87CEFA</color> <color name="LightSlateGray">#778899</color> <color name="LightSteelBlue">#B0C4DE</color> <color name="LightYellow">#FFFFE0</color> <color name="lime">#00FF00</color> <color name="Lime">#00FF00</color> <color name="LimeGreen">#32CD32</color> <color name="Linen">#FAF0E6</color> <color name="Magenta">#FF00FF</color> <color name="maroon">#800000</color> <color name="Maroon">#800000</color> <color name="MediumAquamarine">#66CDAA</color> <color name="MediumBlue">#0000CD</color> <color name="MediumOrchid">#BA55D3</color> <color name="MediumPurple">#9370DB</color> <color name="MediumSeaGreen">#3CB371</color> <color name="MediumSlateBlue">#7B68EE</color> <color name="MediumSpringGreen">#00FA9A</color> <color name="MediumTurquoise">#48D1CC</color> <color name="MediumVioletRed">#C71585</color> <color name="MidnightBlue">#191970</color> <color name="MintCream">#F5FFFA</color> <color name="MistyRose">#FFE4E1</color> <color name="Moccasin">#FFE4B5</color> <color name="NavajoWhite">#FFDEAD</color> <color name="navy">#000080</color> <color name="Navy">#000080</color> <color name="OldGold">#CFB53B</color> <color name="OldLace">#FDF5E6</color> <color name="olive">#808000</color> <color name="Olive">#808000</color> <color name="OliveDrab">#6B8E23</color> <color name="Orange">#FFA500</color> <color name="OrangeRed">#FF4500</color> <color name="Orchid">#DA70D6</color> <color name="PaleGoldenrod">#EEE8AA</color> <color name="PaleGreen">#98FB98</color> <color name="PaleTurquoise">#AFEEEE</color> <color name="PaleVioletRed">#DB7093</color> <color name="PapayaWhip">#FFEFD5</color> <color name="PeachPuff">#FFDAB9</color> <color name="Peru">#CD853F</color> <color name="Pink">#FFC0CB</color> <color name="Plum">#DDA0DD</color> <color name="PowderBlue">#B0E0E6</color> <color name="purple">#800080</color> <color name="Purple">#800080</color> <color name="red">#FF0000</color> <color name="Red">#FF0000</color> <color name="RosyBrown">#BC8F8F</color> <color name="RoyalBlue">#4169E1</color> <color name="SaddleBrown">#8B4513</color> <color name="Salmon">#FA8072</color> <color name="SandyBrown">#F4A460</color> <color name="SeaGreen">#2E8B57</color> <color name="Seashell">#FFF5EE</color> <color name="Sienna">#A0522D</color> <color name="silver">#C0C0C0</color> <color name="Silver">#C0C0C0</color> <color name="SkyBlue">#87CEEB</color> <color name="SlateBlue">#6A5ACD</color> <color name="SlateGray">#708090</color> <color name="Snow">#FFFAFA</color> <color name="SpringGreen">#00FF7F</color> <color name="SteelBlue">#4682B4</color> <color name="Tan">#D2B48C</color> <color name="teal">#008080</color> <color name="Teal">#008080</color> <color name="Thistle">#D8BFD8</color> <color name="Tomato">#FF6347</color> <color name="Turquoise">#40E0D0</color> <color name="Violet">#EE82EE</color> <color name="Wheat">#F5DEB3</color> <color name="white">#FFFFFFFF</color> <color name="White">#FFFFFF</color> <color name="WhiteSmoke">#F5F5F5</color> <color name="yellow">#FFFF00</color> <color name="Yellow">#FFFF00</color> <color name="YellowGreen">#9ACD32</color> <array name="colorNameList"> <item>AliceBlue</item> <item>AntiqueWhite</item> <item>Aqua</item> <item>Aquamarine</item> <item>Azure</item> <item>Beige</item> <item>Bisque</item> <item>Black</item> <item>BlanchedAlmond</item> <item>Blue</item> <item>BlueViolet</item> <item>Brown</item> <item>BurlyWood</item> <item>CadetBlue</item> <item>Chartreuse</item> <item>Chocolate</item> <item>Coral</item> <item>CornflowerBlue</item> <item>Cornsilk</item> <item>Crimson</item> <item>Cyan</item> <item>DarkBlue</item> <item>DarkCyan</item> <item>DarkGoldenrod</item> <item>DarkGray</item> <item>DarkGreen</item> <item>DarkKhaki</item> <item>DarkMagenta</item> <item>DarkOliveGreen</item> <item>DarkOrange</item> <item>DarkOrchid</item> <item>DarkRed</item> <item>DarkSalmon</item> <item>DarkSeaGreen</item> <item>DarkSlateBlue</item> <item>DarkSlateGray</item> <item>DarkTurquoise</item> <item>DarkViolet</item> <item>DeepPink</item> <item>DeepSkyBlue</item> <item>DimGray</item> <item>DodgerBlue</item> <item>FireBrick</item> <item>FloralWhite</item> <item>ForestGreen</item> <item>Fuchsia</item> <item>Gainsboro</item> <item>GhostWhite</item> <item>Gold</item> <item>Goldenrod</item> <item>Gray</item> <item>Green</item> <item>GreenYellow</item> <item>Honeydew</item> <item>HotPink</item> <item>IndianRed</item> <item>Indigo</item> <item>Ivory</item> <item>Khaki</item> <item>Lavender</item> <item>LavenderBlush</item> <item>LawnGreen</item> <item>LemonChiffon</item> <item>LightBlue</item> <item>LightCoral</item> <item>LightCyan</item> <item>LightGoldenrodYellow</item> <item>LightGreen</item> <item>LightGrey</item> <item>LightPink</item> <item>LightSalmon</item> <item>LightSeaGreen</item> <item>LightSkyBlue</item> <item>LightSlateGray</item> <item>LightSteelBlue</item> <item>LightYellow</item> <item>Lime</item> <item>LimeGreen</item> <item>Linen</item> <item>Magenta</item> <item>Maroon</item> <item>MediumAquamarine</item> <item>MediumBlue</item> <item>MediumOrchid</item> <item>MediumPurple</item> <item>MediumSeaGreen</item> <item>MediumSlateBlue</item> <item>MediumSpringGreen</item> <item>MediumTurquoise</item> <item>MediumVioletRed</item> <item>MidnightBlue</item> <item>MintCream</item> <item>MistyRose</item> <item>Moccasin</item> <item>NavajoWhite</item> <item>Navy</item> <item>OldGold</item> <item>OldLace</item> <item>Olive</item> <item>OliveDrab</item> <item>Orange</item> <item>OrangeRed</item> <item>Orchid</item> <item>PaleGoldenrod</item> <item>PaleGreen</item> <item>PaleTurquoise</item> <item>PaleVioletRed</item> <item>PapayaWhip</item> <item>PeachPuff</item> <item>Peru</item> <item>Pink</item> <item>Plum</item> <item>PowderBlue</item> <item>Purple</item> <item>Red</item> <item>RosyBrown</item> <item>RoyalBlue</item> <item>SaddleBrown</item> <item>Salmon</item> <item>SandyBrown</item> <item>SeaGreen</item> <item>Seashell</item> <item>Sienna</item> <item>Silver</item> <item>SkyBlue</item> <item>SlateBlue</item> <item>SlateGray</item> <item>Snow</item> <item>SpringGreen</item> <item>SteelBlue</item> <item>Tan</item> <item>Teal</item> <item>Thistle</item> <item>Tomato</item> <item>Turquoise</item> <item>Violet</item> <item>Wheat</item> <item>WhiteSmoke</item> <item>Yellow</item> <item>YellowGreen</item> </array> <array name="colorNumberList"> <item>@color/AliceBlue</item> <item>@color/AntiqueWhite</item> <item>@color/Aqua</item> <item>@color/Aquamarine</item> <item>@color/Azure</item> <item>@color/Beige</item> <item>@color/Bisque</item> <item>@color/Black</item> <item>@color/BlanchedAlmond</item> <item>@color/Blue</item> <item>@color/BlueViolet</item> <item>@color/Brown</item> <item>@color/BurlyWood</item> <item>@color/CadetBlue</item> <item>@color/Chartreuse</item> <item>@color/Chocolate</item> <item>@color/Coral</item> <item>@color/CornflowerBlue</item> <item>@color/Cornsilk</item> <item>@color/Crimson</item> <item>@color/Cyan</item> <item>@color/DarkBlue</item> <item>@color/DarkCyan</item> <item>@color/DarkGoldenrod</item> <item>@color/DarkGray</item> <item>@color/DarkGreen</item> <item>@color/DarkKhaki</item> <item>@color/DarkMagenta</item> <item>@color/DarkOliveGreen</item> <item>@color/DarkOrange</item> <item>@color/DarkOrchid</item> <item>@color/DarkRed</item> <item>@color/DarkSalmon</item> <item>@color/DarkSeaGreen</item> <item>@color/DarkSlateBlue</item> <item>@color/DarkSlateGray</item> <item>@color/DarkTurquoise</item> <item>@color/DarkViolet</item> <item>@color/DeepPink</item> <item>@color/DeepSkyBlue</item> <item>@color/DimGray</item> <item>@color/DodgerBlue</item> <item>@color/FireBrick</item> <item>@color/FloralWhite</item> <item>@color/ForestGreen</item> <item>@color/Fuchsia</item> <item>@color/Gainsboro</item> <item>@color/GhostWhite</item> <item>@color/Gold</item> <item>@color/Goldenrod</item> <item>@color/Gray</item> <item>@color/Green</item> <item>@color/GreenYellow</item> <item>@color/Honeydew</item> <item>@color/HotPink</item> <item>@color/IndianRed</item> <item>@color/Indigo</item> <item>@color/Ivory</item> <item>@color/Khaki</item> <item>@color/Lavender</item> <item>@color/LavenderBlush</item> <item>@color/LawnGreen</item> <item>@color/LemonChiffon</item> <item>@color/LightBlue</item> <item>@color/LightCoral</item> <item>@color/LightCyan</item> <item>@color/LightGoldenrodYellow</item> <item>@color/LightGreen</item> <item>@color/LightGrey</item> <item>@color/LightPink</item> <item>@color/LightSalmon</item> <item>@color/LightSeaGreen</item> <item>@color/LightSkyBlue</item> <item>@color/LightSlateGray</item> <item>@color/LightSteelBlue</item> <item>@color/LightYellow</item> <item>@color/Lime</item> <item>@color/LimeGreen</item> <item>@color/Linen</item> <item>@color/Magenta</item> <item>@color/Maroon</item> <item>@color/MediumAquamarine</item> <item>@color/MediumBlue</item> <item>@color/MediumOrchid</item> <item>@color/MediumPurple</item> <item>@color/MediumSeaGreen</item> <item>@color/MediumSlateBlue</item> <item>@color/MediumSpringGreen</item> <item>@color/MediumTurquoise</item> <item>@color/MediumVioletRed</item> <item>@color/MidnightBlue</item> <item>@color/MintCream</item> <item>@color/MistyRose</item> <item>@color/Moccasin</item> <item>@color/NavajoWhite</item> <item>@color/Navy</item> <item>@color/OldGold</item> <item>@color/OldLace</item> <item>@color/Olive</item> <item>@color/OliveDrab</item> <item>@color/Orange</item> <item>@color/OrangeRed</item> <item>@color/Orchid</item> <item>@color/PaleGoldenrod</item> <item>@color/PaleGreen</item> <item>@color/PaleTurquoise</item> <item>@color/PaleVioletRed</item> <item>@color/PapayaWhip</item> <item>@color/PeachPuff</item> <item>@color/Peru</item> <item>@color/Pink</item> <item>@color/Plum</item> <item>@color/PowderBlue</item> <item>@color/Purple</item> <item>@color/Red</item> <item>@color/RosyBrown</item> <item>@color/RoyalBlue</item> <item>@color/SaddleBrown</item> <item>@color/Salmon</item> <item>@color/SandyBrown</item> <item>@color/SeaGreen</item> <item>@color/Seashell</item> <item>@color/Sienna</item> <item>@color/Silver</item> <item>@color/SkyBlue</item> <item>@color/SlateBlue</item> <item>@color/SlateGray</item> <item>@color/Snow</item> <item>@color/SpringGreen</item> <item>@color/SteelBlue</item> <item>@color/Tan</item> <item>@color/Teal</item> <item>@color/Thistle</item> <item>@color/Tomato</item> <item>@color/Turquoise</item> <item>@color/Violet</item> <item>@color/Wheat</item> <item>@color/WhiteSmoke</item> <item>@color/Yellow</item> <item>@color/YellowGreen</item> </array> </resources> 

Next i used the ColorPickerDialog provided by

http://www.ipcas.com/blog/2011/12/android-color-picker/

public class ColorPickerDialog extends Dialog { public ColorPickerDialog(Context context) { super(context); this.setTitle("ColorPickerDialog"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.color_picker); GridView gridViewColors = (GridView) findViewById(R.id.gridViewColors); gridViewColors.setAdapter(new ColorPickerAdapter(getContext())); // close the dialog on item click gridViewColors.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ColorPickerDialog.this.dismiss(); } }); } } 

with this as well.

public class ColorPickerAdapter extends BaseAdapter { private Context context; // width of grid column int colorGridColumnWidth; //array of color values int[] colorNumberarray; // array of color names String[] colorNameArray; public ColorPickerAdapter(Context context) { this.context = context; // defines the width of each color square colorGridColumnWidth = context.getResources().getInteger(R.integer.colorGridColumnWidth); //fill colorNumberarray with values from the colorNumberList Array in strings.xml colorNumberarray = context.getResources().getIntArray(R.array.colorNumberList); //fill colorNameArray with values from the colorNameArray Array in strings.xml colorNameArray = context.getResources().getStringArray(R.array.colorNameList); //Show results in verbose Log for (int i = 0; i < colorNumberarray.length; i++) { Log.v("Test", colorNumberarray[i] + ""); Log.v("Test", colorNameArray[i] + ""); } } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; // can we reuse a view? if (convertView == null) { imageView = new ImageView(context); // set the width of each color square imageView.setLayoutParams(new GridView.LayoutParams(colorGridColumnWidth, colorGridColumnWidth)); } else { imageView = (ImageView) convertView; } imageView.setBackgroundColor(colorNumberarray[position]); imageView.setId(position); return imageView; } public int getCount() { return colorNumberarray.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } } 

Hopefully this will save people some time.

Next you launch the dialog,

 IBcolorpicker.setOnClickListener(new View.OnClickListener() { Dialog dialog; @Override public void onClick(View v) { // Clicked! // Make a new dialog. dialog = new ColorPickerDialog(Visitor.this); dialog.show(); } }); 

Comments

2

You can rename colors according to the general scheme

<?xml version="1.0" encoding="utf-8"?> <resources> <color name="color1">#FFFFFF</color> <color name="color2">#FFFF00</color> ... </resources> 

And then iterate over them by name

var i = 1 while (true) { val colorId = resources.getIdentifier("color$i", "color", packageName) if (colorId != 0) { // color exists ContextCompat.getColor(applicationContext, colorId) } else { break } i++ } 

No reflection

1 Comment

This was a really good approach to avoid reflection. Kudos!
1

Why not simply create two arrays in in your strings.xml or arrays.xml. Something like this:

<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="items"> <item>white</item> <item>yellow</item> <item>fuchsia</item> <item>red</item> </string-array> <string-array name="values"> <item>#FFFFFF</item> <item>#FFFF00</item> <item>#FF00FF</item> <item>#FF0000</item> </string-array> </resources> 

You can follow a simple example on developer.android.com here: http://developer.android.com/guide/topics/ui/controls/spinner.html.

This is another tutorial: http://www.dcpagesapps.com/developer-resources/android/21-android-tutorial-spinners?start=1

That should get you started.

1 Comment

There is no color preview in the IDE in this case

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.