liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのResource - Arrayリソース

Androidjavaソース内の配列定義はお勧めせず、/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);
    }
}

f:id:liguofeng29:20160102003239p:plain