適応型の推奨事項と禁止事項

アダプティブ アプリは、あらゆるサイズのディスプレイ(デバイスの画面全体、マルチ ウィンドウ モードのサイズ変更可能なウィンドウ、縦向きと横向きの画面の向き、折りたたみ式デバイスの折りたたみ / 展開状態のディスプレイ)をサポートします。

構成設定と 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 での表示が制限されます。

アスペクト比

画面とウィンドウのサイズが異なると、アスペクト比も縦長で細いものから正方形、横長で短いものまで、さまざまになります。

minAspectRatiomaxAspectRatio のマニフェスト設定では、アプリのアスペクト比がハードコードされた値に制限されます。

✓ 推奨

相対的なサイズに関係なく、ディスプレイに合わせてアプリを調整します。

アプリ マニフェストから minAspectRatiomaxAspectRatio の設定を削除します。または、アプリのサイズ変更が可能であることを確認し、アスペクト比が自動的に調整されるようにします(サイズ変更のセクションを参照)。

✗ 悪い例

アプリの相対的な寸法を制御しようとしないでください。アプリのアスペクト比と互換性のないアスペクト比の画面またはウィンドウでアプリが実行されると、アプリはレターボックス表示になります。

Android 14(API レベル 34)以降では、ユーザーはアプリのアスペクト比をオーバーライドして、レターボックス表示されたアプリを拡大し、利用可能なディスプレイ領域全体に表示できます。デバイスの互換モードをご覧ください。

ウィンドウ サイズ

さまざまなディスプレイ サイズ向けにレイアウトを最適化することは、アダプティブ デザインの中心的な前提です。アダプティブ アプリは、デバイスの画面サイズではなく、アプリのウィンドウ サイズに重点を置いています。アプリが全画面表示の場合、アプリ ウィンドウはデバイス画面になります。

ウィンドウ サイズクラスは、アプリ ウィンドウのサイズを判別して分類する体系的な方法を提供します。アプリのウィンドウ サイズクラスが変更されたときにレイアウトを変更して、アプリを適応させます。

✓ 推奨

ウィンドウ サイズクラスに基づいてアプリのウィンドウ サイズを評価します。

ウィンドウ サイズクラスを特定するには、Compose Material 3 Adaptive ライブラリの currentWindowAdaptiveInfo() トップレベル関数を使用します。詳しくは、アダプティブ アプリをビルドするをご覧ください。

✗ 悪い例

ウィンドウ サイズ クラスの定義と組み込み API の有用性を無視しないでください。非推奨の API を使用してウィンドウ サイズを計算しないでください。

サポート終了 API

古いプラットフォーム API では、アプリ ウィンドウが正しく測定されません。デバイス画面を測定するものもあれば、システム装飾を除外するものもあります。

✓ 推奨

WindowManager#getCurrentWindowMetrics()WindowMetrics#getBounds() を使用して、アプリ ウィンドウのサイズを取得します。WindowMetrics#getDensity() を使用して、ディスプレイの密度を取得します。

✗ 悪い例

ウィンドウ サイズを決定するために、次の非推奨の Display API を使用しないでください。

作成

Jetpack Compose は、アダプティブ UI 開発用に設計されています。XML ファイル、レイアウト ファイル、リソース修飾子はありません。UI を記述する ColumnRowBox などの Kotlin ベースのステートレス コンポーザブルと、UI 要素に動作を追加する offsetpaddingsize などの修飾子のみです。

✓ 推奨

Compose で構築します。最新の機能とリリースに関する最新情報をお届けします。

✗ 悪い例

時代遅れのテクノロジーに依存しない。アプリを時代遅れにしないようにしましょう。

Compose マテリアル 3 アダプティブ ライブラリ

Compose マテリアル 3 アダプティブ ライブラリは、アダプティブ アプリの開発を容易にするコンポーネントと API を提供します。

✓ 推奨

アプリを適応型にするには、次の API を使用します。

  • NavigationSuiteScaffold: アプリ ウィンドウのサイズクラスに応じて、ナビゲーション バーとナビゲーション レールを切り替えます。
  • ListDetailPaneScaffold: リストと詳細の標準レイアウトを実装します。アプリのウィンドウ サイズに合わせてレイアウトを調整します。
  • SupportingPaneScaffold: サポート ペインの正規レイアウトを実装します。
✗ 悪い例

最初から作り直す必要はありません。すべての Jetpack Compose ライブラリが提供するデベロッパーの生産性向上をぜひご活用ください。

レイアウト

ユーザーは、アプリが利用可能な表示スペースを最大限に活用して、補足コンテンツや拡張されたコントロールを表示することを期待しています。

アダプティブ アプリは、ディスプレイの変化、特にアプリ ウィンドウのサイズの変化やデバイスの形状の変化に基づいてレイアウトを最適化します。

✓ 推奨

ウィンドウ サイズの変化に応じて UI コンポーネントを変更し、利用可能なディスプレイ スペースを活用します。たとえば、コンパクト ウィンドウ サイズで使用されるボトム ナビゲーション バーを、中程度と拡大ウィンドウの縦型ナビゲーション レールに置き換えます。すべてのディスプレイでアクセスできるようにダイアログを再配置します。

コンテンツをペインに整理して、リストと詳細、補助ペインなどのマルチペイン レイアウトを有効にし、動的コンテンツを表示します。

✓ 実施すべきこと: リストアクティビティと詳細アクティビティを 2 ペイン レイアウトで整理します。
✗ 悪い例

コンテンツ ペインを使用していない場合は、利用可能な表示スペースを埋めるために UI 要素を単に引き伸ばさないでください。長いテキスト行は読みにくい。ボタンが引き伸ばされていると、デザインが不適切に見えます。Modifier.fillMaxWidth を使用する場合、それがすべてのディスプレイ サイズで正しい動作であると想定しないでください。

✗ 避けるべきこと: レイアウトが拡大するウィンドウに合わせて引き伸ばされている。

入力デバイス

ユーザーはタッチスクリーンだけでなく、

アダプティブ アプリは、外付けキーボード、マウス、タッチペンをサポートし、ユーザー エクスペリエンスを向上させ、あらゆる種類のフォーム ファクタでユーザーの生産性を高めます。

✓ 推奨

キーボードのタブ ナビゲーションや、マウスまたはトラックパッドのクリック、選択、スクロールに、Android フレームワークの組み込み機能を利用します。アプリのキーボード ショートカットをキーボード ショートカット ヘルパーで公開します。

Jetpack マテリアル 3 ライブラリを使用して、ユーザーがスタイラスで TextField コンポーネントに書き込めるようにします。

✗ 悪い例

代替入力方法を不可能にしないでください。アクセシビリティの問題を導入しないでください。

概要

  • Compose とマテリアル 3 アダプティブ ライブラリでアプリをビルドする
  • ウィンドウ サイズクラスに基づいてレイアウトを作成する
  • マルチペイン レイアウトを作成する
  • アプリのサイズを変更できるようにする
  • アクティビティの向きをロックしない
  • アスペクト比を制限しない
  • タッチ以外の入力をサポートする
  • 非推奨の API を使用しない

✓ ユーザーの期待に応える: ユーザーが毎日使用する多様なデバイスに合わせてアプリを最適化します。

✗ 待たないでください。今すぐ始めましょう。