デスクトップ ウィンドウをサポートする

デスクトップ ウィンドウ処理により、ユーザーはサイズ変更可能な複数のアプリを同時に実行できます。 デスクトップのような汎用性に優れたアプリ ウィンドウで利用できます。

図 1 では、デスクトップ ウィンドウでの画面構成を示しています。 有効にします。注意事項:

  • ユーザーは複数のアプリを同時に並べて実行できます。
  • タスクバーはディスプレイの下部に固定され、実行中のアプリが表示されます。ユーザーはアプリを固定して、すばやくアクセスできます。
  • カスタマイズ可能な新しいヘッダーバーが各ウィンドウの上部に装飾され、最小化や最大化などのコントロールが表示されます。
図 1. タブレットでのデスクトップ ウィンドウ。

デフォルトでは、Android タブレットでアプリは全画面表示で開きます。デスクトップ ウィンドウでアプリを起動するには、画面上部のウィンドウ ハンドルを長押しし、図 2 のようにハンドルを UI 内にドラッグします。

アプリがパソコンのウィンドウで開いている場合、他のアプリもパソコンのウィンドウで開きます。

図 2.アプリ ウィンドウのハンドルを長押ししてドラッグすると、デスクトップ ウィンドウ表示に切り替わります。

デスクトップ ウィンドウ処理は、ブラウザの下に表示されるメニューからも ウィンドウ ハンドルをタップまたはクリックするか、キーボード ショートカットを使用すると、 メタキー(Windows、Command、検索)+Ctrl+↓

ユーザーは、アクティブなウィンドウをすべて閉じるか、デスクトップ ウィンドウの上部にあるウィンドウ ハンドルをつかんでアプリを画面上部にドラッグすることで、デスクトップ ウィンドウを終了します。キーボード ショートカット Meta+H でも、デスクトップ ウィンドウを終了して、アプリを全画面表示に戻すことができます。

デスクトップ ウィンドウ表示に戻るには、画面上部でデスクトップ スペースのタイルをタップまたはクリックします。 履歴画面

サイズ変更と互換モード

デスクトップ ウィンドウ処理では、画面の向きがロックされているアプリを自由にサイズ変更できます。 つまり、アクティビティが縦向きにロックされている場合でも、ユーザーはアプリを横向きのウィンドウにサイズ変更できます。

図 3. 縦向き限定のアプリのウィンドウを横向きにサイズ変更します。

サイズ変更不可として宣言されたアプリ(resizableActivity = false)では、アスペクト比を維持しながら UI がスケーリングされます。

図 4. サイズ変更不可のアプリの UI は、ウィンドウのサイズ変更に応じてスケーリングされます。

画面の向きをロックする、またはサイズ変更不可として宣言されているカメラアプリには、 ウィンドウが完全にサイズ変更可能で、 ビューファインダーのアスペクト比は変わりません。アプリが 常に縦向きまたは横向きで実行すると、アプリはハードコードするか、 プレビューやキャプチャ画像の計算ミスにつながる前提条件 画像が引き伸ばされたり、左右や上下が逆になったりする原因となることがあります。

アプリが完全にレスポンシブなカメラ ビューファインダーを実装する準備ができるまで、特別な処理により、誤った前提が原因で発生する影響を軽減する、より基本的なユーザー エクスペリエンスを提供します。

カメラアプリの互換モードについて詳しくは、以下をご覧ください。 デバイス互換性モード

で確認できます。
図 5.ウィンドウのサイズが変更されても、カメラのビューファインダーはアスペクト比を維持します。

カスタマイズ可能なヘッダー インセット

パソコンのウィンドウで実行中のすべてのアプリには、ヘッダーバーが表示されます。 没入モード
アプリのコンテンツがヘッダーバーに隠れていないことを確認します。 ヘッダーバーは、キャプション バーのインセット タイプ(androidx.compose.foundation.layout.WindowInsets.Companion.captionBar())です。ビューでは、システムバーの一部である WindowInsets.Type.captionBar() です。

インセットの処理について詳しくは、アプリでコンテンツをエッジ ツー エッジで表示し、Compose でウィンドウ インセットを処理するをご覧ください。

ヘッダーバーもカスタマイズ可能です。Android 15 で導入された外観タイプ APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND ヘッダーバーを透明にして、アプリが内部にカスタム コンテンツを描画できるようにする 表示できます。

それにより、アプリはコンテンツの上部をスタイル設定し、 が字幕バー(背景、カスタム コンテンツなど)のようになります。 ただし、システムの字幕要素([閉じる] ボタンと [最大化] ボタン)は例外です。 アプリ上部の透明なキャプションバーにシステムによって描画されます。

アプリは、ステータスバーとナビゲーション バーの切り替えと同様に、APPEARANCE_LIGHT_CAPTION_BARS を使用して、ライトモードとダークモードのキャプション内のシステム要素の表示を切り替えることができます。

Android 15 では、アプリが字幕バーの切り欠きをより詳細にイントロスペクトできるようにする WindowInsets#getBoundingRects() メソッドも導入されました。アプリは、システムがシステム要素を描画する領域と、システム要素と重複することなくアプリがカスタム コンテンツを配置できる未使用の領域を区別できます。

API から返される Rect オブジェクトのリストは、避けるべきシステム領域を示します。余白(長方形の数を引いて計算) from the caption bar Insets)では、何もしなくてもアプリは システム要素が重なって入力を受け取れるという問題です。

カスタム ヘッダーの実装前後の Chrome。
図 6. カスタム ヘッダーの実装前後の Chrome。
で確認できます。

マルチタスクとマルチインスタンスのサポート

マルチタスクはデスクトップ ウィンドウ処理の中核であり、複数のタスクを同時に実行できるため、 ユーザーの生産性を大幅に高めることができます。

Android 15 では、PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI が導入されました。アプリは、アプリを複数のインスタンスで起動できるように、システム UI を表示するように指定できます。

ドラッグ操作でアプリ インスタンスを管理する

マルチ ウィンドウ モードでは、ユーザーはビュー要素をアプリのウィンドウからドラッグして、新しいアプリ インスタンスを開始できます。同じアプリのインスタンス間で要素を移動することもできます。

図 7. デスクトップ ウィンドウからタブをドラッグして、Chrome の新しいインスタンスを起動します。

Android 15 では、ドラッグ&ドロップの動作をカスタマイズするための 2 つのフラグが導入されています。

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG: 未処理のドラッグを開始するためにシステムにデリゲートする必要があることを示します 非表示のウィンドウがない場合にそのドロップが処理されます このフラグを使用する場合、呼び出し元は ClipData と 次を含む Item 変更不可 IntentSender を 起動するとします。 (ClipData.Item.Builder#setIntentSender() を参照)。 現在の画面などの要素に基づいて、システムがインテントを起動できるかどうかを判断します。 指定することもできますシステムがインテントを起動しない場合、そのインテントは 通常のドラッグ&ドロップフローで行います

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION: ドラッグ オペレーションが(同じアプリケーションの複数のインスタンスの場合)ウィンドウの境界を越える可能性があることを示します。

    startDragAndDrop() のタイミング このフラグのセットで呼び出され、同じプロパティに属する可視ウィンドウのみが アプリケーションがドラッグ操作に参加して、ドラッグされたコンテンツを受信できる。

図 8. Chrome アプリの 2 つのインスタンス間でタブを移動します。

その他の最適化

アプリの起動をカスタマイズし、デスクトップ ウィンドウ表示から全画面表示にアプリを移行できます。

デフォルトのサイズと位置を指定する

すべてのアプリで、サイズ変更が可能であっても、ユーザーに価値を提供するために大きなウィンドウが必要なわけではありません。 ActivityOptions#setLaunchBounds() メソッドを使用して、アクティビティの起動時にデフォルトのサイズと位置を指定できます。

デスクトップ スペースから全画面モードに切り替える

アプリは、Activity#requestFullScreenMode() を呼び出すことで、プログラムで全画面モードに入ることができます。このメソッドを使用すると、デスクトップ ウィンドウから直接アプリを全画面モードにできます。