如何保存array.xml中的颜色并将其返回到Color 数组
我怎样才能保存array.xml中的颜色值,并返回到我的代码为Color []数组?
事先感谢!
定义您的颜色资源,然后将其添加到数组中以供访问。
<?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>
然后像这样访问它们:
int[] rainbow = context.getResources().getIntArray(R.array.rainbow); for (int i = 0; i < tileColumns; i++) { paint.setColor(rainbow[i]); // Do something with the paint. }
如果这是在array.xml中:
<resources> <array name="colors"> <item>#ffffff</item> <item>#000000</item> </array> </resources>
这会给你该数组的颜色值:
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();
这只是扩展了文档中的TypedArray示例: http : //developer.android.com/guide/topics/resources/more-resources.html#TypedArray
希望能帮助到你!
colors.xml
<resources> <string-array name="colors"> <item>#ff0000</item> <item>#00ff00</item> <item>#0000ff</item> </string-array> </resources>
代码在活动类。
String[] allColors = context.getResources().getStringArray(R.array.colors); Color.parseColor(allColors[0]) // red Color.parseColor(allColors[1]) // green Color.parseColor(allColors[2]) // blue
我不能发表评论,所以我必须把这个作为一个新的回应。 我完全同意Sky Kelsey和使用色彩资源types的deviseselect。 但是,我发现build议的方法来访问他们没有工作。 这是我实现使用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>
然后在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>
然后使用它:
TypedArray ta = res.obtainTypedArray(R.array.ingr_color_arr); int colorToUse = ta.getResourceId(intGroupNum.intValue() - 1, R.color.recipe_detail_border); paint.setColor(colorToUse);
这里的关键是使用getResourceId,因为setColor(int)将期望一个颜色的资源ID。 当我尝试使用getIntArray()
或getColor()
获取值时,出现“Resource not found”(资源未find)错误。
最stream行的答案可能工作…我没有尝试,因为我更喜欢“arrays的颜色”deviseselect。