企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### Typed Array(数组资源) - 有时候我们会在Java 代码中定义了两个数组, Android 并不推荐在Java 代码中定义数组,因为Android 允许通过资源文件来定义数组资源。 - Typed Array 代表一个通用类型的数组, 该类提供了getXxx(int index)方法来获取指定索引处的数组元素。 - Android 采用位于/res/values 目录下的arrays. xrnl 文件来定义数组资源,定义数组时XML资源文件的根元素也是<resources... />,该元素内可包含如下三种子元素。 - <array... ./>子元素: 定义普通类型的数组, 例如Drawable 数组 - <string-array... ./>子元素: 定义字符串数组。 - <integer-array... ./>子元素: 定义整型数组。 - 目前官网已经将integer-array独立出来了,如下定义资源文件`res/values/integers.xml`, ~~~ <?xml version="1.0" encoding="utf-8"?> <resources> <integer-array name="bits"> <item>4</item> <item>8</item> <item>16</item> <item>32</item> </integer-array> </resources> ~~~ java代码中可以这样引用 ~~~ Resources res = getResources(); int[] bits = res.getIntArray(R.array.bits); ~~~ 而在xml文件中这样引用In XML: `@[package:]array.bits` - 为了能在Java 程序中访问到实际数组, Resources 提供了如下方法。 - String[] getStringArray(int id): 根据资源文件中字符串数组资源的名称来获取实际的字符串数组。 - int[] getlntArray(int id): 根据资源文件中整型数组资源的名称来获取实际的整型数组。 - TypedArray obtainTypedArray(int id): 根据资源文件中普通数组资源的名称来获取实际的普通数组。 - 示例如下 ~~~ <?xml version="1.0" encoding="utf-8"?> <resources> <!-- 定义一个Drawable数组 --> <array name="plain_arr"> <item>@color/c1</item> <item>@color/c2</item> <item>@color/c3</item> <item>@color/c4</item> <item>@color/c5</item> <item>@color/c6</item> <item>@color/c7</item> <item>@color/c8</item> <item>@color/c9</item> </array> <!-- 定义字符串数组 --> <string-array name="string_arr"> <item>@string/c1</item> <item>@string/c2</item> <item>@string/c3</item> <item>@string/c4</item> <item>@string/c5</item> <item>@string/c6</item> <item>@string/c7</item> <item>@string/c8</item> <item>@string/c9</item> </string-array> <!-- 定义字符串数组 --> <string-array name="books"> <item>疯狂Java讲义</item> <item>疯狂Ajax讲义</item> <item>疯狂Android讲义</item> </string-array> </resources> ~~~ 可以在xml文件中做如下引用,例如,如下界面布局文件中定义了一个ListView 数组, 并将android:entries 属性值指定为一个数组。界面布局文件代码如下。 ~~~ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal"> <!-- 省略其他组件--> <!-- 定义ListView组件,使用了数组资源 --> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:entries="@array/books"/> </LinearLayout> ~~~ 在Java代码就可以做如下操作 ~~~ public class MainActivity extends Activity { // 获取系统定义的数组资源 String[] texts; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); texts = getResources().getStringArray(R.array.string_arr); // 创建一个BaseAdapter对象 BaseAdapter ba = new BaseAdapter() { @Override public int getCount() { // 指定一共包含9个选项 return texts.length; } @Override public Object getItem(int position) { // 返回指定位置的文本 return texts[position]; } @Override public long getItemId(int position) { return position; } // 重写该方法,该方法返回的View将作为的GridView的每个格子 @Override public View getView(int position , View convertView, ViewGroup parent) { TextView text = new TextView(MainActivity.this); Resources res = MainActivity.this.getResources(); // 使用尺度资源来设置文本框的高度、宽度 text.setWidth((int) res.getDimension(R.dimen.cell_width)); text.setHeight((int) res.getDimension(R.dimen.cell_height)); // 使用字符串资源设置文本框的内容 text.setText(texts[position]); TypedArray icons = res.obtainTypedArray(R.array.plain_arr); // 使用颜色资源来设置文本框的背景色 text.setBackground(icons.getDrawable(position)); text.setTextSize(20); return text; } }; GridView grid = (GridView) findViewById(R.id.grid01); // 为GridView设置Adapter grid.setAdapter(ba); } } ~~~