Android アプリは、スマートフォン、タブレット、折りたたみ式デバイス、ChromeOS デバイス、自動車、テレビ、さらには XR など、あらゆる種類のデバイスで動作します。このような多様な環境に対応するため、アプリはすべてのデバイス フォーム ファクタとディスプレイ サイズをサポートする必要があります。
Android 16(API レベル 36)では、画面の向き、アスペクト比、サイズ変更可能性に関するアプリの制限をオーバーライドすることで、アプリがさまざまなフォーム ファクタやディスプレイ サイズに対応できるようになります。オーバーライドは、最小幅が 600 dp 以上のデバイスに適用され、次の定義を行います。
- タブレット
- 大画面折りたたみ式デバイスのインナー ディスプレイ
- デスクトップ ウィンドウ(すべてのフォーム ファクタ)
API レベル 36 をターゲットとするアプリは、ディスプレイの最小幅が 600 dp 以上の場合、サイズ変更可能で、マルチウィンドウ モードに入ることができます(resizeableActivity="true" と同等)。
Android 16 では、デバイスの向き、アスペクト比、表示サイズに関するユーザー設定を尊重してユーザー エクスペリエンスを最適化する、アダプティブ アプリ デザインの一貫したモデルが適用されます。
変更
大画面で Android 16(API レベル 36)をターゲットとするアプリの場合、次のマニフェスト属性と API は無視されます。
| 属性または API | 無視された値 |
|---|---|
screenOrientation |
portrait、landscape、reversePortrait、reverseLandscape、sensorPortrait、sensorLandscape、userPortrait、userLandscape |
resizeableActivity |
すべて |
minAspectRatio |
すべて |
maxAspectRatio |
すべて |
setRequestedOrientation()getRequestedOrientation() |
portrait、landscape、reversePortrait、reverseLandscape、sensorPortrait、sensorLandscape、userPortrait、userLandscape |
例外
Android 16 の変更の例外は以下のとおりです。
sw600dp より小さいディスプレイ(ほとんどのスマートフォン、フリップ式デバイス、大画面の折りたたみ式デバイスの外側ディスプレイ)
android:appCategoryフラグに基づくゲームAndroid App Bundle と Play アプリ署名を使用してゲームを公開します。これにより、Google Play がフラグを管理し、App Bundle のメリットを自動的に提供できるようになります。アプリ マニフェストの概要もご覧ください。
アスペクト比の設定でアプリのデフォルトの動作を有効にする
無効にする
API レベル 36 の動作をオプトアウトするには、PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY マニフェスト プロパティを宣言します。
特定のアクティビティをオプトアウトするには、<activity> 要素でプロパティを設定します。
<activity ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</activity>
アプリ全体でオプトアウトするには、<application> 要素でプロパティを設定します。
<application ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</application>
テスト
アプリが Android 16 の変更の影響を受けるかどうかをテストするには、Android Studio で Google Pixel Tablet と Google Pixel Fold シリーズのエミュレータを使用し、アプリのモジュールの build.gradle ファイルで targetSdkPreview = "Baklava" を設定します。
または、テストデバイスでアプリ互換性フレームワークを使用し、UNIVERSAL_RESIZABLE_BY_DEFAULT フラグを有効にします(互換性フレームワーク ツールを参照)。
Espresso テスト フレームワークと Jetpack Compose テスト API を使用して、テストを自動化できます。
一般的な問題
デバイスの向き、アスペクト比、アプリのサイズ変更を制限するアプリでは、Android 16 でレイアウトの重複などの表示に関する問題が発生する可能性があります。
スマートフォン、折りたたみ式デバイス、タブレット、ChromeOS デバイス、自動車のディスプレイ、XR で最適なユーザー エクスペリエンスを提供するには、レスポンシブでアダプティブなアプリを構築します。
UI コンポーネントの拡大を避ける: 標準の縦向きのスマートフォンの画面用に設計されたレイアウトは、他のアスペクト比に対応できない可能性があります。たとえば、ディスプレイの幅全体を埋める UI 要素は、横向きで引き伸ばされて表示されます。コンポーネントに最大幅を追加して、引き伸ばしを回避します。
レイアウトのスクロールを有効にする: レイアウトがスクロールしない場合、ユーザーは横向きで画面外にあるボタンやその他の UI 要素にアクセスできない可能性があります。アプリのレイアウトをスクロール可能にして、ディスプレイの高さに関係なくすべてのコンテンツにアクセスできることを確認します。
縦向きと横向きでカメラの互換性を確認する: カメラセンサーに対する特定のアスペクト比と向きを前提とするカメラ ビューファインダーのプレビューは、非準拠のディスプレイで引き伸ばされたり、反転したりする可能性があります。向きの変更に合わせてビューファインダーが適切に回転することを確認します。ファインダーを有効にして、センサーのアスペクト比とは異なる UI のアスペクト比に調整します。
ウィンドウ サイズの変更時に状態を保持する: 向きとアスペクト比の制限がなくなると、ユーザーがアプリをどのように使用するか(デバイスの回転、折りたたみ、展開、マルチ ウィンドウ モードまたはデスクトップ ウィンドウ モードでのアプリのサイズ変更など)に応じて、アプリ ウィンドウのサイズが頻繁に変更される可能性があります。向きの変更やウィンドウ サイズの変更などの構成変更が発生すると、アクティビティが再作成されます(デフォルト)。最適なユーザー エクスペリエンスを提供するため、構成変更時にアプリの状態を保持して、アプリがデータ(フォーム入力など)を保持し、ユーザーがコンテキストを維持できるようにします。
ウィンドウ サイズクラスを使用する: デバイス固有のカスタマイズなしで、さまざまなウィンドウ サイズとアスペクト比をサポートします。ウィンドウ サイズは頻繁に変更されることを前提としてください。ウィンドウ サイズクラスを使用してウィンドウの寸法を特徴付け、適切なアダプティブ レイアウトを適用します。
レスポンシブ レイアウトを構築する: ウィンドウ サイズクラス内で、レスポンシブ レイアウトはディスプレイ サイズの変化に合わせて調整され、常に最適なアプリ プレゼンテーションが作成されます。
タイムライン
- Android 16(2025 年): すべての向きとアスペクト比、アプリのサイズ変更のサポートは、API レベル 36 をターゲットとするアプリの大画面デバイス(最小画面幅 600 dp 以上)のベースライン エクスペリエンスです。ただし、デベロッパーはオプトアウトできます。
| 対象 API レベル | 対象デバイス | デベロッパーのオプトアウトが許可されている |
|---|---|---|
| 36(Android 16) | 大画面デバイス(最小画面幅 600 dp 以上) | ○ |
特定の API レベルをターゲットとする期限は、アプリストアによって異なります。Google Play では、2026 年 8 月より、アプリで API レベル 36 を対象とすることが義務付けられます。