#### Typed Array(数组资源)
- 有时候我们会在Java 代码中定义了两个数组, Android 并不推荐在Java 代码中定义数组,因为Android 允许通过资源文件来定义数组资源。
- Typed Array 代表一个通用类型的数组, 该类提供了getXxx(int index)方法来获取指定索引处的数组元素。
- Android 采用位于/res/values 目录下的arrays. xrnl 文件来定义数组资源,定义数组时XML资源文件的根元素也是<resources... />,该元素内可包含如下三种子元素。
-
-
-
- 目前官网已经将integer-array独立出来了,如下定义资源文件`res/values/integers.xml`,
~~~
4
8
16
32
~~~
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): 根据资源文件中普通数组资源的名称来获取实际的普通数组。
- 示例如下
~~~
@color/c1
@color/c2
@color/c3
@color/c4
@color/c5
@color/c6
@color/c7
@color/c8
@color/c9
@string/c1
@string/c2
@string/c3
@string/c4
@string/c5
@string/c6
@string/c7
@string/c8
@string/c9
疯狂Java讲义
疯狂Ajax讲义
疯狂Android讲义
~~~
可以在xml文件中做如下引用,例如,如下界面布局文件中定义了一个ListView 数组, 并将android:entries
属性值指定为一个数组。界面布局文件代码如下。
~~~
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/books"/>
~~~
在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);
}
}
~~~