AndroidのResource - Arrayリソース
Androidはjavaソース内の配列定義はお勧めせず、/res/values/arrays.xmlを使い配列リソースを定義するようにしている。
定義
- <array.../>
- <string-array.../>
- <integer-array.../>
使用
- [<package_name>.]R.array.array_name
- @[<package_name>:]array/array_name
Resourcesのメソッドでアクセス
- String getStringArray(int id)
- int StringIntArray(int id)
- TypedArray obtainTypedArray(int id)
Array設定サンプル(/res/values/arrays.xml)
<?xml version="1.0" encoding="utf-8"?> <resources> <array name="color_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> <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> </array> <string-array name="books"> <item>java</item> <item>c</item> <item>c#</item> </string-array> </resources>
Arrayの取得サンプル
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:text="@string/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textSize="@dimen/title_font_size" /> <GridView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/grid" android:horizontalSpacing="@dimen/spacing" android:verticalSpacing="@dimen/spacing" android:numColumns="3" android:gravity="center" /> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:horizontalSpacing="@dimen/spacing" android:verticalSpacing="@dimen/spacing" android:entries="@array/books" android:gravity="center" /> </LinearLayout>
package com.example.liguofeng.resourcesample1; import android.content.res.Resources; import android.content.res.TypedArray; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.TextView; public class MainActivity extends AppCompatActivity { String[] texts; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); texts = getResources().getStringArray(R.array.string_arr); BaseAdapter adapter = new BaseAdapter() { @Override public int getCount() { return texts.length; } @Override public Object getItem(int position) { return texts[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView text = new TextView(MainActivity.this); Resources res = 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.color_arr); text.setBackground(icons.getDrawable(position)); return text; } }; GridView grid = (GridView) findViewById(R.id.grid); grid.setAdapter(adapter); } }