プログラムから色リソースを参照

広告

それでは登録した色リソースをプログラムから参照する方法を確認します。プログラム中から色リソースを参照する場合には次のように記述します。

Resources res = getResources();
int color = res.getColor(R.color.ID);

Activityクラスの親クラスであるApplicationContextクラスで用意されている「getResources」メソッドを使って「Resources」クラスのオブジェクトを取得し、そのオブジェクトに対して「getColor」メソッドを使って色を取得します。

「ID」には色リソースに対して「R.java」ファイル内で割り当てられた値を指定します。取得できる色はリソースとして定義した文字列ではなく、文字列から作成された色を表すint型の値です。詳しくは「色リソースの取得」を参照して下さい。

それでは実際に試してみます。まずテスト用に「test07_01」と言うプロジェクトを作成します。

プログラムから色リソースを参照

次に色リソースを定義するためのXMLファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="olive">#808000</color>
    <color name="chocolate">#d2691e</color>
</resources>

上記を「color.xml」と言うファイル名で保存して下さい。保存する場所はプロジェクト内の「res/values」ディレクトリの中です。文字コードを「UTF-8」にするのを忘れないで下さい。

プログラムから色リソースを参照

ではこの時点で一度ビルドして下さい。「R.java」が作成されます。中身は次のようになっているはずです。

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package jp.javadrive.android;

public final class R {
    public static final class attr {
    }
    public static final class color {
        public static final int chocolate=0x7f030001;
        public static final int olive=0x7f030000;
    }
    public static final class layout {
        public static final int main=0x7f020000;
    }
    public static final class string {
        public static final int app_name=0x7f040000;
    }
}

2つの色リソースのIDは「R.color.chocolate」と「R.color.olive」となります。

プログラムの変更

ではデフォルトで作成されている「Test07_01.java」をテキストエディタで開き次のように修正します。

Test07_01.java

package jp.javadrive.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.view.ViewGroup;
import android.widget.TextView;
import android.content.Resources;

public class Test07_01 extends Activity {
    private final int FP = ViewGroup.LayoutParams.FILL_PARENT; 
    private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 

    @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        setContentView(linearLayout);

        Resources res = getResources();
        int olive_color = res.getColor(R.color.olive);
        int chocolate_color = res.getColor(R.color.chocolate);

        TextView text1 = new TextView(this);
        text1.setText("Olive Color");
        text1.setTextColor(olive_color);
        linearLayout.addView(text1, createParam(WC, WC));

        TextView text2 = new TextView(this);
        text2.setText("Chocolate Color");
        text2.setTextColor(chocolate_color);
        linearLayout.addView(text2, createParam(WC, WC));
    }

    private LinearLayout.LayoutParams createParam(int w, int h){
        return new LinearLayout.LayoutParams(w, h);
    }
}

上記のプログラムの中で赤字の部分が色リソースを参照している部分となります。(リソースIDを指定して色リソースを取得する方法については「Resourcesクラスのオブジェクトを取得」及び「色リソースの取得」を参照して下さい)。

以上で準備が完了しました。では改めてビルドを行いエミュレーターにアプリケーションをインストールして下さい。その後アプリケーションを起動すると次のように表示されます。

プログラムから色リソースを参照

このようにリソースとして登録した色をプログラムの中で参照することが出来ました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)