• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&#64;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">&#64;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>&lt;package_name&gt;</em>.]R.<em>&lt;resource_type&gt;</em>.<em>&lt;resource_name&gt;</em>
126</pre>
127
128<ul>
129  <li><em>{@code &lt;package_name&gt;}</em> は、リソースが配置されるパッケージの名前です(独自のパッケージからリソースを参照する場合は必要ありません)。
130</li>
131  <li><em>{@code &lt;resource_type&gt;}</em> は、リソースタイプの {@code R} サブクラスです。</li>
132  <li><em>{@code &lt;resource_name&gt;}</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} ファイルを手動で修正しないでください。&mdash;プロジェクトがコンパイルされると、{@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&lt;Button
195    android:layout_width="fill_parent"
196    android:layout_height="wrap_content"
197    android:text="<strong>@string/submit</strong>" /&gt;
198</pre>
199
200
201<h3>構文</h3>
202
203<p>次の構文を使用して、XML リソース内のリソースを参照します。</p>
204
205<pre class="classic no-pretty-print">
206&#64;[<em>&lt;package_name&gt;</em>:]<em>&lt;resource_type&gt;</em>/<em>&lt;resource_name&gt;</em>
207</pre>
208
209<ul>
210  <li>{@code &lt;package_name&gt;} は、リソースが配置されるパッケージの名前です(同一のパッケージからリソースを参照する場合は必要ありません)
211</li>
212  <li>{@code &lt;resource_type&gt;} は、リソースタイプの {@code R} サブクラスです
213</li>
214  <li>{@code &lt;resource_name&gt;} は、拡張子以外のリソース ファイル名か、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&lt;?xml version="1.0" encoding="utf-8"?>
231&lt;resources>
232   &lt;color name="opaque_red">#f00&lt;/color>
233   &lt;string name="hello">Hello!&lt;/string>
234&lt;/resources>
235</pre>
236
237<p>これらのリソースを次のようなレイアウト ファイルに使用して、テキストカラーとテキストの文字列を設定できます。
238</p>
239
240<pre>
241&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
242&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
243    android:layout_width=&quot;fill_parent&quot;
244    android:layout_height=&quot;fill_parent&quot;
245    android:textColor=&quot;<strong>&#64;color/opaque_red</strong>&quot;
246    android:text=&quot;<strong>&#64;string/hello</strong>&quot; /&gt;
247</pre>
248
249<p>この場合、リソースは独自のパッケージ内のものであることから、リソースの参照でパッケージ名を指定する必要はありません。
250システム リソースを参照するには、パッケージ名を含める必要があります。
251次に例を示します。</p>
252
253<pre>
254&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
255&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
256    android:layout_width=&quot;fill_parent&quot;
257    android:layout_height=&quot;fill_parent&quot;
258    android:textColor=&quot;<strong>&#64;android:color/secondary_text_dark</strong>&quot;
259    android:text=&quot;&#64;string/hello&quot; /&gt;
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&lt;?xml version="1.0" encoding="utf-8"?>
274&lt;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>&lt;package_name&gt;</em>:][<em>&lt;resource_type&gt;</em>/]<em>&lt;resource_name&gt;</em>
297</pre>
298
299<p>たとえば、次の例では、属性を参照して、テキスト カラーをシステム テーマの「プライマリ」テキスト カラーに合わせて設定します。
300</p>
301
302<pre>
303&lt;EditText id=&quot;text&quot;
304    android:layout_width=&quot;fill_parent&quot;
305    android:layout_height=&quot;wrap_content&quot;
306    android:textColor=&quot;<strong>?android:textColorSecondary</strong>&quot;
307    android:text=&quot;&#64;string/hello_world&quot; /&gt;
308</pre>
309
310<p>ここでは、{@code android:textColor} 属性が、現在のテーマのスタイル属性の名前を指定しています。
311Android は、{@code android:textColorSecondary} スタイル属性に適用された値を、このウィジェットの {@code android:textColor} の値として使用できるようになりました。
312このコンテキストで属性リソースが必要なことはシステム リソース ツールで認識されているため、タイプ(ここでは <code>?android:attr/textColorSecondary</code>)を明示的に指定する必要はありません &mdash; {@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}&lt;String&gt;(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