アダプティブ アプリは、デバイスの画面全体、マルチ ウィンドウ モードのサイズ変更可能なウィンドウ、縦向きと横向き、折りたたみ式デバイスの折りたたみ状態と展開状態など、あらゆるサイズのディスプレイをサポートします。
構成設定と API の簡単なリストを使用して、適応型アプリを構築できます。ただし、古い設定や API の中には、アダプティブ アプリと互換性がない設定や API があり、使用を避ける必要があります。
サイズ変更
アダプティブ アプリは、アプリのサイズ変更とマルチウィンドウ モードをサポートしています。
<activity>
マニフェスト要素と <application>
マニフェスト要素の resizeableActivity
属性は、Android 11(API レベル 30)以前でマルチウィンドウ モードを有効または無効にします。Android 12(API レベル 31)以降では、大画面は属性に関係なくマルチウィンドウ モードをサポートします。詳細については、マルチウィンドウ モードをサポートするをご覧ください。
アプリがマルチウィンドウやマルチタスクのシナリオに参加できるようにして、ユーザーの生産性と満足度を高めましょう。
アプリが 24 より前の API レベルをターゲットとしている場合は 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 アダプティブ ライブラリの currentWindowAdaptiveInfo()
トップレベル関数を使用します。詳細については、アダプティブ アプリを作成するをご覧ください。
ウィンドウ サイズのクラス定義と組み込み API の有用性を無視しないでください。非推奨の API を使用してウィンドウ サイズを計算しないでください。
サポート終了 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)で非推奨
Compose
Jetpack Compose は、アダプティブ UI 開発用に設計されています。XML、レイアウト ファイル、リソース修飾子はありません。Kotlin ベースのステートレス コンポーザブル(UI を記述する Column
、Row
、Box
など)と、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 を使用しない
ユーザーの期待に✓ 応える: ユーザーが日常的に使用するさまざまなデバイスに合わせてアプリを最適化します。
✗ 待たないでください。今すぐお試しください。