支援桌面視窗

桌面視窗功能可讓使用者在可調整大小的應用程式視窗中同時執行多個應用程式,提供多用途的桌面體驗。

在圖 1 中,您可以查看啟用桌面視窗功能的畫面結構。注意事項:

  • 使用者可以同時並排執行多個應用程式。
  • 工作列位在螢幕底部的固定位置,顯示執行中的應用程式。使用者可以將應用程式固定在螢幕上,方便快速存取。
  • 新的可自訂標頭列會在每個視窗頂端顯示精簡和最大化等控制項。
圖 1. 平板電腦上的桌面視窗。

根據預設,應用程式會在 Android 平板電腦上開啟全螢幕模式。 如要在電腦版視窗中啟動應用程式,請按住螢幕頂端的視窗手柄,然後在 UI 中拖曳手柄,如圖 2 所示。

在電腦視窗中開啟應用程式時,其他應用程式也會在電腦視窗中開啟。

圖 2. 按住並拖曳應用程式視窗手柄,即可進入桌面視窗模式。

使用者也可以在輕觸或點選視窗手把,或使用鍵盤快速鍵 Meta 鍵 (Windows、Command 或 Search) + Ctrl + 向下鍵時,從視窗手把下方顯示的選單中叫用桌面視窗。

使用者可以關閉所有有效視窗,或抓住桌面視窗頂端的視窗手柄,然後將應用程式拖曳至螢幕頂端,藉此退出桌面視窗。Meta + H 鍵盤快速鍵也會退出電腦視窗,並再次以全螢幕模式執行應用程式。

如要返回桌面視窗,請輕觸或點選「最近」畫面中的桌面空間方塊。

可調整大小和相容性模式

在電腦視窗中,螢幕方向鎖定的應用程式可以自由調整大小。也就是說,即使活動鎖定為直向,使用者仍可將應用程式調整為橫向的視窗。

圖 3. 將僅限直向的應用程式視窗大小調整為橫向。

宣告為無法調整大小的應用程式 (即 resizeableActivity = 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 物件清單,會指出應避免的系統區域。剩餘的任何空間 (計算方式為字幕列插邊減去矩形) 是應用程式可以在不重疊系統元素及接收輸入內容的情況下繪圖的位置。

實作自訂標頭前後的 Chrome 畫面。
圖 6. 實作自訂標頭前後的 Chrome 畫面。

支援多工處理和多實體

多工處理是桌面視窗的核心,允許應用程式的多個執行個體可以大幅提升使用者的工作效率。

Android 15 推出了 PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI,應用程式可設定此屬性,指定應為應用程式顯示系統 UI,以便以多個執行個體啟動應用程式。

使用拖曳手勢管理應用程式執行個體

在多視窗模式下,使用者只要將檢視畫面元素拖曳到應用程式視窗中,就能啟動新的應用程式執行個體。使用者也可以在同一個應用程式的不同執行個體之間移動元素。

圖 7. 將分頁拖曳出電腦視窗,即可啟動新的 Chrome 執行個體。

Android 15 推出了兩個旗標,可自訂拖曳行為:

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG:如果沒有任何可見的視窗處理放置動作,則系統應將未處理的拖曳動作委派給系統。使用此旗標時,呼叫端必須為 ClipData 提供 Item,其中包含要啟動的活動的不可變更 IntentSender (請參閱 ClipData.Item.Builder#setIntentSender())。系統可以根據目前的螢幕大小或視窗模式等因素,決定是否啟動意圖。如果系統未啟動意圖,系統會透過一般拖曳及放置流程取消意圖。

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION:表示拖曳作業可跨越視窗邊界 (適用於同一個應用程式的多個執行個體)。

    startDragAndDrop() 以此標記設定呼叫時,只有屬於相同應用程式的可見視窗才能參與拖曳作業,並接收拖曳的內容。

圖 8. 在兩個 Chrome 應用程式執行個體之間移動分頁。

其他最佳化

自訂應用程式啟動作業,並將應用程式從電腦視窗切換至全螢幕。

指定預設大小和位置

並非所有應用程式 (包括可調整大小) 都需要大型視窗才能為使用者提供價值。您可以使用 ActivityOptions#setLaunchBounds() 方法,指定活動啟動時的預設大小和位置。

從電腦桌面進入全螢幕模式

呼叫 Activity#requestFullScreenMode() 即可讓應用程式進入全螢幕模式。 這個方法會直接從桌面視窗顯示應用程式以全螢幕顯示。