1page.title=リソースへのアクセス 2parent.title=アプリケーション リソース 3parent.link=index.html 4@jd:body 5 6<div id="qv-wrapper"> 7<div id="qv"> 8 <h2>クイックビュー</h2> 9 <ul> 10 <li>リソースは、{@code R.java} の整数を使うコード({@code R.drawable.myimage} など)を使用して参照できます。 11</li> 12 <li>リソースは、特殊な XML 構文({@code 13@drawable/myimage} など)を使用して参照できます。</li> 14 <li>さらに、{@link android.content.res.Resources} のメソッドを使用すると、アプリ リソースにアクセスできます。 15</li> 16 </ul> 17 18 <h2>キークラス</h2> 19 <ol> 20 <li>{@link android.content.res.Resources}</li> 21 </ol> 22 23 <h2>本書の内容</h2> 24 <ol> 25 <li><a href="#ResourcesFromCode">コードからリソースにアクセスする</a></li> 26 <li><a href="#ResourcesFromXml">XML からリソースにアクセスする</a> 27 <ol> 28 <li><a href="#ReferencesToThemeAttributes">スタイル属性を参照する</a></li> 29 </ol> 30 </li> 31 <li><a href="#PlatformResources">プラットフォーム リソースにアクセスする</a></li> 32 </ol> 33 34 <h2>関連ドキュメント</h2> 35 <ol> 36 <li><a href="providing-resources.html">リソースの提供</a></li> 37 <li><a href="available-resources.html">Resource Types</a></li> 38 </ol> 39</div> 40</div> 41 42 43 44 45<p>アプリケーションでリソースを提供すると(詳細は「<a href="providing-resources.html">リソースの提供</a>」)、リソース ID を参照することで適用できるようになります。リソース ID はすべてプロジェクトの {@code R} クラスで定義します。これは {@code aapt} ツールが自動的に生成します。 46 47</p> 48 49<p>アプリケーションをコンパイルすると、{@code aapt} が {@code R} クラスを生成します。このクラスには、{@code 50res/} ディレクトリに含まれるの全リソースのリソース ID が入ります。 51リソースのそれぞれのタイプに対して、{@code R} サブクラス(例: ドローアブル リソースの場合はすべて {@code R.drawable})があり、そのタイプのそれぞれのリソースには、静的整数(例: {@code R.drawable.icon})があります。 52 53この整数がリソース ID であり、リソースを取得するのに使用できます。 54</p> 55 56<p>{@code R} クラスではリソース ID を指定されていますが、リソース ID を探す必要はありません。リソース ID は常に次のように構成されます。 57</p> 58<ul> 59 <li><em>リソースタイプ</em>: それぞれのリソースは、{@code 60string}、{@code drawable}、{@code layout} のようなタイプにグループ化されます。さまざまなタイプに関する詳細は、「<a href="available-resources.html">Resource Types</a>」をご覧ください。 61 </li> 62 <li><em>リソース名</em>。これは、拡張子を除外したファイル名か、XML {@code android:name} 属性(リソースが文字列などの単純な値の場合)のいずれかになります。 63 64</li> 65</ul> 66 67<p>リソースにアクセスするには次の 2 つの方法があります。</p> 68<ul> 69 <li><strong>コード内:</strong> {@code R} クラスのサブクラスから次のような静的整数を使用します。 70 71 <pre class="classic no-pretty-print">R.string.hello</pre> 72 <p>{@code string} はリソースタイプ、{@code hello} はリソース名です。多くの Android API が、リソース ID をこの形式で指定してリソースにアクセスします。 73<a href="#ResourcesFromCode">コードでリソースにアクセスする</a>をご覧ください。 74</p> 75 </li> 76 <li><strong>XML 内:</strong> {@code R} クラスで定義するリソース ID に対応する、次のような特殊な XML 構文を使用します。 77 78 <pre class="classic no-pretty-print">@string/hello</pre> 79 <p>{@code string} はリソースタイプ、{@code hello} はリソース名です。この構文は、リソースで提供する値が想定される、XML リソース内の任意の場所に使用できます。 80<a href="#ResourcesFromXml">XML からリソースにアクセスする</a>をご覧ください。</p> 81 </li> 82</ul> 83 84 85 86<h2 id="ResourcesFromCode">コードでリソースにアクセスする </h2> 87 88<p>リソース ID をメソッド パラメータとして渡すことで、コード内でリソースを使用できます。たとえば、{@link android.widget.ImageView#setImageResource(int) setImageResource()} を使って、{@link android.widget.ImageView} が {@code res/drawable/myimage.png} を使用するように設定できます。 89 90</p> 91<pre> 92ImageView imageView = (ImageView) findViewById(R.id.myimageview); 93imageView.setImageResource(<strong>R.drawable.myimage</strong>); 94</pre> 95 96<p>さらに、{@link 97android.content.res.Resources} のメソッドを使用して、個々のリソースを取得することもできます。{@link android.content.Context#getResources()} を使用すると、インスタンスを取得できます。 98</p> 99 100<div class="sidebox-wrapper"> 101<div class="sidebox"> 102<h2>元のファイルへのアクセス</h2> 103 104<p>一般的な操作ではありませんが、元のファイルやディレクトリへのアクセスが必要になることがあります。その場合、{@code res/} からリソースを読み込むにはリソース ID が必要なため、{@code res/} にファイルを保存しても機能しません。その代わりに、{@code assets/} ディレクトリにリソースを保存します。 105 106 107</p> 108<p>{@code assets/} ディレクトリに保存したファイルにはリソース ID が付与されないため、<em></em>{@code R} クラスや XML リソースからはそれらのファイルを参照できません。 109その代わりに、通常のファイル システムのように {@code assets/} ディレクトリ内のファイルを照会し、{@link android.content.res.AssetManager} を使用して未処理のデータを読み込みます。 110 111</p> 112<p>ただし、単に(ビデオやオーディオなどの)未処理データの読み込みのみが必要となる場合は、ファイルを {@code res/raw/} ディレクトリに保存し、{@link 113android.content.res.Resources#openRawResource(int) openRawResource()} を使用してバイトのストリームを読み込みます。 114</p> 115 116</div> 117</div> 118 119 120<h3>構文</h3> 121 122<p>次の構文を使用して、コード内のリソースを参照します。</p> 123 124<pre class="classic no-pretty-print"> 125[<em><package_name></em>.]R.<em><resource_type></em>.<em><resource_name></em> 126</pre> 127 128<ul> 129 <li><em>{@code <package_name>}</em> は、リソースが配置されるパッケージの名前です(独自のパッケージからリソースを参照する場合は必要ありません)。 130</li> 131 <li><em>{@code <resource_type>}</em> は、リソースタイプの {@code R} サブクラスです。</li> 132 <li><em>{@code <resource_name>}</em> は、拡張子以外のリソース ファイル名か、XML 要素の {@code android:name} 属性値(単純な値の場合)のいずれかになります。 133 134</li> 135</ul> 136<p>リソースタイプの詳細やそれらの査証方法については、「<a href="available-resources.html">Resource Types</a>」をご覧ください。 137</p> 138 139 140<h3>使用例</h3> 141 142<p>多くのメソッドでリソース ID パラメータを使うことができ、{@link android.content.res.Resources} のメソッドを使用すればリソースを取得できます。 143{@link 144android.content.res.Resources} のインスタンスは、{@link android.content.Context#getResources 145Context.getResources()} により取得できます。</p> 146 147 148<p>次は、コードのリソースにアクセスする例です。</p> 149 150<pre> 151// Load a background for the current screen from a drawable resource 152{@link android.app.Activity#getWindow()}.{@link 153android.view.Window#setBackgroundDrawableResource(int) 154setBackgroundDrawableResource}(<strong>R.drawable.my_background_image</strong>) ; 155 156// Set the Activity title by getting a string from the Resources object, because 157// this method requires a CharSequence rather than a resource ID 158{@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence) 159setTitle}(getResources().{@link android.content.res.Resources#getText(int) 160getText}(<strong>R.string.main_title</strong>)); 161 162// Load a custom layout for the current screen 163{@link android.app.Activity#setContentView(int) 164setContentView}(<strong>R.layout.main_screen</strong>); 165 166// Set a slide in animation by getting an Animation from the Resources object 167mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation) 168setInAnimation}(AnimationUtils.loadAnimation(this, 169 <strong>R.anim.hyperspace_in</strong>)); 170 171// Set the text on a TextView object using a resource ID 172TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>); 173msgTextView.{@link android.widget.TextView#setText(int) 174setText}(<strong>R.string.hello_message</strong>); 175</pre> 176 177 178<p class="caution"><strong>警告:</strong> {@code 179R.java} ファイルを手動で修正しないでください。—プロジェクトがコンパイルされると、{@code aapt} ツールによって生成されます。 180変更した場合は、次回のコンパイルの際に上書きされます。</p> 181 182 183 184<h2 id="ResourcesFromXml">XML からリソースにアクセスする</h2> 185 186<p>一部の XML 属性や要素の値は、既存のリソースへの参照を使用して定義できます。 187通常は、ウィジェットに文字列や画像を提供するレイアウト ファイルを作成する場合に、この方法を使用します。 188</p> 189 190<p>たとえば、レイアウトに {@link android.widget.Button} を追加する場合は、次のように、ボタンテキストの<a href="string-resource.html">文字列リソース</a>を使用します。 191</p> 192 193<pre> 194<Button 195 android:layout_width="fill_parent" 196 android:layout_height="wrap_content" 197 android:text="<strong>@string/submit</strong>" /> 198</pre> 199 200 201<h3>構文</h3> 202 203<p>次の構文を使用して、XML リソース内のリソースを参照します。</p> 204 205<pre class="classic no-pretty-print"> 206@[<em><package_name></em>:]<em><resource_type></em>/<em><resource_name></em> 207</pre> 208 209<ul> 210 <li>{@code <package_name>} は、リソースが配置されるパッケージの名前です(同一のパッケージからリソースを参照する場合は必要ありません) 211</li> 212 <li>{@code <resource_type>} は、リソースタイプの {@code R} サブクラスです 213</li> 214 <li>{@code <resource_name>} は、拡張子以外のリソース ファイル名か、XML 要素の {@code android:name} 属性値(単純な値の場合)のいずれかになります。 215 216</li> 217</ul> 218 219<p>リソースタイプの詳細やそれらの査証方法については、「<a href="available-resources.html">Resource Types</a>」をご覧ください。 220</p> 221 222 223<h3>使用例</h3> 224 225<p>場合によっては、XML の値にリソースを使用する必要がありますが(ウィジェットにドローアブル画像を適用するような場合など)、単純な値を受け入れる XML の任意の場所にリソースを使用できます。 226たとえば、<a href="more-resources.html#Color">カラーリソース</a>と<a href="string-resource.html">文字列リソース</a>を持つ、次のようなリソースがあるとします。 227</p> 228 229<pre> 230<?xml version="1.0" encoding="utf-8"?> 231<resources> 232 <color name="opaque_red">#f00</color> 233 <string name="hello">Hello!</string> 234</resources> 235</pre> 236 237<p>これらのリソースを次のようなレイアウト ファイルに使用して、テキストカラーとテキストの文字列を設定できます。 238</p> 239 240<pre> 241<?xml version="1.0" encoding="utf-8"?> 242<EditText xmlns:android="http://schemas.android.com/apk/res/android" 243 android:layout_width="fill_parent" 244 android:layout_height="fill_parent" 245 android:textColor="<strong>@color/opaque_red</strong>" 246 android:text="<strong>@string/hello</strong>" /> 247</pre> 248 249<p>この場合、リソースは独自のパッケージ内のものであることから、リソースの参照でパッケージ名を指定する必要はありません。 250システム リソースを参照するには、パッケージ名を含める必要があります。 251次に例を示します。</p> 252 253<pre> 254<?xml version="1.0" encoding="utf-8"?> 255<EditText xmlns:android="http://schemas.android.com/apk/res/android" 256 android:layout_width="fill_parent" 257 android:layout_height="fill_parent" 258 android:textColor="<strong>@android:color/secondary_text_dark</strong>" 259 android:text="@string/hello" /> 260</pre> 261 262<p class="note"><strong>注:</strong> アプリケーションを他の言語にローカライズできるように、常に文字列リソースを使用するようにします。 263代替リソース(ローカライズされた文字列など)の作成方法についての詳細は、<a href="providing-resources.html#AlternativeResources">代替リソースを提供する</a>をご覧ください。 264 265 266アプリケーションを他の言語にローカライズするための詳細なガイドは、「<a href="localization.html">Localization</a>」をご覧ください。 267</p> 268 269<p>XML でリソースを使用すれば、エイリアスを作成することもできます。たとえば、別のドローアブル リソースのエイリアスとなる、次のようなドローアブル リソースを作成できます。 270</p> 271 272<pre> 273<?xml version="1.0" encoding="utf-8"?> 274<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 275 android:src="@drawable/other_drawable" /> 276</pre> 277 278<p>これは冗長のように思われますが、代替リソースを使用する場合に大変便利です。詳細は、<a href="providing-resources.html#AliasResources">エイリアス リソースを作成する</a>をご覧ください。 279</p> 280 281 282 283<h3 id="ReferencesToThemeAttributes">スタイル属性を参照する</h3> 284 285<p>スタイル属性リソースを使用すると、現在適用されているテーマの属性の値を参照できます。 286スタイル属性を参照すれば、ハードコードした値を指定しなくても、現在のテーマで与えられる標準的なバリエーションに合わせてスタイルを設定して、UI 要素の外観をカスタマイズできます。 287 288本質的に、スタイル属性を参照するというのは、「現在のテーマのこの属性で定義されるスタイルを使用する」という意味になります。 289</p> 290 291<p>属性スタイルを参照する場合、名前構文は通常のリソース形式とほぼ同じですが、アットマーク({@code @})の代わりに疑問符({@code ?})を使用します。リソースタイプの部分は省略可能です。 292 293例: </p> 294 295<pre class="classic"> 296?[<em><package_name></em>:][<em><resource_type></em>/]<em><resource_name></em> 297</pre> 298 299<p>たとえば、次の例では、属性を参照して、テキスト カラーをシステム テーマの「プライマリ」テキスト カラーに合わせて設定します。 300</p> 301 302<pre> 303<EditText id="text" 304 android:layout_width="fill_parent" 305 android:layout_height="wrap_content" 306 android:textColor="<strong>?android:textColorSecondary</strong>" 307 android:text="@string/hello_world" /> 308</pre> 309 310<p>ここでは、{@code android:textColor} 属性が、現在のテーマのスタイル属性の名前を指定しています。 311Android は、{@code android:textColorSecondary} スタイル属性に適用された値を、このウィジェットの {@code android:textColor} の値として使用できるようになりました。 312このコンテキストで属性リソースが必要なことはシステム リソース ツールで認識されているため、タイプ(ここでは <code>?android:attr/textColorSecondary</code>)を明示的に指定する必要はありません — {@code attr} タイプを除外できます。 313 314 315</p> 316 317 318 319 320<h2 id="PlatformResources">プラットフォーム リソースにアクセスする</h2> 321 322<p>Android には、スタイル、テーマ、レイアウトといった多数の標準的なリソースが用意されています。これらのリソースにアクセスするには、<code>android</code> パッケージ名でリソース参照を修飾します。 323 324たとえば、Android には、{@link android.widget.ListAdapter} のリストアイテムに使用できるレイアウト リソースが用意されています。 325</p> 326 327<pre> 328{@link android.app.ListActivity#setListAdapter(ListAdapter) 329setListAdapter}(new {@link 330android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray)); 331</pre> 332 333<p>この例では、{@link android.R.layout#simple_list_item_1} は、プラットフォームによって {@link android.widget.ListView} のアイテム向けに定義されるレイアウト リソースです。 334リストアイテムに独自のレイアウトを作成する代わりに、このレイアウトを使用できます。 335詳細については、「<a href="{@docRoot}guide/topics/ui/layout/listview.html">List View</a>」のデベロッパー ガイドをご覧ください。 336</p> 337 338