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 res/} のそれぞれのサブディレクトリにはさまざまなタイプのリソースがある</li> 11 <li>代替リソースは設定固有のリソース ファイルを提供する</li> 12 <li>特定の端末設定に依存しないように、デフォルトのリソースを常に入れておく 13</li> 14 </ul> 15 <h2>本書の内容</h2> 16 <ol> 17 <li><a href="#ResourceTypes">リソースタイプをグループ化する</a></li> 18 <li><a href="#AlternativeResources">代替リソースを提供する</a> 19 <ol> 20 <li><a href="#QualifierRules">修飾子の名前のルール</a></li> 21 <li><a href="#AliasResources">エイリアス リソースを作成する</a></li> 22 </ol> 23 </li> 24 <li><a href="#Compatibility">リソースとの最適な端末の互換性を提供する</a></li> 25 <li><a href="#BestMatch">Android が最適なリソースを見つける仕組み</a></li> 26 </ol> 27 28 <h2>関連ドキュメント</h2> 29 <ol> 30 <li><a href="accessing-resources.html">リソースへのアクセス</a></li> 31 <li><a href="available-resources.html">Resource Types</a></li> 32 <li><a href="{@docRoot}guide/practices/screens_support.html">複数のスクリーンをサポートする</a> 33</li> 34 </ol> 35</div> 36</div> 37 38<p>画像や文字列といったアプリケーション リソースは、常にコードの外部に置くようにすることで、独立して保持できるようになります。 39さらに、特別に名前を設定したリソース ディレクトリにグループ化することで、特定の端末設定に代替リソースを提供する必要があります。 40実行時には、現在の設定に基づいて、Android は適切なリソースを使用します。 41たとえば、画面サイズに応じて異なる UI レイアウトを提供したり、言語設定に応じて異なる文字列を提供したりできます。 42 43</p> 44 45<p>アプリケーション リソースを外部化したら、プロジェクトの {@code R} クラスで生成されるリソース ID を使用してそれらのリソースにアクセスできます。 46アプリケーションでのリソースの使用方法については、「<a href="accessing-resources.html">リソースへのアクセス</a>」をご覧ください。 47 48このドキュメントでは、Android プロジェクトでリソースをグループ化する方法と、特定の端末設定に代替リソースを提供する方法を説明します。 49</p> 50 51 52<h2 id="ResourceTypes">リソースタイプをグループ化する</h2> 53 54<p>それぞれのタイプのリソースを、プロジェクトの {@code res/} ディレクトリの特定のサブディレクトリに配置する必要があります。 55次は、単純なプロジェクトのファイル階層の例です。</p> 56 57<pre class="classic no-pretty-print"> 58MyProject/ 59 src/ <span style="color:black"> 60 MyActivity.java </span> 61 res/ 62 drawable/ <span style="color:black"> 63 graphic.png </span> 64 layout/ <span style="color:black"> 65 main.xml 66 info.xml</span> 67 mipmap/ <span style="color:black"> 68 icon.png </span> 69 values/ <span style="color:black"> 70 strings.xml </span> 71</pre> 72 73<p>この例を見てわかるように、{@code res/} ディレクトリには、画像リソース、2 つのレイアウト リソース、ランチャー アイコンの {@code mipmap/} ディレクトリ、文字列リソース ファイルといった、すべてのリソース(サブディレクトリ内)が入ります。 74 75リソース ディレクトリ名は重要です。表 1 に説明があります。 76</p> 77 78<p class="note"><strong>注:</strong> Mipmap フォルダの使用方法については、「<a href="{@docRoot}tools/projects/index.html#mipmap">Managing Projects Overview</a>」をご覧ください。 79</p> 80 81<p class="table-caption" id="table1"><strong>表 1.</strong> プロジェクト {@code res/} ディレクトリ内でサポートされているリソース ディレクトリ。 82</p> 83 84<table> 85 <tr> 86 <th scope="col">ディレクトリ</th> 87 <th scope="col">リソースタイプ</th> 88 </tr> 89 90 <tr> 91 <td><code>animator/</code></td> 92 <td><a href="{@docRoot}guide/topics/graphics/prop-animation.html">プロパティ アニメーション</a>を定義する XML ファイル。 93</td> 94 </tr> 95 96 <tr> 97 <td><code>anim/</code></td> 98 <td><a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">トゥイーン アニメーション</a>を定義する XML ファイル。 99(プロパティ アニメーションをこのディレクトリに保存することもできますが、2 つのタイプを区別するために、プロパティ アニメーションは {@code animator/} ディレクトリに保存することをお勧めします)。 100 101</td> 102 </tr> 103 104 <tr> 105 <td><code>color/</code></td> 106 <td>色の状態リストを定義する XML ファイル。「<a href="color-list-resource.html">Color State List Resource</a>」をご覧ください。 107</td> 108 </tr> 109 110 <tr> 111 <td><code>drawable/</code></td> 112 113 <td><p>ビットマップ ファイル({@code .png}、{@code .9.png}、{@code .jpg}、{@code .gif})または次のドローアブル リソース サブタイプにコンパイルされる XML ファイル: 114</p> 115 <ul> 116 <li>ビットマップ ファイル</li> 117 <li>Nine-Patche(リサイズ可能なビットマップ)</li> 118 <li>状態リスト</li> 119 <li>形状</li> 120 <li>アニメーション ドローアブル</li> 121 <li>その他のドローアブル</li> 122 </ul> 123 <p>「<a href="drawable-resource.html">Drawable Resources</a>」をご覧ください。</p> 124 </td> 125 </tr> 126 127 <tr> 128 <td><code>mipmap/</code></td> 129 <td>さまざまなランチャー アイコン密度のドローアブル ファイル。{@code mipmap/} フォルダによるランチャー アイコンの管理方法については、「<a href="{@docRoot}tools/project/index.html#mipmap">Managing Projects Overview</a>」をご覧ください。 130 131</td> 132 </tr> 133 134 <tr> 135 <td><code>layout/</code></td> 136 <td>ユーザー インターフェースのレイアウトを定義する XML ファイル。 137 「<a href="layout-resource.html">Layout Resource</a>」をご覧ください。</td> 138 </tr> 139 140 <tr> 141 <td><code>menu/</code></td> 142 <td>オプション メニュー、コンテキスト メニュー、サブ メニューといった、アプリケーション メニューを定義する XML ファイル。 143「<a href="menu-resource.html">Menu Resource</a>」をご覧ください。</td> 144 </tr> 145 146 <tr> 147 <td><code>raw/</code></td> 148 <td><p>未加工の形式で保存する任意のファイル。これらのリソースを未加工の {@link java.io.InputStream} で開くには、{@link android.content.res.Resources#openRawResource(int) 149Resources.openRawResource()} をリソース ID({@code R.raw.ファイル名<em></em>})とともに呼び出します。 150</p> 151 <p>ただし、元のファイル名とファイル階層にアクセスする必要がある場合は、一部のリソースを {@code 152assets/} ディレクトリ({@code res/raw/} の代わりに)に保存することを検討します。 153{@code assets/} のファイルにはリソース ID が付与されていないため、読み込むには {@link android.content.res.AssetManager} が必要です。 154</p></td> 155 </tr> 156 157 <tr> 158 <td><code>values/</code></td> 159 <td><p>文字列、整数、色など、単純な値を含む XML ファイル。</p> 160 <p>その他の {@code res/} サブディレクトリの XML リソース ファイルは XML ファイル名に基づいて 1 つのリソースを定義しますが、{@code values/} ディレクトリのファイルは複数のリソースを表します。このディレクトリのファイルの場合、{@code <resources>} 要素のそれぞれの子が 1 つのリソースを定義します。 161 162 163たとえば、{@code <string>} 要素は {@code R.string} リソースを作成し、{@code <color>} 要素は {@code R.color} リソースを作成します。 164 165</p> 166 <p>各リソースの定義には XML 要素を使用するため、ファイルには任意の名前を設定でき、1 つのファイル内にさまざまなリソースを配置できます。 167ただし、わかりやすくするために、一意のリソースタイプをそれぞれのファイルに配置することもできます。 168次は、このディレクトリで作成できるリソースのファイル名の変換例です。 169</p> 170 <ul> 171 <li>リソースの配列の場合 arrays.xml(<a href="more-resources.html#TypedArray">型付き配列</a>)。</li> 172 <li><a href="more-resources.html#Color">色の値</a>の場合 colors.xml </li> 173 <li><a href="more-resources.html#Dimension">寸法の値</a>の場合 dimens.xml。</li> 174 <li><a href="string-resource.html">文字列の値</a>の場合 strings.xml。 175</li> 176 <li><a href="style-resource.html">スタイル</a>の場合 styles.xml。</li> 177 </ul> 178 <p>「<a href="string-resource.html">String Resources</a>」、「<a href="style-resource.html">Style Resource</a>」、「<a href="more-resources.html">More Resource Types</a>」をご覧ください。 179 180</p> 181 </td> 182 </tr> 183 184 <tr> 185 <td><code>xml/</code></td> 186 <td>{@link 187android.content.res.Resources#getXml(int) Resources.getXML()} を呼び出すことによって、実行時に読み込むことができる任意の XML ファイル。ここには、<a href="{@docRoot}guide/topics/search/searchable-config.html">検索可能な設定</a>など、各種の XML 設定ファイルが保存されます。 188 189<!-- or preferences configuration. --></td> 190 </tr> 191</table> 192 193<p class="caution"><strong>警告:</strong> リソース ファイルを {@code res/} ディレクトリに直接保存しないでください。—コンパイラー エラーの原因になります。 194</p> 195 196<p>リソースの特定のタイプの詳細は、「<a href="available-resources.html">Resource Types</a>」のドキュメントをご覧ください。</p> 197 198<p>表 1 で定義したサブディレクトリに保存するリソースは、「デフォルト」のリソースとなります。 199つまり、これらのリソースはアプリケーションのデフォルトのデザインとコンテンツを定義します。ただし、Android が搭載された端末では別のタイプのリソースが呼び出されることがあります。たとえば、端末の画面サイズが通常のものよりも大きな場合、追加の画面スペースを利用する別のレイアウト リソースを提供する必要があります。 200 201 202また、端末の言語設定が異なる場合、使用するユーザー インターフェースのテキストを翻訳する、別の文字列リソースを提供します。 203 204さまざまな端末設定にこれらの異なるリソースを提供するには、デフォルトのリソースに加えて、代替リソースを提供する必要があります。 205 206</p> 207 208 209<h2 id="AlternativeResources">代替リソースを提供する</h2> 210 211 212<div class="figure" style="width:429px"> 213<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" /> 214<p class="img-caption"> 215<strong>図 1.</strong> 別のレイアウト リソースを使用する、2 つの異なる端末。</p> 216</div> 217 218<p>ほぼすべてのアプリケーションが、特定の端末設定をサポートするための代替リソースを提供します。 219たとえば、画面密度が異なる場合は代替ドローアブル リソースを含め、言語が異ならう場合は代替文字列リソースを含めます。 220実行時には、Android が現在の端末設定を検出し、アプリケーションに合ったリソースを読み込みます。 221 222</p> 223 224<p>一連のリソースに設定固有の代替リソースを指定するには:</p> 225<ol> 226 <li>{@code 227<em><resources_name></em>-<em><config_qualifier></em>} の形式で名前を付けた {@code res/} に新しいディレクトリを作成します。 228 <ul> 229 <li><em>{@code <resources_name>}</em> は、対応するディレクトリ リソースのディレクトリ名です(表 1 で定義)。 230</li> 231 <li><em>{@code <qualifier>}</em> は、リソースを使用する個々の設定を指定する名前です(表 2 で定義)。 232</li> 233 </ul> 234 <p>1 つ以上の <em>{@code <qualifier>}</em> を末尾に追加できます。それぞれの修飾子はダッシュを使用して区切ります。 235</p> 236 <p class="caution"><strong>警告:</strong> 複数の修飾子を末尾に追加する場合は、表 2 に記載されているのと同じ順番で配置する必要があります。 237修飾子の順番に誤りがあると、リソースが無視されます。 238</p> 239 </li> 240 <li>それぞれの代替リソースをこの新しいディレクトリに保存します。リソース ファイルの名前は、デフォルトのリソース ファイルと同じものにする必要があります。 241</li> 242</ol> 243 244<p>次に、デフォルト リソースと代替リソースの例を示します。</p> 245 246<pre class="classic no-pretty-print"> 247res/ 248 drawable/ <span style="color:black"> 249 icon.png 250 background.png </span> 251 drawable-hdpi/ <span style="color:black"> 252 icon.png 253 background.png </span> 254</pre> 255 256<p>{@code hdpi} 修飾子は、ディレクトリ内のリソースが高密度画面を持つ端末用であることを表します。 257これらのドローアブル ディレクトリの画像は特定の画面密度に合わせたサイズになっていますが、ファイル名は完全に同じになります。 258 259このように、{@code icon.png} や {@code 260background.png} 画像を参照するのに使用するリソース ID は常に同じになりますが、Android はリソース ディレクトリ名の修飾子により端末設定情報を比較して、各リソースの現在の端末に最適なバージョンを選択します。 261 262</p> 263 264<p>Android では複数の設定修飾子をサポートしており、それぞれの修飾子をダッシュで区切ることで、1 つのディレクトリ名に複数の修飾子を追加できます。 265表 2 には、有効な設定修飾子が優先度順に記載されています。—参照ディレクトリに複数の修飾子を使用する場合、表に記載されている順番にディレクトリ名に追加する必要があります。 266 267 268</p> 269 270 271<p class="table-caption" id="table2"><strong>表 2.</strong> 設定修飾子の名前。 272</p> 273<table> 274 <tr> 275 <th>設定</th> 276 <th>修飾子の値</th> 277 <th>説明</th> 278 </tr> 279 <tr id="MccQualifier"> 280 <td>MCC と MNC</td> 281 <td>例: <br/> 282 <code>mcc310</code><br/> 283 <code><nobr>mcc310-mnc004</nobr></code><br/> 284 <code>mcc208-mnc00</code><br/> 285 など 286 </td> 287 <td> 288 <p>モバイル カントリーコード(MCC)です。端末の SIM カードにあるモバイル ネットワーク コード(MNC)が続くことがあります。 289たとえば、<code>mcc310</code> は米国の任意の携帯通信会社、<code>mcc310-mnc004</code> は米国の Verizon、<code>mcc208-mnc00</code> はフランスの Orange となります。 290 291</p> 292 <p>端末が無線通信接続(GSM 電話)を使用する場合、MCC と MNC の値は SIM カードの値となります。 293</p> 294 <p>さらに、MCC のみを使用することもできます(たとえば、アプリケーションに国固有の法に関するリソースを含める場合)。 295言語のみに基づいて指定する場合は、代わりに<em>言語と地域</em>の修飾子(次のセクションで解説)を使用します。 296MCC と MNC 修飾子を使用する場合は、慎重に設定し、予測のとおりに機能することをテストします。 297</p> 298 <p>さらに、設定フィールド {@link 299android.content.res.Configuration#mcc}、{@link 300android.content.res.Configuration#mnc} もご覧ください。これらは、それぞれ、現在のモバイル カントリーコードとモバイル ネットワーク コードを表します。 301</p> 302 </td> 303 </tr> 304 <tr id="LocaleQualifier"> 305 <td>言語と地域</td> 306 <td>例: <br/> 307 <code>en</code><br/> 308 <code>fr</code><br/> 309 <code>en-rUS</code><br/> 310 <code>fr-rFR</code><br/> 311 <code>fr-rCA</code><br/> 312 など 313 </td> 314 <td><p>言語は 2 文字の <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO 639-1</a> 言語コードで定義し、オプションで、2 文字の <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1-alpha-2</a> 地域コードを後ろに追加します(先頭に小文字の「{@code r}」が付きます)。 315 316 317 318 </p><p> 319 コードでは大文字と小文字が区別されません。<em></em>地域を区別するには、{@code r} 接頭辞を使用します。 320 321 地域のみは指定できません。</p> 322 <p>ユーザーがシステム設定で言語を変更すると、アプリケーションの実行中にこの値が変更されます。 323実行時のアプリケーションに与える影響については、<a href="runtime-changes.html">実行時の変更の処理</a>をご覧ください。 324</p> 325 <p>アプリケーションを他の言語にローカライズするための詳細なガイドは、「<a href="localization.html">Localization</a>」をご覧ください。 326</p> 327 <p>さらに、{@link android.content.res.Configuration#locale} 設定フィールドもご覧ください。これは、現在のロケールを表します。 328</p> 329 </td> 330 </tr> 331 <tr id="LayoutDirectionQualifier"> 332 <td>レイアウトの方向</td> 333 <td><code>ldrtl</code><br/> 334 <code>ldltr</code><br/> 335 </td> 336 <td><p>アプリケーションのレイアウトの方向です。{@code ldrtl} は、「レイアウト方向は右から左」という意味になります。{@code ldltr} は、「レイアウト方向は左から右」という意味になります。この設定が暗黙的にデフォルト値となります。 337 338 </p> 339 <p>この設定は、レイアウト、ドローアブル、値など、任意のリソースに適用できます。 340 </p> 341 <p>たとえば、アラビア語に何らかの特定なレイアウトを提供し、その他の「右から左」の言語(ペルシャ語やヘブライ語)に汎用的なレイアウトを提供する場合、次のように設定します。 342 343 </p> 344<pre class="classic no-pretty-print"> 345res/ 346 layout/ <span style="color:black"> 347 main.xml </span>(Default layout) 348 layout-ar/ <span style="color:black"> 349 main.xml </span>(Specific layout for Arabic) 350 layout-ldrtl/ <span style="color:black"> 351 main.xml </span>(Any "right-to-left" language, except 352 for Arabic, because the "ar" language qualifier 353 has a higher precedence.) 354</pre> 355 <p class="note"><strong>注:</strong> アプリで右から左のレイアウト機能を有効にするには、<a href="{@docRoot}guide/topics/manifest/application-element.html#supportsrtl">{@code 356 supportsRtl}</a> を {@code "true"} に設定し、<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> を 17 以上に設定します。 357</p> 358 <p>API レベル 17 で追加。<em></em></p> 359 </td> 360 </tr> 361 <tr id="SmallestScreenWidthQualifier"> 362 <td>smallestWidth</td> 363 <td><code>sw<N>dp</code><br/><br/> 364 例: <br/> 365 <code>sw320dp</code><br/> 366 <code>sw600dp</code><br/> 367 <code>sw720dp</code><br/> 368 など 369 </td> 370 <td> 371 <p>使用可能な画面領域の最小寸法で指定する、画面の基本サイズ。 372具体的には、端末の smallestWidth は画面に使用できる高さと幅の最小サイズとなります(画面の「使用できる最小幅」と考えることもできます)。 373画面の現在の方向に関係なく、この修飾子を使用することで、アプリケーションの UI に少なくとも {@code <N>} dps の幅を使用できます。 374 375</p> 376 <p>たとえば、画面領域のレイアウトの最小寸法を常に 600 dp とする必要がある場合、この修飾子を使用してレイアウト リソース {@code 377res/layout-sw600dp/} を作成できます。 378システムは、600dp の側が縦になるか横になるか関係なく、使用可能な画面の最小寸法が 600dp 以上の場合にのみこれらのリソースを使用します。 379 380smallestWidth は端末の固定された画面サイズ特性です。<strong>画面の向きが変わっても、端末の smallestWidth は変更されません。</strong> 381</p> 382 <p>端末の smallestWidth では画面の装飾とシステム UI が考慮されます。たとえば、端末の画面に smallestWidth の軸に沿ったスペースを考慮した固定 UI 要素がある場合、これらの画面ピクセルは UI に使用できないことから、システムは実際の画面サイズよりも小さな smallestWidth を宣言します。つまり、使用する値は、レイアウトが必要とする実際の最小寸法とする必要があります(通常は、この値は、画面の現在の向きに関係なく、レイアウトがサポートする「最小幅」となります)。<em></em> 383 384 385 386 387</p> 388 <p>次に、一般的な画面サイズに使用する値を示します。</p> 389 <ul> 390 <li>320。次のような画面設定を持つ端末。 391 <ul> 392 <li>240x320 ldpi(QVGA ハンドセット)</li> 393 <li>320x480 mdpi(ハンドセット)</li> 394 <li>480x800 hdpi(高密度ハンドセット)</li> 395 </ul> 396 </li> 397 <li>480。480x800 mdpi(タブレットやハンドセット)などの画面。</li> 398 <li>600。600x1024 mdpi(7 インチタブレット)などの画面。</li> 399 <li>720。720x1280 mdpi(10 インチタブレット)などの画面。</li> 400 </ul> 401 <p>アプリケーションで smallestWidth 修飾子の値が異なる複数のリソース ディレクトリを提供する場合、システムは端末の smallestWidth に最も近い(かつ超過しない)ものを使用します。 402 403 </p> 404 <p>API レベル 13 で追加。<em></em></p> 405 <p>さらに、<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code 406android:requiresSmallestWidthDp}</a> 属性もご覧ください。これは、アプリケーションが互換性を持つ最小の smallestWidth と、端末の smallestWidth 値を保持する {@link 407android.content.res.Configuration#smallestScreenWidthDp} 設定フィールドを宣言します。 408 409</p> 410 <p>さまざまな画面の設計とこの修飾子の使用方法についての詳細は、「<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>」のデベロッパー ガイドをご覧ください。 411 412</p> 413 </td> 414 </tr> 415 <tr id="ScreenWidthQualifier"> 416 <td>使用可能な幅</td> 417 <td><code>w<N>dp</code><br/><br/> 418 例: <br/> 419 <code>w720dp</code><br/> 420 <code>w1024dp</code><br/> 421 など 422 </td> 423 <td> 424 <p>リソースを使用する、使用可能な最小の画面幅を {@code dp} 単位で指定します。—<code><N></code> の値で定義します。 425画面の向きの縦と横を変更すると、現在の実際の幅に合わせて、この設定値が変更されます。 426 427</p> 428 <p>アプリケーションでこの設定が異なる複数のリソース ディレクトリを提供する場合、システムは端末の現在の画面の幅に最も近い(かつ超過しない)ものを使用します。 429 430この値は画面の装飾を考慮します。つまり、端末のディスプレイの左や右に何らかの固定 UI 要素がある場合、これらの UI 要素を考慮し、アプリケーションの使用可能なスペースを減らして、実際の画面サイズよりも小さな幅を使用します。 431 432 433 434</p> 435 <p>API レベル 13 で追加。<em></em></p> 436 <p>さらに、{@link android.content.res.Configuration#screenWidthDp} 設定フィールドもご覧ください。これは現在の画面の幅を保持します。 437</p> 438 <p>さまざまな画面の設計とこの修飾子の使用方法についての詳細は、「<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>」のデベロッパー ガイドをご覧ください。 439 440</p> 441 </td> 442 </tr> 443 <tr id="ScreenHeightQualifier"> 444 <td>使用可能な高さ</td> 445 <td><code>h<N>dp</code><br/><br/> 446 例: <br/> 447 <code>h720dp</code><br/> 448 <code>h1024dp</code><br/> 449 など 450 </td> 451 <td> 452 <p>リソースを使用する、使用可能な最小の画面幅を「dp」単位で指定します。—<code><N></code> の値で定義します。 453画面の向きの縦と横を変更すると、現在の実際の高さに合わせて、この設定値が変更されます。 454 455</p> 456 <p>アプリケーションでこの設定が異なる複数のリソース ディレクトリを提供する場合、システムは端末の現在の画面の高さに最も近い(かつ超過しない)ものを使用します。 457 458この値は画面の装飾を考慮します。つまり、端末のディスプレイの上や下に何らかの固定 UI 要素がある場合、これらの UI 要素を考慮し、アプリケーションの使用可能なスペースを減らして、実際の画面サイズよりも小さな高さを使用します。 459 460 461 462固定されていない画面の装飾(全画面にした場合に非表示になる携帯電話のステータスバーなど)や、タイトルバーやアクションバーなどのウィンドウの装飾は、ここでは考慮されません。そのため、アプリケーションでは指定したスペースよりもやや小さなサイズに対処できるように準備をし置く必要があります。<em></em> 463 464 465 466 467 <p>API レベル 13 で追加。<em></em></p> 468 <p>さらに、{@link android.content.res.Configuration#screenHeightDp} 設定フィールドもご覧ください。これは現在の画面の幅を保持します。 469</p> 470 <p>さまざまな画面の設計とこの修飾子の使用方法についての詳細は、「<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>」のデベロッパー ガイドをご覧ください。 471 472</p> 473 </td> 474 </tr> 475 <tr id="ScreenSizeQualifier"> 476 <td>画面サイズ</td> 477 <td> 478 <code>small</code><br/> 479 <code>normal</code><br/> 480 <code>large</code><br/> 481 <code>xlarge</code> 482 </td> 483 <td> 484 <ul class="nolist"> 485 <li>{@code small}: 低密度 QVGA 画面と同等のサイズを持つ画面です。 486小さい画面の最小レイアウト サイズは約 320x426 dp 単位です。 487たとえば、QVGA 低密度や VGA 高密度です。 488</li> 489 <li>{@code normal}: 中密度 HVGA 画面と同等のサイズを持つ画面です。 490通常の画面の最小レイアウト サイズは約 320x470 dp 単位です。 491たとえば、WQVGA 低密度、HVGA 中密度、WVGA 高密度といった画面になります。 492 493</li> 494 <li>{@code large}: 中密度 VGA 画面と同等のサイズを持つ画面です。 495 496 大きな画面の最小レイアウト サイズは約 480x640 dp 単位です。 497 たとえば、VGA や WVGA の中密度といった画面です。</li> 498 <li>{@code xlarge}: 従来の中密度 HVGA 画面よりもはるかに大きなサイズの画面です。 499特大の画面の最小レイアウト サイズは約 720x960 dp 単位です。 500ほとんどの場合、特大の画面を持つ端末はポケットに入れて持ち運ぶことができないほど大きく、タブレット スタイルの端末になります。 501 502API レベル 9 で追加。<em></em></li> 503 </ul> 504 <p class="note"><strong>注:</strong> サイズ識別子を持つ場合でも、リソースがそのサイズの画面以外には対応しないということではありません。<em></em> 505現在の端末に最適な識別子を持つ代替リソースを提供していない場合でも、システムによって<a href="#BestMatch">最適な</a>リソースが使用されることがあります。 506 507</p> 508 <p class="caution"><strong>警告:</strong> すべてのリソースが現在の画面よりも大きなサイズ識別子を使用している場合、システムはそれらのリソースを使用せず、アプリケーションが実行時にクラッシュしてしまいます(たとえば、すべてのリソースに {@code 509xlarge} 識別子のタグが付いているが、端末は通常サイズの画面である場合)。<em></em><strong></strong> 510 511</p> 512 <p>API レベル 4 で追加。<em></em></p> 513 514 <p>詳細については、「<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>」をご覧ください。 515</p> 516 <p>さらに、{@link android.content.res.Configuration#screenLayout} 設定フィールドもご覧ください。これは、画面のサイズが小、中、大のいずれかであるかを表します。 517 518</p> 519 </td> 520 </tr> 521 <tr id="ScreenAspectQualifier"> 522 <td>画面アスペクト</td> 523 <td> 524 <code>long</code><br/> 525 <code>notlong</code> 526 </td> 527 <td> 528 <ul class="nolist"> 529 <li>{@code long}: WQVGA、WVGA、FWVGA のような長い画面</li> 530 <li>{@code notlong}: QVGA、HVGA、VGA のように長くない画面</li> 531 </ul> 532 <p>API レベル 4 で追加。<em></em></p> 533 <p>これは純粋に画面のアスペクト比を基準とします(「長い」画面は幅広の画面になります)。これは画面の向きには関係ありません。 534</p> 535 <p>さらに、{@link android.content.res.Configuration#screenLayout} 設定フィールドもご覧ください。これは、画面のサイズが長いかどうかを表します。 536</p> 537 </td> 538 </tr> 539 <tr id="OrientationQualifier"> 540 <td>画面の向き</td> 541 <td> 542 <code>port</code><br/> 543 <code>land</code> <!-- <br/> 544 <code>square</code> --> 545 </td> 546 <td> 547 <ul class="nolist"> 548 <li>{@code port}: 端末は縦向き(垂直)になっています</li> 549 <li>{@code land}: 端末は横向き(水平)になっています</li> 550 <!-- Square mode is currently not used. --> 551 </ul> 552 <p>ユーザーが画面を回転すると、アプリケーションの実行中にこの値が変更されます。 553実行時のアプリケーションに与える影響については、「<a href="runtime-changes.html">実行時の変更の処理</a>」をご覧ください。 554</p> 555 <p>さらに、{@link android.content.res.Configuration#orientation} 設定フィールドもご覧ください。これは、現在の端末の画面の向きを表します。 556</p> 557 </td> 558 </tr> 559 <tr id="UiModeQualifier"> 560 <td>UI モード</td> 561 <td> 562 <code>car</code><br/> 563 <code>desk</code><br/> 564 <code>television</code><br/> 565 <code>appliance</code> 566 <code>watch</code> 567 </td> 568 <td> 569 <ul class="nolist"> 570 <li>{@code car}: 端末は車載ドックで表示されています</li> 571 <li>{@code desk}: 端末はデスクドックで表示されています</li> 572 <li>{@code television}: 端末はテレビで表示されており、「10 フィート」離れた位置からの操作が可能です。UI はユーザーから離れた場所にある大きな画面に表示され、主に十字キーやポインタ以外のやり取りで操作します。 573 574 575</li> 576 <li>{@code appliance}: 端末をアプライアンスとして使用します。ディスプレイはありません 577</li> 578 <li>{@code watch}: 端末にはディスプレイがあり、手首に装着して使用します</li> 579 </ul> 580 <p>API レベル 8 で追加。television は API 13 で追加。watch は API 20 で追加。<em></em></p> 581 <p>端末をホルダーに装着したり、取り外したりしたときのアプリの反応については、「<a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Determining and Monitoring the Docking State and Type</a>」をご覧ください。 582 583</p> 584 <p>ユーザーが端末をドックに装着すると、アプリケーションの実行中にこの値が変更されます。 585{@link 586android.app.UiModeManager} を使用すると、これらのモードの一部を有効または無効にできます。実行時のアプリケーションに与える影響については、「<a href="runtime-changes.html">実行時の変更の処理</a>」をご覧ください。 587</p> 588 </td> 589 </tr> 590 <tr id="NightQualifier"> 591 <td>ナイトモード</td> 592 <td> 593 <code>night</code><br/> 594 <code>notnight</code> 595 </td> 596 <td> 597 <ul class="nolist"> 598 <li>{@code night}: 夜間</li> 599 <li>{@code notnight}: 昼間</li> 600 </ul> 601 <p>API レベル 8 で追加。<em></em></p> 602 <p>ナイトモードを自動モード(デフォルト)のままにしておくと、時間を基準にしてモードが変更された場合に、アプリケーションの実行中にこの値が変更されます。 603{@link android.app.UiModeManager} を使用すると、このモードを有効または無効にできます。 604実行時のアプリケーションに与える影響については、「<a href="runtime-changes.html">実行時の変更の処理</a>」をご覧ください。 605</p> 606 </td> 607 </tr> 608 <tr id="DensityQualifier"> 609 <td>画面ピクセル密度(dpi)</td> 610 <td> 611 <code>ldpi</code><br/> 612 <code>mdpi</code><br/> 613 <code>hdpi</code><br/> 614 <code>xhdpi</code><br/> 615 <code>xxhdpi</code><br/> 616 <code>xxxhdpi</code><br/> 617 <code>nodpi</code><br/> 618 <code>tvdpi</code> 619 </td> 620 <td> 621 <ul class="nolist"> 622 <li>{@code ldpi}: 低密度の画面。約 120dpi です。</li> 623 <li>{@code mdpi}: 中密度(従来の HVGA)の画面。約 160dpi です。 624</li> 625 <li>{@code hdpi}: 高密度の画面。約 240dpi です。</li> 626 <li>{@code xhdpi}: 超高密度の画面。約 320dpi です。API レベル 8 で追加。<em></em> 627</li> 628 <li>{@code xxhdpi}: 超超高密度の画面。約 480dpi です。API レベル 16 で追加。<em></em> 629</li> 630 <li>{@code xxxhdpi}: 超超高密度が使用(ランチャー アイコンのみ。「Supporting Multiple Screens」の<a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">注</a>をご覧ください)。約 640dpi です。<em></em> 631 632API レベル 18 で追加。<em></em> 633</li> 634 <li>{@code nodpi}: 端末の密度に合わせてサイズを変更しないビットマップ リソースに使用します。 635</li> 636 <li>{@code tvdpi}: 密度が mdpi と hdpi の間の画面。約 213dpi です。これは「プライマリ」の密度グループとしては認識されません。 637ほとんどの場合、テレビ向けのものであり、大部分のアプリは必要としません。—通常、アプリの場合は mdpi と hdpi リソースを提供すれば十分であり、システムが必要に応じてサイズを変更します。 638 639この識別子は API レベル 13 で導入されました。</li> 640 </ul> 641 <p>6 つのプライマリ密度のサイズの比率は 3:4:6:8:12:16 です(tvdpi 密度を除く)。 642そのため、ldpi では 9x9 のビットマップ、mdpi では 12x12 のビットマップ、hdpi では 18x18 のビットマップ、xhdpi では 24x24 のビットマップとなります。 643</p> 644 <p>画像リソースがテレビや他の特定の端末で正常に表示されず、tvdpi リソースを試す場合、拡張係数は 1.33*mdpi になります。 645たとえば、画面向けの 100px x 100px 画像は、tvdpi 向けにすると 133px x 133px となります。 646</p> 647 <p class="note"><strong>注:</strong> 密度識別子を持つ場合でも、リソースがその密度の画面以外には対応しないということではありません。<em></em> 648現在の端末に最適な識別子を持つ代替リソースを提供していない場合でも、システムによって<a href="#BestMatch">最適な</a>リソースが使用されることがあります。 649 650</p> 651 <p>異なる画面密度を処理する方法や、Android が現在の密度に合わせてビットマップのサイズを変更する方法については、「<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>」をご覧ください。 652 653</p> 654 </td> 655 </tr> 656 <tr id="TouchscreenQualifier"> 657 <td>タッチスクリーン タイプ</td> 658 <td> 659 <code>notouch</code><br/> 660 <code>finger</code> 661 </td> 662 <td> 663 <ul class="nolist"> 664 <li>{@code notouch}: 端末にはタッチスクリーンが搭載されていません。</li> 665 <li>{@code finger}: 端末には、ユーザーの指先による指示操作で使用するためのタッチスクリーンが搭載されています。 666</li> 667 </ul> 668 <p>{@link android.content.res.Configuration#touchscreen} 設定フィールドもご覧ください。これは、端末上のタッチスクリーンのタイプを表します。 669</p> 670 </td> 671 </tr> 672 <tr id="KeyboardAvailQualifier"> 673 <td>キーボードの使用可能状況</td> 674 <td> 675 <code>keysexposed</code><br/> 676 <code>keyshidden</code><br/> 677 <code>keyssoft</code> 678 </td> 679 <td> 680 <ul class="nolist"> 681 <li>{@code keysexposed}: 端末ではキーボードを使用できます。端末でソフトウェア キーボードが有効な(と想定される)場合、端末にハードウェア キーボードが接続されておらず、ハードウェア キーボードがユーザーに提示されていない場合でも、この値が使用されることがあります。<em></em> 682 683ソフトウェア キーボードが提供されていない、または無効になっている場合は、ハードウェア キーボードが認識された場合にのみ使用されます。 684 685</li> 686 <li>{@code keyshidden}: 端末には使用可能なハードウェア キーボードがありますが非表示になっています。また、端末ではソフトウェア キーボードが有効になっていません。<em></em><em></em> 687</li> 688 <li>{@code keyssoft}: 表示されているかどうかに関係なく、端末ではソフトウェア キーボードが有効になっています。 689</li> 690 </ul> 691 <p><code>keysexposed</code> リソースを提供するが、<code>keyssoft</code> リソースを提供しない場合、システムのソフトウェア キーボードが有効になっている場合は、キーボードが表示されているかに関係なく、システムは <code>keysexposed</code> リソースを使用します。 692 693</p> 694 <p>ユーザーがハードウェア キーボードを開くと、アプリケーションの実行中にこの値が変更されます。 695実行時のアプリケーションに与える影響については、「<a href="runtime-changes.html">実行時の変更の処理</a>」をご覧ください。 696</p> 697 <p>さらに、設定フィールド {@link 698android.content.res.Configuration#hardKeyboardHidden} と {@link 699android.content.res.Configuration#keyboardHidden} もご覧ください。これは、ハードウェア キーボードの可視性、任意のキーボード(ソフトウェアを含む)の可視性、それぞれの可視性を表します。 700</p> 701 </td> 702 </tr> 703 <tr id="ImeQualifier"> 704 <td>主なテキストの入力方法</td> 705 <td> 706 <code>nokeys</code><br/> 707 <code>qwerty</code><br/> 708 <code>12key</code> 709 </td> 710 <td> 711 <ul class="nolist"> 712 <li>{@code nokeys}: 端末にはテキスト入力用のハードウェア キーはありません。</li> 713 <li>{@code qwerty}: ユーザーに表示されているかどうかに関係なく、端末にはハードウェア クワーティ キーボードが搭載されています。 714 715</li> 716 <li>{@code 12key}: ユーザーに表示されているかどうかに関係なく、端末にはハードウェア 12key キーボードが搭載されています。 717</li> 718 </ul> 719 <p>さらに、{@link android.content.res.Configuration#keyboard} 設定フィールドもご覧ください。これは、使用可能な主なテキストの入力方法を表します。 720</p> 721 </td> 722 </tr> 723 <tr id="NavAvailQualifier"> 724 <td>ナビゲーション キーの使用可能状況</td> 725 <td> 726 <code>navexposed</code><br/> 727 <code>navhidden</code> 728 </td> 729 <td> 730 <ul class="nolist"> 731 <li>{@code navexposed}: ユーザーはナビゲーション キーを使用できます。</li> 732 <li>{@code navhidden}: ナビゲーション キーは使用できません(閉じられた lid の背後になっている場合など)。 733</li> 734 </ul> 735 <p>ユーザーがナビゲーション キーを表示させると、アプリケーションの実行中にこの値が変更されます。 736実行時のアプリケーションに与える影響については、「<a href="runtime-changes.html">実行時の変更の処理</a>」をご覧ください。 737</p> 738 <p>さらに、{@link android.content.res.Configuration#navigationHidden} 設定フィールドもご覧ください。これは、ナビゲーション キーが非表示になっているかどうかを表します。 739</p> 740 </td> 741 </tr> 742 <tr id="NavigationQualifier"> 743 <td>タップ以外の主なナビゲーション方法</td> 744 <td> 745 <code>nonav</code><br/> 746 <code>dpad</code><br/> 747 <code>trackball</code><br/> 748 <code>wheel</code> 749 </td> 750 <td> 751 <ul class="nolist"> 752 <li>{@code nonav}: 端末には、タッチスクリーン以外のナビゲーション機能がありません。 753</li> 754 <li>{@code dpad}: 端末にはナビゲーション用の方向キー(十字キー)があります。</li> 755 <li>{@code trackball}: 端末にはナビゲーション用のトラックボールがあります。</li> 756 <li>{@code wheel}: 端末にはナビゲーション用の方向ホイールがあります(特殊)。</li> 757 </ul> 758 <p>{@link android.content.res.Configuration#navigation} 設定フィールドもご覧ください。これは、利用可能なナビゲーション方法のタイプを表します。 759</p> 760 </td> 761 </tr> 762<!-- DEPRECATED 763 <tr> 764 <td>Screen dimensions</td> 765 <td>Examples:<br/> 766 <code>320x240</code><br/> 767 <code>640x480</code><br/> 768 etc. 769 </td> 770 <td> 771 <p>The larger dimension must be specified first. <strong>This configuration is deprecated 772and should not be used</strong>. Instead use "screen size," "wider/taller screens," and "screen 773orientation" described above.</p> 774 </td> 775 </tr> 776--> 777 <tr id="VersionQualifier"> 778 <td>プラットフォーム バージョン(API レベル)</td> 779 <td>例: <br/> 780 <code>v3</code><br/> 781 <code>v4</code><br/> 782 <code>v7</code><br/> 783 など</td> 784 <td> 785 <p>端末がサポートする API レベル。たとえば、<code>v1</code> は API レベル 1(Android 1.0 以降の端末)、<code>v4</code> は API レベル 4(Android 1.6 以降の端末)となります。 786 787これらの値の詳細については、「<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API levels</a>」のドキュメントをご覧ください。 788</p> 789 </td> 790 </tr> 791</table> 792 793 794<p class="note"><strong>注:</strong> Android 1.0 以降、いくつかの設定識別子が追加されているため、すべてのバージョンの Android がすべての識別子をサポートしているわけではありません。 795新しい識別子を使用すると、旧式の端末がその識別子を無視できるように、プラットフォーム バージョンの識別子が暗黙的に追加されます。 796たとえば、available-width の識別子は API レベル 13 で新たに追加されたため、<code>w600dp</code> 識別子を使用すると、自動的に <code>v13</code> 識別子が追加されます。 797 798問題を回避するために、常に一連のデフォルト リソースを含めるようにします(識別子のない一連のリソース)。<em></em> 799詳細は、<a href="#Compatibility">リソースとの最適な端末の互換性を提供する</a>セクションをご覧ください。 800 801</p> 802 803 804 805<h3 id="QualifierRules">修飾子の名前のルール</h3> 806 807<p>ここでは、設定修飾子の名前の使用方法に関するルールを説明します。</p> 808 809<ul> 810 <li>リソースの 1 つのセットに複数の修飾子を指定できます。その場合は、ダッシュで区切ります。たとえば、<code>drawable-en-rUS-land</code> は画面が横向きの米国英語の端末に適用されます。 811 812</li> 813 <li>識別子は<a href="#table2">表 2</a> の順番で使用します。次に例を示します。 814 815 <ul> 816 <li>誤: <code>drawable-hdpi-port/</code></li> 817 <li>正: <code>drawable-port-hdpi/</code></li> 818 </ul> 819 </li> 820 <li>代替リソースのディレクトリはネストできません。<code>res/drawable/drawable-en/</code> などは使用できません。 821</li> 822 <li>値は大文字と小文字を区別します。大文字と小文字を区別するファイル システムの問題を回避するために、処理前にリソース コンパイラーがディレクトリ名を小文字に変換します。 823 824読みやすくする場合にのみ、名前に大文字を使用します。</li> 825 <li>それぞれの修飾子タイプに使用できる値は 1 つだけです。たとえば、スペインとフランスの両方に同じドローアブル ファイルを使用する場合も、ディレクトリ名を <code>drawable-rES-rFR/</code> とすることはできません。<em></em> 826 827その代わりに、該当するファイルを含む <code>drawable-rES/</code> と <code>drawable-rFR/</code> という名前の 2 つのリソース ディレクトリが必要になります。ただし、実際のところ、両方の場所で同じファイルを重複させる必要はありません。 828 829代わりに、リソースのエイリアスを作成できます。 830後述の<a href="#AliasResources">エイリアス リソースを作成する</a>をご覧ください。 831</li> 832</ul> 833 834<p>これらの修飾子を名前に持つディレクトリに代替リソースを保存すると、現在の端末設定に基づいて、Android がアプリケーションにリソースを自動的に適用します。 835 836リソースが要求されるたびに、Android は要求されたリソース ファイルを持つ代替リソース ディレクトリを探し、<a href="#BestMatch">最適なリソースを見つけます</a>(後述)。 837 838特定の端末設定に合う代替リソースがない場合、Android は対応するデフォルト リソース(設定識別子を含まない特定のリソースタイプ用の一連のリソース)を使用します。 839 840 841</p> 842 843 844 845<h3 id="AliasResources">エイリアス リソースを作成する</h3> 846 847<p>複数の端末で使用するリソースがある場合(ただし、デフォルト リソースとして提供しない場合)、同じリソースを複数の代替リソース ディレクトリに配置する必要はありません。 848 849その代わりに、(場合によっては)デフォルト リソースのディレクトリに保存したリソースのエイリアスとして機能する代替リソースを作成できます。 850 851</p> 852 853<p class="note"><strong>注:</strong> すべてのリソースに、別のリソースへのエイリアスを作成できるメカニズムが備わっているわけではありません。 854特に、アニメーション、メニュー、未加工、{@code xml/} で指定されていないその他のリソースにはこの機能を使用できません。 855</p> 856 857<p>たとえば、アプリケーション アイコン {@code icon.png} について、ロケールごとに一意のバージョンが必要になるという状況を考えてみます。 858ただし、英語カナダとフランス語カナダの 2 つのロケールでは同じバージョンを使用する必要があります。 859英語カナダとフランス語カナダの両方のリソース ディレクトリに同じ画像をコピーする必要は実際にはありません。 860 861代わりに、両方に使用する画像を {@code icon_ca.png} という名前({@code icon.png} 以外の名前)で保存し、デフォルトの {@code res/drawable/} ディレクトリに配置します。 862 863次に {@code <bitmap>} 要素を使用して {@code icon_ca.png} リソースを参照する {@code icon.xml} ファイルを {@code 864res/drawable-en-rCA/} と {@code res/drawable-fr-rCA/} に作成します。 865これにより、PNG ファイルを 1 つだけ作成し、それを指す小さな XML ファイルを 2 つ作成するだけで済みます 866(次に、XML ファイルの例を示します)。</p> 867 868 869<h4>ドローアブル</h4> 870 871<p>既存のドローアブルのエイリアスを作成するには、{@code <bitmap>} 要素を使用します。次に例を示します。 872</p> 873 874<pre> 875<?xml version="1.0" encoding="utf-8"?> 876<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 877 android:src="@drawable/icon_ca" /> 878</pre> 879 880<p>このファイルを {@code icon.xml} として({@code res/drawable-en-rCA/} などの代替リソース ディレクトリに)保存すると、{@code R.drawable.icon} として参照可能なリソースにコンパイルされますが、実際のところ、これは({@code res/drawable/} に保存されている){@code 881R.drawable.icon_ca} リソースのエイリアスです。 882 883</p> 884 885 886<h4>レイアウト</h4> 887 888<p>既存のレイアウトのエイリアスを作成するには、{@code <merge>} にラップされる {@code <include>} 要素を使用します。 889次に例を示します。</p> 890 891<pre> 892<?xml version="1.0" encoding="utf-8"?> 893<merge> 894 <include layout="@layout/main_ltr"/> 895</merge> 896</pre> 897 898<p>このファイルを {@code main.xml} として保存すると、{@code R.layout.main} として参照可能なリソースにコンパイルされますが、実際のところ、これは {@code R.layout.main_ltr} リソースのエイリアスです。 899 900</p> 901 902 903<h4>文字列とその他の単純な値</h4> 904 905<p>既存の文字列のエイリアスを作成するには、単に、目的の文字列のリソース ID を新しい文字列の値として使用します。 906次に例を示します。</p> 907 908<pre> 909<?xml version="1.0" encoding="utf-8"?> 910<resources> 911 <string name="hello">Hello</string> 912 <string name="hi">@string/hello</string> 913</resources> 914</pre> 915 916<p>{@code R.string.hi} リソースは {@code R.string.hello} のエイリアスになりました。</p> 917 918<p> <a href="{@docRoot}guide/topics/resources/more-resources.html">その他の単純な値</a>も同様に機能します。 919次に色の例を示します。</p> 920 921<pre> 922<?xml version="1.0" encoding="utf-8"?> 923<resources> 924 <color name="yellow">#f00</color> 925 <color name="highlight">@color/red</color> 926</resources> 927</pre> 928 929 930 931 932<h2 id="Compatibility">リソースとの最適な端末の互換性を提供する</h2> 933 934<p>アプリケーションで複数の端末設定をサポートするには、アプリケーションが使用するそれぞれのタイプのリソースに常にデフォルト リソースを提供することが重要です。 935</p> 936 937<p>たとえば、アプリケーションが複数の言語をサポートする場合は、<a href="#LocaleQualifier">言語と地域の修飾子</a>を<em>持たない</em> {@code 938values/} ディレクトリ(文字列の保存先)を常に用意します。すべての文字列ファイルをすべて言語と地域の修飾子を持つディレクトリに配置してしまうと、自分の文字列がサポートしていない言語に設定された端末でアプリケーションを実行すると、アプリケーションがクラッシュしてしまいます。 939 940ただし、デフォルトの {@code values/} リソースを提供しておけば、アプリケーションは適切に実行されます(ユーザーがその言語を理解できない場合でも。—クラッシュは避けられます)。 941 942</p> 943 944<p>同様に、画面の向きに基づいた異なるレイアウト リソースを提供する場合も、いずれかの方向をデフォルトに設定する必要があります。 945たとえば、横向きの {@code 946layout-land/} と縦向きの {@code layout-port/} にレイアウト リソースを提供する代わりに、横向きの {@code layout/} と縦向きの {@code layout-port/} のようなリソースをデフォルトとして保存しておきます。 947</p> 948 949<p>予測しなかった設定でアプリケーションが実行されるだけでなく、新しいバージョンの Android では古いバージョンではサポートされない設定修飾子が追加されることもあるため、デフォルト リソースの提供が重要になります。 950 951新しいリソース修飾子を使用するが、古いバージョンの Android とのコードの互換性を保持する場合、古いバージョンの Android でアプリケーションを実行するときにデフォルト リソースが提供されていないと、古いバージョンの Android では新しい修飾子の付いたリソースを使用できないために、アプリケーションがクラッシュします。 952 953 954たとえば、<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code 955minSdkVersion}</a> が 4 に設定されている場合に、<a href="#NightQualifier">ナイトモード</a>(API レベル 8 で追加された {@code night} または {@code notnight})を使用してすべてのドローアブル リソースの修飾子を設定すると、API レベル 4 端末はドローアブル リソースにアクセスできず、クラッシュします。 956この場合、{@code notnight} をデフォルト リソースにする場合、その修飾子を除外することになるため、ドローアブル リソースは {@code drawable/} または {@code drawable-night/} のいずれかになります。 957 958</p> 959 960<p>そこで、端末の最適な互換性を提供するには、アプリケーションを適切に実行するのに必要なリソースに常にデフォルト リソースを提供するようにします。 961次に、設定修飾子を使用して、特定の端末設定向けの代替リソースを作成します。 962</p> 963 964<p>このルールには次の例外があります。アプリケーションの <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> が 4 以上の場合、<a href="#DensityQualifier">画像密度</a>修飾子で代替のドローアブル リソースを提供するときには、デフォルトのドローアブル リソースを提供する必要はありません。<em></em> 965 966デフォルトのドローアブル リソースがない場合でも、Android は代替の画面密度のなかで最適なものを見つけて、必要に応じてビットマップのサイズを変更できます。 967 968ただし、すべてのタイプに最適な操作性を提供するには、密度の 3 つのタイプすべてに代替ドローアブルを提供する必要があります。 969</p> 970 971 972 973<h2 id="BestMatch">Android が最適なリソースを見つける仕組み</h2> 974 975<p>代替を提供するリソースを要求すると、現在の端末設定に応じて Android が実行時に使用する代替リソースを選択します。 976Android が代替リソースを選択する方法説明するために、次のドローアブル ディレクトリを想定します。それぞれに同じ画像の異なるバージョンが入っています。 977 978</p> 979 980<pre class="classic no-pretty-print"> 981drawable/ 982drawable-en/ 983drawable-fr-rCA/ 984drawable-en-port/ 985drawable-en-notouch-12key/ 986drawable-port-ldpi/ 987drawable-port-notouch-12key/ 988</pre> 989 990<p>さらに、次のような端末設定を想定します。</p> 991 992<p style="margin-left:1em;"> 993ロケール = <code>en-GB</code> <br/> 994画面の向き = <code>port</code> <br/> 995画面ピクセル密度 = <code>hdpi</code> <br/> 996タッチスクリーン タイプ = <code>notouch</code> <br/> 997主なテキストの入力方法 = <code>12key</code> 998</p> 999 1000<p>端末設定を使用可能な代替リソースに比較して、Android は {@code drawable-en-port} からドローアブルを選択します。 1001</p> 1002 1003<p>システムは、次のロジックを使用して、使用するリソースを決定します。 1004</p> 1005 1006 1007<div class="figure" style="width:371px"> 1008<img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="471" /> 1009<p class="img-caption"><strong>図 2.</strong> Android が最適なリソースを見つける仕組みを示したフローチャート。 1010</p> 1011</div> 1012 1013 1014<ol> 1015 <li>端末設定に矛盾するリソース ファイルを排除します。 1016 <p><code>en-GB</code> ロケールに矛盾するため、<code>drawable-fr-rCA/</code> ディレクトリが排除されます。 1017</p> 1018<pre class="classic no-pretty-print"> 1019drawable/ 1020drawable-en/ 1021<strike>drawable-fr-rCA/</strike> 1022drawable-en-port/ 1023drawable-en-notouch-12key/ 1024drawable-port-ldpi/ 1025drawable-port-notouch-12key/ 1026</pre> 1027<p class="note"><strong>例外:</strong> 画面ピクセル密度は、矛盾により排除されない修飾子の 1 つです。 1028それぞれの画面密度はその時点で最適であると判断されたものであるため、端末の画面密度が hdpi の場合でも、<code>drawable-port-ldpi/</code> は排除されません。 1029 1030詳細は、「<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>」のドキュメントをご覧ください。 1031</p></li> 1032 1033 <li>リスト(<a href="#table2">表 2</a>)にある(次に)優先される修飾子を選択します(MCC から順に下がっていきます)。 1034 </li> 1035 <li>この修飾子を含むリソース ディレクトリがあるかどうかを確認します。 </li> 1036 <ul> 1037 <li>ない場合は、ステップ 2 に戻り、次の修飾子を調べます(この例では、言語識別子になるまですべて「いいえ」になります)。 1038</li> 1039 <li>「はい」の場合は、ステップ 4 に進みます。</li> 1040 </ul> 1041 </li> 1042 1043 <li>この修飾子を持たないリソース ディレクトリを排除します。この例では、システムによって言語修飾子を含まないすべてのディレクトリが排除されます。 1044</li> 1045<pre class="classic no-pretty-print"> 1046<strike>drawable/</strike> 1047drawable-en/ 1048drawable-en-port/ 1049drawable-en-notouch-12key/ 1050<strike>drawable-port-ldpi/</strike> 1051<strike>drawable-port-notouch-12key/</strike> 1052</pre> 1053<p class="note"><strong>例外:</strong> 対象となる修飾子が画面ピクセル密度の場合、Android は端末の画像密度に最も近いオプションを選択します。一般的に、Android では小さな元画像を拡大するよりも、大きな元画像を縮小する方法が使用されます。 1054 1055 1056「<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>」をご覧ください。 1057</p> 1058 </li> 1059 1060 <li>残るディレクトリが 1 つになるまで、元に戻ってステップ 2、3、4 を繰り返します。このレイでは、次にマッチングするのが画面の向きの修飾子です。そのため、画面の向きを指定しないリソースは排除されます。 1061 1062 1063<pre class="classic no-pretty-print"> 1064<strike>drawable-en/</strike> 1065drawable-en-port/ 1066<strike>drawable-en-notouch-12key/</strike> 1067</pre> 1068<p>{@code drawable-en-port} ディレクトリが残ります。</p> 1069 </li> 1070</ol> 1071 1072<p>この手順は要求した各リソースに対して実行されますが、システムはさらにいくつかの最適化を行います。 1073たとえば、端末の設定が判明すると、マッチングしない代替リソースが排除されたりします。 1074たとえば、設定言語が英語(「en」)の場合、言語修飾子が英語以外に設定されているリソース ディレクトリはチェック対象のリソースのプールに入ることはありません(言語修飾子のないリソース ディレクトリはそのままプールに入ります)。<em></em> 1075 1076 1077</p> 1078 1079<p>画面サイズ修飾子に基づいてリソースを選択する場合、最適なリソースがない場合、システムは現在の画面よりも小さな画面向けのリソースを使用します(たとえば、必要に応じて大きなサイズの画面が通常サイズの画面のリソースを使用します)。 1080 1081ただし、使用できるリソースが現在の画面よりも大きなサイズのものしかない場合は、システムはそれらのリソースを<strong>使用せず</strong>、端末設定にあるその他のリソースがないときは、アプリケーションがクラッシュします(たとえば、すべてのリソースに {@code xlarge} 識別子のタグが付いているが、端末は通常サイズの画面である場合)<em></em> 1082 1083 1084 1085</p> 1086 1087<p class="note"><strong>注:</strong> (<a href="#table2">表 2</a> の)上位にある修飾子の方が、端末に正確に一致する修飾子の数よりも重要になります。<em></em> 1088たとえば、上のステップ 4 では、<code>drawable-en</code> には一致するパラメータが 1 つしかありませんが(言語)、リストの最後の選択肢には、端末に正確に一致する修飾子が 3 つあります(画面の向き、タッチスクリーン タイプ、入力方法)。 1089 1090 1091ただし、言語はこれらの他の修飾子よりも優先されるため、<code>drawable-port-notouch-12key</code> は排除されます。 1092</p> 1093 1094<p>アプリケーションでのリソースの使用方法については、「<a href="accessing-resources.html">リソースへのアクセス</a>」をご覧ください。</p> 1095