アダプティブ アプリは、デバイスの画面全体、マルチ ウィンドウ モードのサイズ変更可能なウィンドウ、縦向きと横向き、折りたたみ式デバイスの折りたたみ / 展開状態など、あらゆるサイズのディスプレイをサポートします。
構成設定と API の短いリストを使用すると、アダプティブ アプリを構築できます。ただし、一部の古い設定や API はアダプティブ アプリと互換性がないため、避ける必要があります。
サイズ変更
アダプティブ アプリは、アプリのサイズ変更とマルチ ウィンドウ モードをサポートします。
<activity> マニフェスト要素と <application> マニフェスト要素の resizeableActivity 属性は、Android 11(API レベル 30)以前でマルチ ウィンドウ モードを有効または無効にします。Android 12(API レベル 31)以降では、大画面は属性にかかわらずマルチウィンドウ モードをサポートします。詳しくは、マルチウィンドウ モードをサポートするをご覧ください。
アプリをマルチ ウィンドウ、マルチタスク シナリオに対応させ、ユーザーの生産性と満足度を高めます。
アプリが API レベル 24 より低いレベルをターゲットとする場合は resizeableActivity="true" を設定します。それ以外の場合は、設定する必要はありません。Android 7.0(API レベル 24)以上ではデフォルトで true になっています。
どの API レベルでも resizeableActivity="false" を設定しないでください。マルチ ウィンドウ モードを含むユースケースからアプリを除外しないでください。
向き
アダプティブ アプリは、ディスプレイのサイズやウィンドウ処理モードに関係なく、縦向きと横向きをサポートします。
screenOrientation マニフェスト設定は、アクティビティの画面の向きを制限します。
アプリ マニフェストから screenOrientation 設定を削除します。
アプリの向きをロックしても、ウィンドウ サイズの変更は防げません。アプリは、マルチ ウィンドウ モードに入ったとき、デバイスが折りたたまれたとき、広げられたとき、またはデスクトップ タイプのウィンドウのサイズが変更されたときにサイズ変更されます。アプリは、screenOrientation 属性の設定に関係なく、ウィンドウ サイズの変更をサポートする必要があります。
アクティビティの向きを制限しないでください。画面の向きを固定するアプリは、大画面デバイスや互換性のないウィンドウ サイズでレターボックス表示されます。
レターボックス表示のアプリは、タブレット、折りたたみ式デバイス、ChromeOS デバイスの Google Play での表示が制限されます。
アスペクト比
画面とウィンドウのサイズが異なると、アスペクト比も縦長で細いものから正方形、横長で短いものまでさまざまになります。
minAspectRatio と maxAspectRatio のマニフェスト設定により、アプリのアスペクト比がハードコードされた値に制限されます。
相対的なサイズに関係なく、ディスプレイに合わせてアプリを調整します。
アプリのマニフェストから minAspectRatio と maxAspectRatio の設定を削除します。または、アプリのサイズ変更が可能で、アスペクト比が自動的に調整されるようにします(サイズ変更のセクションを参照)。
アプリの相対的なサイズを制御しようとしないでください。アプリのアスペクト比と互換性のないアスペクト比の画面またはウィンドウでアプリが実行されると、アプリはレターボックス表示になります。
Android 14(API レベル 34)以降では、ユーザーはアプリのアスペクト比をオーバーライドして、レターボックス表示されたアプリを拡大し、利用可能なディスプレイ領域全体に表示できます。デバイスの互換モードをご覧ください。
対象期間
さまざまなディスプレイ サイズ向けにレイアウトを最適化することは、アダプティブ デザインの中心的な前提です。アダプティブ アプリは、デバイスの画面サイズではなく、アプリのウィンドウ サイズに重点を置いています。アプリが全画面表示の場合、アプリ ウィンドウはデバイス画面になります。
ウィンドウ サイズクラスは、アプリ ウィンドウのサイズを体系的に判断して分類する方法を提供します。アプリのウィンドウ サイズクラスが変更されたときにレイアウトを変更して、アプリを適応させます。
ウィンドウ サイズクラスに基づいてアプリのウィンドウ サイズを評価します。
ウィンドウ サイズクラスを判断するには、Compose Material 3 Adaptive ライブラリの currentWindowAdaptiveInfoV2() トップレベル関数を使用します(非推奨の currentWindowAdaptiveInfo() 関数に代わるものです)。詳しくは、アダプティブ アプリを作成するをご覧ください。
ウィンドウ サイズ クラスの定義と組み込み API の有用性を無視しないでください。非推奨の API を使用してウィンドウ サイズを計算しないでください。
非推奨 API
古いプラットフォーム API はアプリ ウィンドウを正しく測定しません。デバイス画面を測定するものもあれば、システム装飾を除外するものもあります。
WindowManager#getCurrentWindowMetrics() と WindowMetrics#getBounds() を使用して、アプリ ウィンドウのサイズを取得します。WindowMetrics#getDensity() を使用して、表示密度を取得します。
ウィンドウ サイズを決定するために、次の非推奨の Display API を使用しないでください。
getSize(): Android 11(API レベル 30)で非推奨getMetrics(): Android 11(API レベル 30)で非推奨getRealSize(): Android 12(API レベル 31)で非推奨getRealMetrics(): Android 12(API レベル 31)で非推奨
作成
Jetpack Compose は、アダプティブ UI 開発用に設計されています。XML もレイアウト ファイルもリソース修飾子もありません。UI を記述する Column、Row、Box などの Kotlin ベースのステートレス コンポーザブルと、UI 要素に動作を追加する offset、padding、size などの修飾子のみです。
Compose で構築します。最新の機能とリリースに関する最新情報をお届けします。
時代遅れのテクノロジーに依存しない。アプリを時代遅れにしないようにしましょう。
Compose マテリアル 3 アダプティブ ライブラリ
Compose マテリアル 3 アダプティブ ライブラリには、アダプティブ アプリの開発を容易にするコンポーネントと API が用意されています。
アプリを適応型にするには、次の API を使用します。
NavigationSuiteScaffold: アプリ ウィンドウのサイズクラスに応じて、ナビゲーション バーとナビゲーション レールを切り替えます。ListDetailPaneScaffold: リストと詳細の正規レイアウトを実装します。アプリ ウィンドウのサイズに合わせてレイアウトを調整します。SupportingPaneScaffold: サポート ペインの正規レイアウトを実装します。
最初から作り直す必要はありません。Jetpack Compose ライブラリが提供するデベロッパーの生産性向上をぜひご活用ください。
レイアウト
ユーザーは、アプリが補足コンテンツや拡張されたコントロールによって、利用可能な表示スペースを最大限に活用することを期待しています。
アダプティブ アプリは、ディスプレイの変化、特にアプリ ウィンドウのサイズの変化やデバイスの形状の変化に基づいてレイアウトを最適化します。
ウィンドウ サイズの変化に応じて UI コンポーネントを変更し、利用可能なディスプレイ スペースを活用します。たとえば、コンパクト ウィンドウ サイズで使用されるボトム ナビゲーション バーを、中程度と拡大ウィンドウの垂直ナビゲーション レールに置き換えます。すべてのディスプレイでアクセスできるようにダイアログを再配置します。
コンテンツをペインに整理して、リストの詳細や補助ペインなどのマルチペイン レイアウトで動的コンテンツを表示できるようにします。
コンテンツ ペインを使用していない場合は、利用可能な表示スペースを埋めるために UI 要素を単に引き伸ばさないでください。長いテキスト行は読みにくい。ボタンが引き伸ばされていると、デザインが不適切に見えます。Modifier.fillMaxWidth を使用する場合、それがすべてのディスプレイ サイズで正しい動作であると想定しないでください。
入力デバイス
ユーザーはタッチスクリーンだけを使ってアプリを操作するわけではありません。
アダプティブ アプリは、外付けキーボード、マウス、タッチペンをサポートし、ユーザー エクスペリエンスを向上させ、あらゆる種類のフォーム ファクタでユーザーの生産性を高めます。
キーボードのタブ ナビゲーションや、マウスまたはトラックパッドのクリック、選択、スクロールには、Android フレームワークの組み込み機能を利用します。アプリのキーボード ショートカットをキーボード ショートカット ヘルパーで公開します。
Jetpack の マテリアル 3 ライブラリを使用して、ユーザーがタッチペンで TextField コンポーネントに書き込めるようにします。
代替入力方法を不可能にしないでください。アクセシビリティの問題を導入しないでください。
概要
- Compose とマテリアル 3 アダプティブ ライブラリでアプリをビルドする
- ウィンドウ サイズクラスに基づいてレイアウトを作成する
- マルチペイン レイアウトを作成する
- アプリのサイズを変更できるようにする
- アクティビティの向きをロックしない
- アスペクト比を制限しない
- タップ以外の入力をサポートする
- 非推奨の API を使用しない
✓ ユーザーの期待に応える: ユーザーが毎日使用する多様なデバイスに対応するようにアプリを最適化します。
✗ 待たないでください。今すぐ使用を開始する