Android でモバイル コンピューティングとデスクトップ コンピューティングをより緊密に統合するうえで重要なマイルストーンとなる、接続ディスプレイのサポートが Android 16 QPR3 リリースで一般提供を開始しました。
Google I/O 2025 で発表されたように、接続ディスプレイを使用すると、Android デバイスを外部モニターに接続して、デスクトップ ウィンドウ環境にすぐにアクセスできます。アプリはフリーフォーム ウィンドウまたは最大化されたウィンドウで使用でき、ユーザーはデスクトップ OS と同じようにマルチタスクを実行できます。
Google と Samsung は協力して、Android 16 を搭載し、外部ディスプレイに接続された Android エコシステムのデバイスに、シームレスで強力なデスクトップ ウィンドウ環境を提供しています。
サポート対象の Google Pixel スマートフォンと Samsung スマートフォンを外部モニターに接続できるユーザーは、サポート対象デバイス* でこの機能を一般提供で利用できるようになりました。これにより、フォーム ファクタに合わせて調整される、より魅力的で生産性の高いアプリ エクスペリエンスを構築する新たな機会が生まれます。
仕組み
サポート対象の Android スマートフォンまたは折りたたみ式デバイスを外部ディスプレイに接続すると、接続ディスプレイで新しいデスクトップ セッションが開始されます。
接続ディスプレイでの操作は、デスクトップでの操作と似ています。アクティブなアプリを表示し、アプリを固定してすばやくアクセスできるタスクバーなどがあります。ユーザーは、接続ディスプレイで自由にサイズ変更できるウィンドウで、複数のアプリを同時に並べて実行できます。
スマートフォンを外部ディスプレイに接続し、ディスプレイでデスクトップ セッションを実行している間、スマートフォンは独自のステータスを維持します。
デスクトップ ウィンドウ機能をサポートするデバイス(Samsung Galaxy Tab S11 などのタブレット)を外部ディスプレイに接続すると、デスクトップ セッションが両方のディスプレイに拡張され、さらに広範なワークスペースが利用できるようになります。2 つのディスプレイは 1 つの連続したシステムとして機能し、アプリのウィンドウ、コンテンツ、カーソルをディスプレイ間で自由に移動できます。
タブレットを外部ディスプレイに接続し、デスクトップ セッションを両方のディスプレイに拡張します。
重要な理由
Android 16 QPR3 リリースでは、接続ディスプレイ エクスペリエンスを定義するウィンドウ動作、タスクバー操作、入力互換性(マウスとキーボード)を最終決定しました。また、ディスプレイを切り替える際にウィンドウをスケーリングしてアプリの再起動を回避するための互換性処理も追加しました。
アプリがアダプティブ デザインの原則に基づいて構築されている場合、デスクトップのようなルックアンドフィールが自動的に適用され、ユーザーはすぐに使いこなせるようになります。アプリが縦向きに固定されている場合や、タッチ専用のインターフェースを想定している場合は、最新化する絶好の機会です。
特に、接続ディスプレイで最適なアプリ エクスペリエンスを実現するための次の主なベスト プラクティスに注意してください。
- 一定の
Displayオブジェクトを想定しない: アプリのコンテキストに関連付けられたDisplayオブジェクトは、アプリのウィンドウが外部ディスプレイに移動された場合や、ディスプレイ構成が変更された場合に変化する可能性があります。アプリは、構成変更イベントを適切に処理し、ディスプレイ指標をキャッシュに保存するのではなく、動的にクエリする必要があります。 - 密度構成の変更を考慮する: 外部ディスプレイのピクセル密度は、メインデバイスの画面と大きく異なる場合があります。レイアウトとリソースがこれらの変更に正しく適応し、UI の明瞭さと使いやすさを維持できるようにします。レイアウトには密度非依存ピクセル(dp)を使用し、密度固有のリソースを提供して、UI が適切にスケーリングされるようにします。
- 外部周辺機器を正しくサポートする: ユーザーが外部モニターに接続すると、デスクトップのような環境が作成されることがよくあります。これには、外部キーボード、マウス、トラックパッド、ウェブカメラ、マイク、スピーカーの使用が含まれることがよくあります。キーボードとマウスの操作のサポートを改善します。
最新のツールでデスクトップの未来を築く
デスクトップ エクスペリエンスの構築に役立つツールがいくつか用意されています。コア アダプティブ ライブラリの最新のアップデートをまとめましょう。
新しいウィンドウ サイズクラス: 大と特大
Jetpack WindowManager 1.5.0 の最大のアップデートは、2 つの新しい幅のウィンドウ サイズクラス(大と特大)の追加です。
ウィンドウ サイズクラスは、アダプティブ レイアウトの設計と開発に役立つ、Google の公式の独自のビューポート ブレークポイントのセットです。1.5.0 では、一般的なタブレットのサイズを超える画面向けにこのガイダンスを拡張しています。
新しい幅のブレークポイントは次のとおりです。
- 大: 幅が 1200 dp ~ 1600 dp の場合
- 特大: 幅が 1600 dp 以上の場合
ディスプレイの幅に基づくさまざまなウィンドウ サイズクラス。
非常に大きなサーフェスでは、タブレットの 拡張 レイアウトを単純に拡大しても、常に最適なユーザー エクスペリエンスが得られるとは限りません。たとえば、メール クライアントでは、[拡張] ウィンドウ サイズクラスで 2 つのペイン(メールボックスとメッセージ)を快適に表示できます。しかし、特大のデスクトップ モニターでは、メール クライアントで 3 つまたは 4 つのペイン(メールボックス、メッセージ リスト、メッセージの全内容、カレンダー/タスクパネルなど)を同時に表示できます。
新しいウィンドウ サイズクラスをプロジェクトに含めるには、WindowSizeClass.BREAKPOINTS_V2 セットから関数を呼び出すだけで、WindowSizeClass.BREAKPOINTS_V1 から呼び出す必要はありません。
val currentWindowMetrics =
WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(LocalContext.current)
val sizeClass = WindowSizeClass.BREAKPOINTS_V2
.computeWindowSizeClass(currentWindowMetrics)アプリに十分なスペースがあることを確認したら、正しいレイアウトを適用します。
if(sizeClass.isWidthAtLeastBreakpoint(
WindowSizeClass.WIDTH_DP_LARGE_LOWER_BOUND)){
...
// Window is at least 1200 dp wide.
}Jetpack Navigation 3 でアダプティブ レイアウトを構築する
Navigation 3 は、Jetpack コレクションに新たに追加されたものです。Navigation 3 は、最初の安定版リリースに達したばかりで、Compose と連携するように設計された強力なナビゲーション ライブラリです。
Navigation 3 は、複数のデスティネーションを同時に表示し、レイアウトをシームレスに切り替えられるため、アダプティブ レイアウトの構築にも最適なツールです。
アプリの UI フローを管理するこのシステムは、シーンに基づいています。シーンは、1 つ以上のデスティネーションを同時に表示するレイアウトです。SceneStrategy は、シーンを作成できるかどうかを決定します。SceneStrategy インスタンスを連結すると、画面サイズやデバイス構成ごとに異なるシーンを作成して表示できます。
リストの詳細やサポートパネルなど、すぐに使用できる正規レイアウトの場合は、Compose Material 3 Adaptive ライブラリのシーン(バージョン 1.3 以降で利用可能)を使用できます。
シーンのレシピを変更したり、最初から作成したりして、独自のカスタム シーンを簡単に構築することもできます。たとえば、3 つのペインを横並びに表示するシーンについて考えてみましょう。
class ThreePaneScene<T : Any>(
override val key: Any,
override val previousEntries: List<NavEntry<T>>,
val firstEntry: NavEntry<T>,
val secondEntry: NavEntry<T>,
val thirdEntry: NavEntry<T>
) : Scene<T> {
override val entries: List<NavEntry<T>> = listOf(firstEntry, secondEntry, thirdEntry)
override val content: @Composable (() -> Unit) = {
Row(modifier = Modifier.fillMaxSize()) {
Column(modifier = Modifier.weight(1f)) {
firstEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
secondEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
thirdEntry.Content()
}
}
}このシナリオでは、ウィンドウの幅が十分で、バックスタックのエントリが 3 ペイン シーンでの表示をサポートしていることを宣言している場合に、3 つのペインを表示するように SceneStrategy を定義できます。
class ThreePaneSceneStrategy<T : Any>(val windowSizeClass: WindowSizeClass) : SceneStrategy<T> {
override fun SceneStrategyScope<T>.calculateScene(entries: List<NavEntry<T>>): Scene<T>? {
if (windowSizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_LARGE_LOWER_BOUND)) {
val lastThree = entries.takeLast(3)
if (lastThree.size == 3 && lastThree.all { it.metadata.containsKey(MULTI_PANE_KEY) }) {
val firstEntry = lastThree[0]
val secondEntry = lastThree[1]
val thirdEntry = lastThree[2]
return ThreePaneScene(
key = Triple(firstEntry.contentKey, secondEntry.contentKey, thirdEntry.contentKey),
previousEntries = entries.dropLast(3),
firstEntry = firstEntry,
secondEntry = secondEntry,
thirdEntry = thirdEntry
)
}
}
return null
}
}NavDisplay を作成するときに、ThreePaneSceneStrategy を他の戦略とともに使用できます。たとえば、3 つのペインを表示するのに十分なスペースがない場合は、TwoPaneStrategy を追加して 2 つのペインを横並びに表示することもできます。
val strategy = ThreePaneSceneStrategy() then TwoPaneSceneStrategy()
NavDisplay(...,
sceneStrategy = strategy,
entryProvider = entryProvider {
entry<MyScreen>(metadata = mapOf(MULTI_PANE_KEY to true))) { ... }
... other entries...
}
)3 つまたは 2 つのペインを表示するのに十分なスペースがない場合、カスタム シーン戦略はどちらも null を返します。この場合、NavDisplay は SinglePaneScene を使用して、バックスタックの最後のエントリを 1 つのペインに表示します。
シーンと戦略を使用すると、1 つ、2 つ、3 つのペインのレイアウトをアプリに追加できます。
ワイド画面で 3 ペイン ナビゲーションを表示するアダプティブ アプリ。
Navigation 3 でシーンを使用してカスタム レイアウトを作成する方法について詳しくは、ドキュメントをご覧ください。
スタンドアロンのアダプティブ レイアウト
スタンドアロン レイアウトが必要な場合は、Compose Material 3 Adaptive ライブラリを使用すると、ウィンドウ サイズクラスまたはデバイスの姿勢に基づいてウィンドウ構成に自動的に適応する、リストと詳細やサポートパネルなどのアダプティブ UI を作成できます。
このライブラリはすでに新しいブレークポイントに対応しています。バージョン 1.2 以降では、デフォルトのペイン スキャフォールド ディレクティブ関数で、大と特大の幅のウィンドウ サイズクラスがサポートされています。
新しいブレークポイントを使用する場合は、Gradle ビルドファイルで宣言するだけで済みます。
currentWindowAdaptiveInfo(supportLargeAndXLargeWidth = true)
スタートガイド
最新バージョンの Android の接続ディスプレイ機能をお試しください。サポート対象デバイスにAndroid 16 QPR3をインストールし、外部モニターに接続して、今すぐアプリのテストを開始しましょう。
複数ディスプレイのサポートとウィンドウ管理に関する更新されたドキュメントで、これらのベスト プラクティスの実装について詳しくご確認ください。
フィードバック
接続ディスプレイのデスクトップ エクスペリエンスを改善していくうえで、皆様からのフィードバックは非常に重要です。ご意見や問題の報告は、公式のフィードバック チャネルからお送りください。
Google は、ユーザーがアプリやデバイスを操作する方法に合わせて調整できる汎用性の高いプラットフォームとして Android を提供することを目指しています。接続ディスプレイのサポートの改善は、その方向への一歩であり、ユーザーが構築するデスクトップ エクスペリエンスを気に入っていただけると考えています。
注: この記事の執筆時点では、接続ディスプレイは Google Pixel 8、9、10 シリーズと、Samsung の S26、Fold7、Flip7、Tab S11 など、さまざまなデバイスでサポートされています。
続きを読む
-
プロダクト ニュース
Jetpack WindowManager 1.5.0 が安定版になったことをお知らせいたします。 このリリースは、WindowManager の強力な適応性を基盤として構築されており、あらゆる画面サイズで優れた表示を実現する洗練されたアダプティブ UI をさらに簡単に作成できます。
Francesco Romano • 3 分で読了
-
プロダクト ニュース
拡張オーバーレイから完全没入型環境まで、Android XR エコシステムは急速に拡大しており、Samsung Galaxy XR はすでに発売されています。
Stevan Silva, Vinny DaSilva • 3 分で読了
-
プロダクト ニュース
Google I/O では毎年、Android 開発を含むエコシステムとプロダクト全体にわたる新しい発表とリソースが提供されます。開発が AI とエージェント支援ツールに移行するにつれて、Android 向けにビルドする方法に関係なく、より優れたサポートを提供できるようになりました。
Simona Milanovic • 2 分で読了
最新情報の入手
Android 開発に関する最新の分析情報を毎週メールでお届けします。