page.title=リソースへのアクセス parent.title=アプリケーション リソース parent.link=index.html @jd:body
アプリケーションでリソースを提供すると(詳細は「リソースの提供」)、リソース ID を参照することで適用できるようになります。リソース ID はすべてプロジェクトの {@code R} クラスで定義します。これは {@code aapt} ツールが自動的に生成します。
アプリケーションをコンパイルすると、{@code aapt} が {@code R} クラスを生成します。このクラスには、{@code res/} ディレクトリに含まれるの全リソースのリソース ID が入ります。 リソースのそれぞれのタイプに対して、{@code R} サブクラス(例: ドローアブル リソースの場合はすべて {@code R.drawable})があり、そのタイプのそれぞれのリソースには、静的整数(例: {@code R.drawable.icon})があります。 この整数がリソース ID であり、リソースを取得するのに使用できます。
{@code R} クラスではリソース ID を指定されていますが、リソース ID を探す必要はありません。リソース ID は常に次のように構成されます。
リソースにアクセスするには次の 2 つの方法があります。
R.string.hello
{@code string} はリソースタイプ、{@code hello} はリソース名です。多くの Android API が、リソース ID をこの形式で指定してリソースにアクセスします。 コードでリソースにアクセスするをご覧ください。
@string/hello
{@code string} はリソースタイプ、{@code hello} はリソース名です。この構文は、リソースで提供する値が想定される、XML リソース内の任意の場所に使用できます。 XML からリソースにアクセスするをご覧ください。
リソース ID をメソッド パラメータとして渡すことで、コード内でリソースを使用できます。たとえば、{@link android.widget.ImageView#setImageResource(int) setImageResource()} を使って、{@link android.widget.ImageView} が {@code res/drawable/myimage.png} を使用するように設定できます。
ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
さらに、{@link android.content.res.Resources} のメソッドを使用して、個々のリソースを取得することもできます。{@link android.content.Context#getResources()} を使用すると、インスタンスを取得できます。
一般的な操作ではありませんが、元のファイルやディレクトリへのアクセスが必要になることがあります。その場合、{@code res/} からリソースを読み込むにはリソース ID が必要なため、{@code res/} にファイルを保存しても機能しません。その代わりに、{@code assets/} ディレクトリにリソースを保存します。
{@code assets/} ディレクトリに保存したファイルにはリソース ID が付与されないため、{@code R} クラスや XML リソースからはそれらのファイルを参照できません。 その代わりに、通常のファイル システムのように {@code assets/} ディレクトリ内のファイルを照会し、{@link android.content.res.AssetManager} を使用して未処理のデータを読み込みます。
ただし、単に(ビデオやオーディオなどの)未処理データの読み込みのみが必要となる場合は、ファイルを {@code res/raw/} ディレクトリに保存し、{@link android.content.res.Resources#openRawResource(int) openRawResource()} を使用してバイトのストリームを読み込みます。
次の構文を使用して、コード内のリソースを参照します。
[<package_name>.]R.<resource_type>.<resource_name>
リソースタイプの詳細やそれらの査証方法については、「Resource Types」をご覧ください。
多くのメソッドでリソース ID パラメータを使うことができ、{@link android.content.res.Resources} のメソッドを使用すればリソースを取得できます。 {@link android.content.res.Resources} のインスタンスは、{@link android.content.Context#getResources Context.getResources()} により取得できます。
次は、コードのリソースにアクセスする例です。
// Load a background for the current screen from a drawable resource {@link android.app.Activity#getWindow()}.{@link android.view.Window#setBackgroundDrawableResource(int) setBackgroundDrawableResource}(R.drawable.my_background_image) ; // Set the Activity title by getting a string from the Resources object, because // this method requires a CharSequence rather than a resource ID {@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence) setTitle}(getResources().{@link android.content.res.Resources#getText(int) getText}(R.string.main_title)); // Load a custom layout for the current screen {@link android.app.Activity#setContentView(int) setContentView}(R.layout.main_screen); // Set a slide in animation by getting an Animation from the Resources object mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation) setInAnimation}(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in)); // Set the text on a TextView object using a resource ID TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.{@link android.widget.TextView#setText(int) setText}(R.string.hello_message);
警告: {@code R.java} ファイルを手動で修正しないでください。—プロジェクトがコンパイルされると、{@code aapt} ツールによって生成されます。 変更した場合は、次回のコンパイルの際に上書きされます。
一部の XML 属性や要素の値は、既存のリソースへの参照を使用して定義できます。 通常は、ウィジェットに文字列や画像を提供するレイアウト ファイルを作成する場合に、この方法を使用します。
たとえば、レイアウトに {@link android.widget.Button} を追加する場合は、次のように、ボタンテキストの文字列リソースを使用します。
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/submit" />
次の構文を使用して、XML リソース内のリソースを参照します。
@[<package_name>:]<resource_type>/<resource_name>
リソースタイプの詳細やそれらの査証方法については、「Resource Types」をご覧ください。
場合によっては、XML の値にリソースを使用する必要がありますが(ウィジェットにドローアブル画像を適用するような場合など)、単純な値を受け入れる XML の任意の場所にリソースを使用できます。 たとえば、カラーリソースと文字列リソースを持つ、次のようなリソースがあるとします。
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="opaque_red">#f00</color> <string name="hello">Hello!</string> </resources>
これらのリソースを次のようなレイアウト ファイルに使用して、テキストカラーとテキストの文字列を設定できます。
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/opaque_red" android:text="@string/hello" />
この場合、リソースは独自のパッケージ内のものであることから、リソースの参照でパッケージ名を指定する必要はありません。 システム リソースを参照するには、パッケージ名を含める必要があります。 次に例を示します。
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@android:color/secondary_text_dark" android:text="@string/hello" />
注: アプリケーションを他の言語にローカライズできるように、常に文字列リソースを使用するようにします。 代替リソース(ローカライズされた文字列など)の作成方法についての詳細は、代替リソースを提供するをご覧ください。 アプリケーションを他の言語にローカライズするための詳細なガイドは、「Localization」をご覧ください。
XML でリソースを使用すれば、エイリアスを作成することもできます。たとえば、別のドローアブル リソースのエイリアスとなる、次のようなドローアブル リソースを作成できます。
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/other_drawable" />
これは冗長のように思われますが、代替リソースを使用する場合に大変便利です。詳細は、エイリアス リソースを作成するをご覧ください。
スタイル属性リソースを使用すると、現在適用されているテーマの属性の値を参照できます。 スタイル属性を参照すれば、ハードコードした値を指定しなくても、現在のテーマで与えられる標準的なバリエーションに合わせてスタイルを設定して、UI 要素の外観をカスタマイズできます。 本質的に、スタイル属性を参照するというのは、「現在のテーマのこの属性で定義されるスタイルを使用する」という意味になります。
属性スタイルを参照する場合、名前構文は通常のリソース形式とほぼ同じですが、アットマーク({@code @})の代わりに疑問符({@code ?})を使用します。リソースタイプの部分は省略可能です。 例:
?[<package_name>:][<resource_type>/]<resource_name>
たとえば、次の例では、属性を参照して、テキスト カラーをシステム テーマの「プライマリ」テキスト カラーに合わせて設定します。
<EditText id="text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="?android:textColorSecondary" android:text="@string/hello_world" />
ここでは、{@code android:textColor} 属性が、現在のテーマのスタイル属性の名前を指定しています。
Android は、{@code android:textColorSecondary} スタイル属性に適用された値を、このウィジェットの {@code android:textColor} の値として使用できるようになりました。
このコンテキストで属性リソースが必要なことはシステム リソース ツールで認識されているため、タイプ(ここでは ?android:attr/textColorSecondary
)を明示的に指定する必要はありません — {@code attr} タイプを除外できます。
Android には、スタイル、テーマ、レイアウトといった多数の標準的なリソースが用意されています。これらのリソースにアクセスするには、android
パッケージ名でリソース参照を修飾します。
たとえば、Android には、{@link android.widget.ListAdapter} のリストアイテムに使用できるレイアウト リソースが用意されています。
{@link android.app.ListActivity#setListAdapter(ListAdapter) setListAdapter}(new {@link android.widget.ArrayAdapter}<String>(this, android.R.layout.simple_list_item_1, myarray));
この例では、{@link android.R.layout#simple_list_item_1} は、プラットフォームによって {@link android.widget.ListView} のアイテム向けに定義されるレイアウト リソースです。 リストアイテムに独自のレイアウトを作成する代わりに、このレイアウトを使用できます。 詳細については、「List View」のデベロッパー ガイドをご覧ください。