リソースの参照
リソースとして登録されたものはプログラムの中から参照されるだけではなく、他のリソースから参照されることもあります。ここではリソースをどのように参照するのかを確認していきます。
プログラムから参照
リソースとして登録されたものはR.javaファイルの中でリソースIDが割り当てられます。このリソースIDをプログラムなどから参照することでリソースをプログラムの中で使用することができます。
では改めてR.javaファイルの中身を確認してみます。
package jp.javadrive.resource; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }
リソースIDは「static final int」型の値して定義されています。プログラムなどからこの値を参照する場合には次のように記述します。
R.リソース種類.リソース名
例えばLayoutタイプのmainリソースのIDは次のようにプログラムから参照することができます。
R.layout.main
では自動で作成されたアクティビティクラスのソースコードを見てください。
package jp.javadrive.resource;
import android.app.Activity;
import android.os.Bundle;
public class ResourceActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
アクティビティに画面レイアウトを設定するために「setContentView」メソッドを使っています。この引数に画面レイアウトのリソースを表すリソースIDとして「R.layout.main」を指定していることが確認できます。
レイアウトの場合はこのように使用します。他のリソースをプログラムの中で使う方法については別のページで確認します。
XMLファイルから参照
リソースはプログラムの中からだけではなく他のリソースが定義されたXMLファイルから参照されることがあります。例えばレイアウト用XMLファイルの中で、ビューに表示される文字列の指定に文字列リソースを参照するといったことが行われます。
リソースが定義されたXMLファイルからリソースIDを参照する場合には次のように記述します。
@リソース種類/リソース名
例えばStringタイプのhelloリソースのIDは次のようにプログラムから参照することができます。
@string/hello
では自動で作成されたレイアウト用XMLファイルのmain.xmlの記述内容を見て下さい。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
「TextView」ビューに表示される文字列としてStringタイプで名前が「hello」のリソースが参照されています。このリソースは「res/values」ディレクトリの中の「strings.xml」ファイルで定義されています。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ResourceActivity!</string>
<string name="app_name">Sampleプログラム</string>
</resources>
「hello」には"Hello World, ResourceActivity!"という文字列が記述されています。
先ほどのmain.xmlファイルではこのリソースを参照していましたので、リソースを参照する代わりに直接文字列を次のように記述したものと同じになります。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, ResourceActivity!"
/>
</LinearLayout>
このように他のリソースのXMLファイルの中から別のリソースを参照することが可能です。
リソースの種類によっては他のパッケージのリソースを参照することができるものもあります。細かい点は個々のリソースを詳細のページで確認していきます。
( Written by Tatsuo Ikura )