支援多視窗模式

在 Android 7.0 以上版本中,裝置可使用多視窗模式同時顯示多個應用程式。Android 支援三種多視窗模式設定:

  • 任意形式使用者可以動態調整活動窗格大小,並在畫面上顯示超過兩個應用程式。如要使用電腦分割視窗,使用者可以在提供電腦式互動的桌面上建立任意形式的視窗。
  • 分割畫面預設的多視窗模式實作方式,提供兩個活動窗格,使用者可在其中放置應用程式。
  • 子母畫面 (PiP)讓執行 Android 的裝置在小視窗中播放影片內容,同時讓使用者與其他應用程式互動。

多視窗模式裝置需求

在 Android 7.0 以上版本中,多視窗模式支援功能預設為啟用。如要停用這項功能,請在裝置的 config.xml 檔案中,將 config_supportsMultiWindow 標記設為 false

在所有低 RAM 裝置 (宣告 ActivityManager.isLowRam 的裝置) 上,系統預設會停用多視窗模式。低 RAM 裝置會忽略 config_supportsMultiWindow 標記的值。

任意形式

使用者可透過任意形式視窗建立可自由調整大小的視窗。如要使用電腦分割視窗,必須先啟用任意形式視窗。啟用任意形式視窗的裝置規定如下:

  • 啟用 config_supportsMultiWindow 旗標。
  • 透過下列任一方式啟用自由形式視窗管理功能:
    • config.xml 中啟用 config_freeformWindowManagement 標記:
      <feature name="android.software.freeform_window_management" />
    • 在裝置 Makefile 中加入下列內容:
      PRODUCT_COPY_FILES += \
      frameworks/native/data/etc/android.software.freeform_window_management.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.freeform_window_management.xml

在 Android 16 中,原始設備製造商 (OEM) 可使用「啟用電腦分割視窗」,在裝置上支援電腦分割視窗,以進行自由形式的多視窗模式設定。

電腦分割視窗

電腦分割視窗功能以任意形式視窗為基礎,在大螢幕上提供多工處理的工作區。工作區會與全螢幕並存,並提供額外的 UI 輔助功能和行為,讓使用者享有更彈性的多工體驗:

  • 鍵盤或滑鼠互動:支援觸控優先和鍵盤/滑鼠優先的互動。
  • 任意形式視窗:在可調整大小和移動的視窗中執行應用程式,並提供視窗標題列和控制項。
  • 強化版工作列:方便存取正在執行和已釘選的應用程式。
  • 外接螢幕最佳化:將已連線的螢幕轉換為支援裝置的桌面環境。
  • 虛擬桌面:讓使用者在多個工作區中整理應用程式。

如要設定裝置的電腦視窗功能,請先符合下列必要條件:

  • 啟用下列旗標:
    • 任意形式視窗的所有必要條件
    • 全域電腦分割視窗旗標 config_isDesktopModeSupported
  • 系統 UI 必須在寬度至少 600 dp 的螢幕上顯示。在小型螢幕上,電腦分割視窗功能可能無法正常運作。
  • 裝置不得為低 RAM 裝置。ActivityManager.isLowRam 必須傳回 false,因為低 RAM 裝置不適用於任何多視窗功能。

下表列出裝置可設定為電腦視窗模式的設定,具體取決於螢幕大小和裝置的預期用途:

模式 僅支援全螢幕模式的手持裝置 手持裝置先以全螢幕模式投影到連線的螢幕 優先採用全螢幕模式,並延伸至連線的螢幕 電腦分割視窗 - 第一個大螢幕
板型規格範例 手持式電話 支援 HDMI 輸出至外接螢幕的手機 支援 HDMI 連接外接螢幕的平板電腦 支援 HDMI 輸出至外接螢幕的平板電腦和鍵盤
內部螢幕體驗 支援全螢幕、分割畫面、子母畫面和非電腦任意形式模式 支援全螢幕、分割畫面和子母畫面 透過獨立桌面支援全螢幕、分割畫面、子母畫面等電腦分割視窗模式 電腦分割視窗模式是預設的視窗模式 (支援獨立桌面);使用者可以透過獨立桌面進入全螢幕或觸控模式的電腦分割視窗模式
連結螢幕體驗 僅鏡像顯示內部螢幕 只有連線螢幕支援電腦分割視窗 電腦分割視窗會延伸桌面,適用於內部螢幕 電腦分割視窗會延伸桌面,適用於內部螢幕
設定
config_supportsMultiWindow true true true true
config_freeformWindowManagement true true true true
config_isDesktopModeSupported false true true true
config_canInternalDisplayHostDesktops 已忽略 false true true
config_enterDesktopByDefaultOnFreeformDisplay 已忽略 false false true

config_isDesktopModeSupported

設定疊加層旗標 config_isDesktopModeSupported 是啟用電腦分割視窗的頂層旗標。如果未啟用,系統會忽略所有其他設定。 在 config.xml 中將其設為 true

<!-- Globally enable Desktop windowing logic -->
    <bool name="config_isDesktopModeSupported">true</bool>

如果 config_isDesktopModeSupportedtrue,系統會自動將符合資格的外接螢幕 (例如透過 DisplayPort 或 HDMI 連接的螢幕) 視為電腦分割視窗的候選螢幕。 視窗管理員必須將螢幕視為符合資格 (至少是公開且可信任,請參閱「電腦分割視窗」)。系統預設會嘗試在這些螢幕上以自由形式模式啟動工作。

config_canInternalDisplayHostDesktops

設定重疊旗標 config_canInternalDisplayHostDesktops 可在裝置的內部螢幕上啟用電腦分割視窗。在 config.xml: true

<!-- Allow the primary internal display to host desktop sessions -->
    <bool name="config_canInternalDisplayHostDesktops">true</bool>

相較於小型手持式手機,平板電腦等大螢幕裝置更適合使用電腦分割視窗功能。如果未啟用,電腦分割視窗功能只支援外接螢幕 (前提是裝置支援 HDMI)。

config_enterDesktopByDefaultOnFreeformDisplay

設定疊加層標記 config_enterDesktopByDefaultOnFreeformDisplay 會將電腦分割視窗設為裝置內部螢幕的預設分割視窗模式。如果未啟用,預設的視窗模式為全螢幕,且會同時顯示多個桌面。在 config.xml 中將其設為 true

<!-- Enable Desktop windowing as the default windowing mode on the internal display -->
    <bool name="config_enterDesktopByDefaultOnFreeformDisplay">true</bool>

啟用工作限制

如要設定電腦分割視窗支援的工作數量上限,請在 config.xml 中將設定疊加層旗標 config_maxDesktopWindowingActiveTasks 設為支援的工作數量上限。如要支援無限數量的任務,請將旗標值設為 0

<!-- Maximum number of tasks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingActiveTasks">4</integer>

啟用桌面限制

如要設定電腦分割視窗支援的虛擬桌面數量上限,請在 config.xml 中將設定疊加旗標 config_maxDesktopWindowingDesks 設為支援的桌面數量上限。如要支援無限數量的辦公桌,請將旗標值設為 0

<!-- Maximum number of virtual desks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingDesks">4</integer>

分割畫面

多視窗的預設體驗是分割畫面模式,系統 UI 會在直向或橫向模式下,將裝置畫面一分為二。使用者可以視裝置方向,左右或上下拖曳分隔線來調整視窗大小。

啟用分割畫面後,裝置製造商可以選擇啟用任意形式或子母畫面。

Android 8.0 以上版本會壓縮啟動器,讓使用者在輕觸「首頁」時,能更輕鬆地使用分割畫面。如要進一步瞭解實作方式,請參閱「分割畫面互動」。

子母畫面

使用 config_supportsMultiWindow 標記啟用多視窗模式後,裝置製造商即可支援子母畫面,讓使用者在瀏覽其他活動時觀看影片。這項功能主要適用於 Android TV 裝置,但其他裝置類型也可能支援。

如要支援子母畫面,請在 PackageManager#FEATURE_PICTURE_IN_PICTURE 中啟用 /android/frameworks/base/core/java/android/content/pm/PackageManager.java 系統功能。

如要進一步瞭解如何在搭載 Android 8.0 以上版本的裝置上實作子母畫面,請參閱「子母畫面」。

系統 UI

根據「多視窗模式驗證」支援所有標準系統 UI。

應用程式

如要支援預先載入應用程式的多視窗模式,請參閱「支援多視窗模式」。

驗證

如要驗證多視窗模式的實作,請執行相關的 CTS 測試,並按照「多視窗模式驗證」一文的說明操作。

Android 版本 CTS 測試
7.0 /platform/cts/hostsidetests/services/activitymanager/src/android/server/cts
8.0 /platform/cts/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts
9.0 /platform/cts/tests/framework/base/activitymanager/src/android/server/am
Android 10 以上版本 /platform/cts/tests/framework/base/windowmanager/src/android/server/wm