Androidでいうリソースとはソースコードの外にあるデータのことを指します。
Androidでは以下のようなデータをリソースとして定義することができます。
- 色(フォントや背景などの色を指定する数値)
- 文字列(ボタンなどに表示する文字列値)
- 寸法(ボタンなどのサイズを指定する数値)
- 描画(PNGやJPGなどの画像)
- アニメーション(アニメーション動作の定義情報)
- メニュー(メニューに表示する文字列値)
- レイアウト(アクティビティのレイアウト情報)
リソースを作る
リソースの作成はres/以下にデータを追加するだけなのですが、
データの種類によって格納するサブディレクトリが異なります。
PNGやJPGなどの画像ファイルはres/drawable以下、
色や文字列などを定義するXMLファイルはres/values以下、という具合です。
ディレクトリ | リソースタイプ |
res/anim/ | アニメーション動作を定義したXMLファイルを格納する。 |
res/drawable/ | 画像ファイルを格納する。 |
res/layout/ | アクティビティのレイアウトを定義したXMLファイルを格納する。 |
res/values/ | 色、文字列、寸法などを定義したXMLファイルを格納する。 |
res/xml/ | 任意のXMLファイルを格納する。 |
res/raw/ | デバイスに直接コピーされるファイルを格納する。 |
リソースを使う
リソースを作るとR.javaというファイルに「コードからリソースを使うために必要となる情報」が自動的に追記されます。以下にR.javaを示します。
package com.android.samples; public final class R { public static final class string { public static final int greeting=0x0204000e; public static final int start_button_text=0x02040001; public static final int submit_button_text=0x02040008; public static final int main_screen_title=0x0204000a; }; public static final class layout { public static final int start_screen=0x02070000; public static final int new_user_pane=0x02070001; public static final int select_user_list=0x02070002; }; public static final class drawable { public static final int company_logo=0x02020005; public static final int smiling_cat=0x02020006; public static final int yellow_fade_background=0x02020007; public static final int stretch_button_1=0x02020008; }; };
このR.javaをじっくり眺めるとリソースタイプごとにクラスが定義されていることがわかると思います。
各クラスの各フィールドが追加したリソースに対応しており、ソースコードからはこのフィールドを指定することで任意のリソースを使うことができるというわけです。
たとえばリソースの背景画像を設定する場合は以下のようにします。
// Load a background for the current screen from a drawable resource. this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image);
リソースを使うメリット
文字列などはわざわざリソースとして定義せずにコードに直接記述することも可能です。
ですが、たとえば同じ文字列を繰り返し使っているコードがあった場合、あとでその文字列に
変更が発生するとその修正箇所は多くなってしまいます。
こういったケースを避けるため、Androidではリソースを使うことを推奨しています。