Android资源 – arrays数组

我试图实现一个资源数据结构,其中包括一个数组,特别是string数组。 我遇到的问题是如何获得子数组对象及其特定的值。 这是我的资源文件看起来像….

<resources> <array name="array0"> <item> <string-array name="array01"> <item name="id">1</item> <item name="title">item one</item> </string-array> </item> <item> <string-array name="array02"> <item name="id">2</item> <item name="title">item two</item> </string-array> </item> <item> <string-array name="array03"> <item name="id">3</item> <item name="title">item three</item> </string-array> </item> </array> </resources> 

然后,在我的Java代码中,我检索数组,并尝试访问像这样的子元素…

 TypedArray typedArray = getResources().obtainTypedArray(R.array.array0); TypedValue typedValue = null; typedArray.getValue(0, typedValue); 

此时typedArray对象应该表示string数组“array01”,但是,我不知道如何检索“id”和“title”string元素。 任何帮助将不胜感激,在此先感谢。

你几乎可以做你想做的事情。 你必须分别声明每个数组,然后是一个引用数组。 像这样的东西:

 <string-array name="array01"> <item name="id">1</item> <item name="title">item one</item> </string-array> <!-- etc. --> <array name="array0"> <item>@array/array01</item> <!-- etc. --> </array> 

然后在你的代码中做这样的事情:

 Resources res = getResources(); TypedArray ta = res.obtainTypedArray(R.array.array0); int n = ta.length(); String[][] array = new String[n][]; for (int i = 0; i < n; ++i) { int id = ta.getResourceId(i, 0); if (id > 0) { array[i] = res.getStringArray(id); } else { // something wrong with the XML } } ta.recycle(); // Important! 

根据@Ted Hopp的回答,更优雅的方式:

 <integer-array name="id_array"> <item>1</item> <item>2</item> <item>3</item> </integer-array> <string-array name="name_array"> <item>name 1</item> <item>name 2</item> <item>name 3</item> </string-array> <array name="array0"> <item>@array/id_array</item> <item>@array/name_array</item> </array> 

确保子arrays的行数是相同的。
享受编写代码来访问数组单元格!
Android仍然是一个孩子,同时保持TypedArray“array0”丑陋的“项目”标签。
在我看来,最灵活的应该是:

 <array name="array0"> <integer-array name="id_array"> <item>1</item> <item>2</item> <item>3</item> </integer-array> <string-array name="name_array"> <item>name 1</item> <item>name 2</item> <item>name 3</item> </string-array> </array> 

但不要这样做,因为这不是Android的方式:)

https://developer.android.com/guide/topics/resources/more-resources.html#Color

 <?xml version="1.0" encoding="utf-8"?> <resources> <array name="icons"> <item>@drawable/home</item> <item>@drawable/settings</item> <item>@drawable/logout</item> </array> <array name="colors"> <item>#FFFF0000</item> <item>#FF00FF00</item> <item>#FF0000FF</item> </array> </resources> 

这个应用程序代码检索每个数组,然后获取每个数组中的第一个条目:

 Resources res = getResources(); TypedArray icons = res.obtainTypedArray(R.array.icons); Drawable drawable = icons.getDrawable(0); TypedArray colors = res.obtainTypedArray(R.array.colors); int color = colors.getColor(0,0); 

数组不是名称/值对。 您只能通过编号访问元素。 XML中的语法是错误的。 应该是这样的:

 <string-array name="string_array_name"> <item>text_string1</item> <item>text_string2</item> </string-array>