6 月 3 日の「#Android11: The Beta Launch Show」にぜひご参加ください。

<supports-screens>

構文:
    <supports-screens android:resizeable=["true"| "false"]
                      android:smallScreens=["true" | "false"]
                      android:normalScreens=["true" | "false"]
                      android:largeScreens=["true" | "false"]
                      android:xlargeScreens=["true" | "false"]
                      android:anyDensity=["true" | "false"]
                      android:requiresSmallestWidthDp="integer"
                      android:compatibleWidthLimitDp="integer"
                      android:largestWidthLimitDp="integer"/>
    
上位の要素:
<manifest>
説明:
アプリがサポートする画面サイズを指定できます。また、アプリがサポートする画面サイズより大きい画面の場合は、画面互換性モードを有効にすることができます。アプリがサポートする画面サイズを指定するには、この要素をアプリで常に使用することが重要です。

注: 画面互換性モードは、アプリの実行時には望ましいモードではありません。ズームにより UI のピクセル化やぼかしが生じるためです。大きな画面でアプリを適切に動作させるには、複数画面のサポートガイドに沿って、画面サイズごとに代替レイアウトを提供するのがよいでしょう。

適切にサイズ変更して全画面表示できるアプリは、任意の画面サイズに「対応」できるアプリです。ほとんどのアプリは、システムが適用する通常のサイズ変更に問題なく応じることができるため、スマートフォンより大きい画面でアプリを動作させるために何か特別なことをする必要はありません。しかし、代替レイアウト リソースを提供して異なる画面サイズ用にアプリの UI を最適化する必要性が生じることも珍しくありません。たとえば、スマートフォン上での動きと比べて、タブレットでのアクティビティのレイアウトを修正したほうがよい場合などです。

ところが、異なる画面サイズに合わせてサイズ変更されたアプリが正常に動作しないことがあります。そのような場合に <supports-screens> 要素の属性を使用して、小さい方の画面に合わせてアプリを配信するか、システムの画面互換性モードを使用して大きい方の画面に合わせて UI を拡大(「ズーム」)するか、どちらかの方法で制御することができます。大きい画面サイズを考慮して設計されておらず、通常のサイズ変更では適切な結果が得られないアプリの場合、画面互換性モードを有効にしておくと、標準サイズの画面と中密度をエミュレートしてから画面全体に表示されるように UI を拡大してサイズを調整します。だだし、この方法では UI のピクセル化やぼかしが生じるため、大きい画面向けに UI を最適化することをおすすめします。

注: Android 3.2 で新しい属性(android:requiresSmallestWidthDpandroid:compatibleWidthLimitDpandroid:largestWidthLimitDp)が導入されています。Android 3.2 以降を対象としたアプリの開発では、一般化された画面サイズに基づく属性ではなく、これらの属性を使用して画面サイズのサポートを宣言するようにしてください。

画面互換性モードについて

大きい画面サイズを活用できるように適切に設計されていないアプリにとって、画面互換性モードは最後の手段です。このモードはアプリの実行時には望ましいモードではありません。このモードでは最適なユーザー エクスペリエンスが得られないためです。画面互換性モードには、アプリが実行されるデバイスのバージョンに基づいて、2 つのバージョンがあります。

Android バージョン 1.6~3.1 では、アプリは「非常に小さい」ウィンドウで実行されます。320 dp x 480 dp の画面をエミュレートし、残りの周囲の領域を黒色で塗りつぶします。

Android 3.2 以降では、320 dp x 480 dp の画面と同じようにレイアウトを描画した後、画面に合わせて拡大します。これにより、ぼかしやピクセル化などのアーティファクトが UI に生じることがよくあります。

さまざまな画面サイズを適切にサポートして、アプリで画面互換性モードを使用せずに済むようにする方法について詳しくは、複数画面のサポートをご覧ください。

属性:
android:resizeable
さまざまな画面サイズに合わせてアプリのサイズを変更できるかどうかを指定します。この属性のデフォルト値は true です。false に設定すると、大きい画面の場合にアプリが画面互換性モードで実行されます。

この属性はサポートが終了しています。これは、Android 1.5 から 1.6(複数画面のサポートが初めて導入されたバージョン)へのアプリの移行をサポートするために導入された属性です。この属性は使用しないでください。

android:smallScreens
アプリが小さい画面のフォーム ファクタをサポートしているかどうかを指定します。小さい画面とは、「標準」(従来の HVGA)画面よりアスペクト比が小さい画面のことです。外部サービス(Google Play など)では、小さい画面をサポートしていないアプリを小さい画面のデバイス向けに提供しません。というのも、こうしたアプリを小さい画面で動作させるためにプラットフォームでできることがほとんどないためです。この属性のデフォルト値は "true" です。
android:normalScreens
アプリが「標準」画面のフォーム ファクタをサポートしているかどうかを指定します。従来より、標準画面のフォーム ファクタは HVGA 中密度の画面ですが、WQVGA 低密度および WVGA 高密度も標準とみなされます。この属性のデフォルト値は "true" です。
android:largeScreens
アプリが大きい画面のフォーム ファクタをサポートしているかどうかを指定します。大きい画面とは、「標準」のモバイル デバイスの画面よりかなり大きい画面のことです。したがって、大きい画面を有効に活用するにはアプリの側で特別な措置が必要になる可能性があります。ただし、画面全体への表示をシステムのサイズ変更に任せることも可能です。

この属性のデフォルト値は、実際にはバージョンによって異なります。そのため、この属性は常に明示的に宣言することをおすすめします。"false" に設定すると、通常は画面互換性モードが有効になります。

android:xlargeScreens
アプリが特大画面のフォーム ファクタをサポートしているかどうかを指定します。特大画面とは、タブレット(あるいはそれより大きいデバイス)などの「大きい」画面よりさらに大きい画面のことです。特大画面を有効に活用するにはアプリの側で特別な措置が必要になる可能性があります。ただし、画面全体への表示をシステムのサイズ変更に任せることも可能です。

この属性のデフォルト値は、実際にはバージョンによって異なります。そのため、この属性は常に明示的に宣言することをおすすめします。"false" に設定すると、通常は画面互換性モードが有効になります。

この属性は API レベル 9 で導入されました。

android:anyDensity
任意の画面密度に対応するためのリソースがアプリに含まれているかどうかを指定します。

Android 1.6(API レベル 4)以降をサポートするアプリでは、この属性のデフォルト値は "true" です。アプリが動作するために必要な場合を除き、"false" には設定しないでください。この属性を無効にする必要があるのは、アプリでビットマップを直接操作する場合だけです(詳しくは、複数画面のサポートをご覧ください)。

android:requiresSmallestWidthDp
必要な smallestWidth の最小値を指定します。smallestWidth は、アプリの UI の表示に必要な画面スペース、言い換えれば、アプリを表示可能な画面の縦横短い方の寸法のことです(dp 単位で指定)。そのため、アプリに対応するデバイスであると判定するには、デバイスの smallestWidth がこの値と同じかそれ以上である必要があります(通常ここで指定する値は、そのときの画面の向きに関係なくレイアウトがサポートする「最小の幅」となります)。

たとえば、一般的なスマートフォンの smallestWidth は 320 dp、7 インチ タブレットの smallestWidth は 600 dp、10 インチ タブレットの smallestWidth は 720 dp です。通常はこれらの値が smallestWidth になります(これらの値が画面で利用可能なスペースの縦横のうち短い方の長さであるため)。

指定する値と比べるサイズには、画面のデザインとシステム UI とるスペースが考慮されています。たとえば、デバイスのディスプレイ上に常駐の UI 要素がある場合、それらの UI 要素はアプリの UI に使用できない画面ピクセルとなります。システムはその点を考慮に入れて、デバイスの smallestWidth を実際の画面サイズより小さい値として宣言します。したがって、使用する値は、画面の現在の向きに関係なく、レイアウトで必要な最小の幅にする必要があります。

アプリで小さい画面サイズに合わせて適切にサイズ変更(小さいサイズまたは最小の幅(320 dp)に縮小)できる場合は、この属性を使用する必要はありません。そうでない場合は、アプリで最小画面幅修飾子sw<N>dp)に使用する最小値と一致する値をこの属性に使用する必要があります。

注意: Android システムではこの属性は無視されるため、この属性がアプリの実行時の動作に影響することはありません。一方でこの属性は、Google Play などのサービスでアプリのフィルタリングに利用されます。ただし、現時点では Google Play ではフィルタリングにこの属性を使用できない(Android 3.2 の場合)ため、アプリが小さい画面をサポートしていない場合は引き続き他のサイズ属性を使用する必要があります。

この属性は API レベル 13 で導入されました。

android:compatibleWidthLimitDp
デザインしたアプリの「最小画面幅」の最大値をこの属性に指定することで、画面互換性モードをユーザーが任意選択できる機能として有効にすることができます、デバイスの使用可能な画面の縦横のうち、短い方がここで指定した値より大きい場合、ユーザーはそのままアプリをインストールできるほか、画面互換性モードで動作させるかどうかの選択肢も与えられます。デフォルトでは、画面互換性モードは無効になっており、レイアウトは通常どおり画面に合わせてサイズ変更されますが、ユーザーが画面互換性モードのオンとオフを切り替えることができるボタンがシステムバーに表示されます。

アプリがすべての画面サイズに対応しており、レイアウトが適切にサイズ変更される場合は、この属性を使用する必要はありません。

注: 現在、画面互換性モードでエミュレートできるのは、幅が 320 dp のスマートフォンの画面だけです。そのため、android:compatibleWidthLimitDp の値が 320 より大きい場合、画面互換性モードは適用されません。

この属性は API レベル 13 で導入されました。

android:largestWidthLimitDp
この属性を使用すると、アプリの「最小画面幅」の最大値を指定することで、画面互換性モードを強制的に有効にすることができます。デバイスの使用可能な画面の縦横のうち短い方がここで指定した値よりも大きい場合、アプリは画面互換性モードで動作し、ユーザーがこのモードを無効にすることはできません。

アプリがすべての画面サイズに対応しており、レイアウトが適切にサイズ変更される場合は、この属性を使用する必要はありません。そうでない場合は、まず、android:compatibleWidthLimitDp 属性を使用することを検討してください。android:largestWidthLimitDp 属性は、大きい画面に合わせてサイズ変更されたときにアプリの機能に問題が発生し、ユーザーがアプリを使用するには画面互換性モードを有効にするしかない場合にのみ使用してください。

注: 現在、画面互換性モードでエミュレートできるのは、画面幅が 320 dp のスマートフォン画面だけです。そのため、android:largestWidthLimitDp の値が 320 より大きい場合、画面互換性モードは適用されません。

この属性は API レベル 13 で導入されました。

導入時の API レベル:
API レベル 4
関連項目: