リソースとは
|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を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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をじっくり眺めるとリソースタイプごとにクラスが定義されていることがわかると思います。
各クラスの各フィールドが追加したリソースに対応しており、ソースコードからはこのフィールドを指定することで任意のリソースを使うことができるというわけです。
たとえばリソースの背景画像を設定する場合は以下のようにします。
1 2 | // Load a background for the current screen from a drawable resource. this .getWindow().setBackgroundDrawableResource(R.drawable.my_background_image); |
リソースを使うメリット
文字列などはわざわざリソースとして定義せずにコードに直接記述することも可能です。
ですが、たとえば同じ文字列を繰り返し使っているコードがあった場合、あとでその文字列に
変更が発生するとその修正箇所は多くなってしまいます。
こういったケースを避けるため、Androidではリソースを使うことを推奨しています。
One Comment