多視窗模式支援

多視窗模式可讓多個應用程式同時分享同一個畫面。應用程式可以並排或上下移動 (分割畫面模式)、以小型視窗顯示一個應用程式並重疊在其他應用程式上 (子母畫面模式),或是在可移動且可調整大小的獨立視窗中 (任意形式模式) 中的個別應用程式。

圖 1. 在分割畫面模式中,並排顯示兩個應用程式。

使用者體驗會因 Android 版本和裝置類型而異:

  • Android 7.0 (API 級別 24) 在小螢幕裝置上推出了分割畫面模式,在特定裝置上則導入子母畫面模式。

    • 分割畫面模式會透過兩個應用程式填滿螢幕,並排顯示兩個應用程式。使用者可以拖曳分隔兩個應用程式的分隔線,將一個應用程式放大,另一個則縮小。

    • 子母畫面模式可讓使用者在與其他應用程式互動時,繼續播放影片 (請參閱子母畫面支援)。

    • 大螢幕裝置的製造商可啟用任意形式模式,讓使用者可自由調整每個活動的大小。

    您可以指定活動的最小允許尺寸,藉此設定應用程式處理多視窗模式的方式。您也可以設定 resizeabableActivity="false",為應用程式停用多視窗模式,確保系統一律會以全螢幕顯示應用程式。

  • Android 8.0 (API 級別 26) 將子母畫面模式擴展到小螢幕裝置。

  • Android 12 (API 級別 31) 將多視窗模式標準行為設為標準行為。

    • 在大螢幕上 (最小寬度 >= 600 dp),無論應用程式設定為何,平台都支援所有採用多視窗模式的應用程式。如果 resizeableActivity="false",應用程式會視需要進入相容模式,以符合螢幕尺寸。

    • 在小螢幕 (最小寬度小於 600dp) 上,系統會檢查活動的 minWidthminHeight,判斷活動是否能在多視窗模式下執行。如果設為 resizeableActivity="false",無論最小寬度和高度為何,應用程式都無法在多視窗模式下執行。

分割畫面模式

使用者可以按照下列步驟啟用分割畫面模式:

  1. 開啟「最近使用」畫面
  2. 將應用程式滑動到檢視區塊
  3. 按下應用程式標題列中的應用程式圖示
  4. 選取「分割畫面」選單選項
  5. 從「Recents」畫面選取另一個應用程式,或關閉「Recents」畫面並執行另一個應用程式

使用者可以將視窗分隔線拖曳至螢幕邊緣 (向上或向下、向左或向右),藉此退出分割畫面模式。

鄰近啟動

如果應用程式需要透過意圖存取內容,您可以使用 FLAG_ACTIVITY_LAUNCH_ADJACENT 在相鄰的分割畫面視窗中開啟內容。

FLAG_ACTIVITY_LAUNCH_ADJACENT 是在 Android 7.0 (API 級別 24) 中導入,可讓在分割畫面模式下執行的應用程式,在相鄰視窗中啟動活動。

Android 12L (API 級別 32) 以上版本已擴充標記的定義,讓執行全螢幕的應用程式可以啟用分割畫面模式,然後在相鄰的視窗中啟動活動。

如要啟動鄰近活動,請將 FLAG_ACTIVITY_LAUNCH_ADJACENTFLAG_ACTIVITY_NEW_TASK 搭配使用,例如:

Kotlin

fun openUrlInAdjacentWindow(url: String) {
    Intent(Intent.ACTION_VIEW).apply {
        data = Uri.parse(url)
        addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or
                           Intent.FLAG_ACTIVITY_NEW_TASK)
    }.also { intent ->
        startActivity(intent)
    }
}

Java

public void openUrlInAdjacentWindow(String url) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(url));
    intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

多視窗模式下的活動生命週期

多視窗模式不會改變活動生命週期。不過,多個視窗中的應用程式恢復狀態會因 Android 版本而異。

多視窗運作

Android 10 (API 級別 29) 以上版本支援多視窗運作,當裝置處於多視窗模式時,所有活動都會維持在 RESUMED 狀態。如果透明活動位於活動上方,或者活動無法聚焦,例如活動處於子母畫面模式,系統就會暫停該活動。有時沒有任何活動在某個時間點有焦點,例如通知導覽匣已開啟時。onStop() 方法可照常運作:每當有活動從畫面中消失時,系統就會呼叫此方法。

搭載 Android 9 (API 級別 28) 的特定裝置也支援多視窗運作。如要在 Android 9 裝置上選擇啟用多視窗運作,請新增以下資訊清單中繼資料:

<meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" />

如要確認特定裝置是否支援該資訊清單中繼資料,請參閱裝置規格。

Android 9

在 Android 9 (API 級別 28) 以下版本的多視窗模式下,在特定時間內,只有使用者最近互動的活動會處於啟用狀態。該活動會視為「最頂層」,是唯一處於 RESUMED 狀態的活動。所有其他可見活動為 STARTED,但不是 RESUMED。不過,這些可見但未重新啟用的活動,優先順序會高於不可見的活動。如果使用者與其中一項可見活動互動,系統就會重新啟用該活動,前一個最上層的活動就會進入 STARTED 狀態。

如果單一主動應用程式程序中有多個活動,系統會重新啟用 Z 順序最高的活動,然後暫停其他活動。

設定變更

如果使用者讓應用程式進入多視窗模式,系統會依「處理設定變更」一節的說明,通知設定變更的活動。當使用者調整應用程式大小,或將應用程式恢復為全螢幕模式時,也會發生這種情況。

基本上,這項變更的影響與系統通知應用程式,表示裝置已從直向切換為橫向,但應用程式維度會有所變更,而非只是替換。您的活動可以自行處理設定變更,應用程式也可以允許系統刪除活動,並使用新維度重新建立活動。

如果使用者調整視窗大小,並放大任一維度,系統會配合使用者動作調整活動大小,並視需要變更設定。如果應用程式落後於新公開的區域繪製作業進度落後,系統會暫時為這些區域填入 windowBackground 屬性或預設的 windowBackgroundFallback 樣式屬性指定的顏色。

專屬資源存取權

如要協助支援多視窗運作功能,請使用 onTopResumedActivityChanged() 生命週期回呼。

當活動在頂端的重新啟用活動位置增減時,系統會叫用回呼;當活動使用共用的單例模式資源 (例如麥克風或相機) 時,這一點很重要。

Kotlin

override fun onTopResumedActivityChanged(topResumed: Boolean) {
    if (topResumed) {
        // Top resumed activity
        // Can be a signal to re-acquire exclusive resources
    } else {
        // No longer the top resumed activity
    }
}

Java

@Override
public void onTopResumedActivityChanged(boolean topResumed) {
    if (topResumed) {
        // Top resumed activity
        // Can be a signal to re-acquire exclusive resources
    } else {
        // No longer the top resumed activity
    }
}

請注意,應用程式可能會因為其他原因而遺失資源,例如移除共用硬體。

在任何情況下,應用程式都應該妥善處理會影響可用資源的事件和狀態變更。

針對使用相機的應用程式,CameraManager.AvailabilityCallback#onCameraAccessPrioritiesChanged() 會提供提示,指出或許適合嘗試存取相機。從 Android 10 (API 級別 29) 開始會提供此方法。

請注意,resizeableActivity=false 無法保證專屬相機存取權,因為其他螢幕可能開啟了使用該相機的其他應用程式。

圖 2. 在多視窗模式下的相機。

當應用程式失去焦點時,應用程式無須釋出相機。舉例來說,您可能想在使用者與最近聚焦且最上層的重新啟用應用程式時繼續執行相機預覽。即使應用程式不是最頂層重新啟用的應用程式,還是可以繼續執行相機,但必須妥善處理中斷連線的情況。如果最上層重新啟用的應用程式要使用相機,可以自行開啟,而您的應用程式會失去相機存取權。當應用程式再次聚焦時,應用程式可以重新開啟相機。

應用程式收到 CameraDevice.StateCallback#onDisconnected() 回呼後,後續對相機裝置的呼叫會擲回 CameraAccessException

多螢幕

Android 10 (API 級別 29) 支援在第二螢幕上執行活動。如果執行活動的裝置有多個螢幕,使用者可以將活動移至其他螢幕。多視窗運作也適用於多螢幕情境;多個活動可以同時接收使用者輸入內容。

當應用程式啟動或建立另一個活動時,可以指定要在哪個螢幕上執行。這項行為取決於資訊清單檔案中定義的活動啟動模式,以及啟動活動的實體所設定的意圖旗標和選項。詳情請參閱 ActivityOptions 類別。

當活動移至第二螢幕時,可能會執行情境更新、調整視窗大小,以及設定和資源變更。如果活動會處理設定變更,系統就會在 onConfigurationChanged() 中通知活動;否則,系統會重新啟動活動。

如果活動處理設定變更,活動應在 onCreate()onConfigurationChanged() 中檢查目前的螢幕。請務必在螢幕變更時更新資源和版面配置。

如果活動所選取的啟動模式允許多個執行個體,則在次要螢幕上顯示活動時,可建立活動的新執行個體。這兩個活動會同時重新啟用。

圖 3:一個活動在多個螢幕上的多個例項。

建議您另外參閱 Android 8.0 中引入的多螢幕 API。

活動與應用程式內容

使用適當的背景對多重顯示至關重要。存取資源時,活動內容 (顯示) 與應用程式內容不同 (不會)。

活動內容包含螢幕的相關資訊,而且一律會根據活動顯示的顯示區域進行調整。如此一來,您就能取得有關應用程式螢幕密度或視窗指標的正確資訊。建議您一律使用活動內容 (或其他以 UI 為基礎的內容),取得目前視窗或螢幕的相關資訊。某些使用背景資訊的系統 API (例如浮動式訊息總覽) 也會受到影響。

活動視窗設定和父項螢幕定義了資源和背景。按以下方式取得目前的螢幕:

Kotlin

val activityDisplay = activity.getDisplay()

Java

Display activityDisplay = activity.getDisplay();

取得目前的活動視窗指標:

Kotlin

val windowMetrics = activity.getWindowManager().getCurrentWindowMetrics()

Java

WindowMetrics windowMetrics = activity.getWindowManager().getCurrentWindowMetrics();

取得目前系統設定的視窗指標上限:

Kotlin

val maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics()

Java

WindowMetrics maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics();

視窗範圍上限可用於計算、選擇版面配置或提前判斷要擷取的資源大小。在 onCreate() 中,這可讓您在第一個版面配置傳遞之前做出這些決定。這些指標不應用於安排特定檢視畫面元素的版面配置,而是使用 Configuration 物件的資訊。

螢幕凹口

折疊式裝置在折疊和展開時,可能有不同的凹口幾何圖形。如要避免發生凹口問題,請參閱「支援螢幕凹口」。

第二螢幕

您可以透過 DisplayManager 系統服務取得可用的螢幕:

Kotlin

val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()

Java

DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = displayManager.getDisplays();

使用 Display 類別取得特定螢幕的相關資訊,例如顯示大小或指出螢幕是否安全的旗標。不過,請勿假設顯示大小會與分配給應用程式的顯示區域相同。請注意,在多視窗模式下,應用程式會佔用部分螢幕空間。

判定活動是否能在螢幕上啟動:

Kotlin

val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context, displayId, intent)

Java

ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
boolean activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context, displayId, intent);

然後在螢幕上啟動活動:

Kotlin

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId)
startActivity(intent, options.toBundle())

Java

ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(targetDisplay.displayId);
startActivity(intent, options.toBundle());

多螢幕支援

Android 為軟體鍵盤、桌布和啟動器提供多螢幕支援。

軟體鍵盤

如果螢幕設定為支援系統裝飾,則可在次要螢幕上顯示鍵盤。如果螢幕上的文字欄位要求輸入內容,系統就會自動顯示輸入法編輯器。

圖 4. 次要顯示器上的鍵盤。

桌布

在 Android 10 (API 級別 29) 中,第二螢幕可擁有桌布。該架構會為每個螢幕建立單獨的 WallpaperService.Engine 執行個體。請務必分別繪製每個引擎的表面。開發人員可以使用 WallpaperService.Engine#getDisplayContext() 中的顯示內容載入資產。此外,請確認您的 WallpaperInfo.xml 檔案已設定 android:supportsMultipleDisplays="true"

圖 5. 手機和第二螢幕上的桌布。

啟動器

新的意圖篩選器類別「SECONDARY_HOME」為第二螢幕提供專屬活動。活動執行個體會在支援系統裝飾的所有螢幕上使用,每個螢幕上擁有一個執行個體。

<activity>
    ...
    <intent-filter>
        <category android:name="android.intent.category.SECONDARY_HOME" />
        ...
    </intent-filter>
</activity>

活動的啟動模式不得阻止多個執行個體,且能夠適應不同的螢幕大小。啟動模式不能是 singleInstancesingleTask

例如,Launcher3 的 Android 開放原始碼計畫實作支援 SECONDARY_HOME 活動。

圖 6. 手機上的質感設計啟動器。
圖 7.第二螢幕上的質感設計啟動器。

視窗指標

Android 11 (API 級別 30) 推出了下列 WindowManager 方法,可提供在多視窗模式下執行的應用程式邊界:

Jetpack WindowManager 程式庫方法 computeCurrentWindowMetrics()computeMaximumWindowMetrics() 分別提供類似的功能,但可回溯相容至 API 級別 14。

如要取得目前螢幕以外的螢幕指標,請執行下列步驟 (如程式碼片段所示):

  • 建立螢幕內容
  • 為螢幕建立視窗內容
  • 取得視窗內容的 WindowManager
  • 取得應用程式可用最大顯示區域的 WindowMetrics

Kotlin

val windowMetrics = context.createDisplayContext(display)
                    .createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
                    .getSystemService(WindowManager::class.java)
                    .maximumWindowMetrics

Java

WindowMetrics windowMetrics = context.createDisplayContext(display)
                              .createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
                              .getSystemService(WindowManager.class)
                              .getMaximumWindowMetrics();

已淘汰的方法

Display 方法 getSize()getMetrics() 已在 API 級別 30 中淘汰,並改用新的 WindowManager 方法。

Android 12 (API 級別 31) 淘汰了 Display 方法 getRealSize()getRealMetrics(),並更新其行為,使其更符合 getMaximumWindowMetrics() 的行為。

多視窗模式設定

如果您的應用程式指定 Android 7.0 (API 級別 24) 以上版本,即可設定應用程式活動是否支援多視窗模式,以及是否支援。您可以在資訊清單中設定屬性,同時控制大小和版面配置。根活動的屬性設定會套用至其工作堆疊中的所有活動。例如,如果根活動具有 android:resizeableActivity="true",則工作堆疊中的所有活動都可以調整大小。在部分大型裝置 (例如 Chromebook) 中,即使您指定 android:resizeableActivity="false",應用程式仍可能會在可調整大小的視窗中執行。如果應用程式毀損,您可以使用 Google Play 篩選器,限制應用程式在這類裝置上的上架情形。

Android 12 (API 級別 31) 預設為多視窗模式。在大螢幕 (sw >= 600dp) 上,無論應用程式設定為何,所有應用程式都會以多視窗模式執行。在小螢幕上,系統會檢查活動的 minWidthminHeightresizeableActivity 設定,判斷活動是否能在多視窗模式下執行。

resizeableActivity

在資訊清單的 <activity><application> 元素中設定這項屬性,即可啟用或停用 API 級別 30 以下版本的多視窗模式:

<application
  android:name=".MyActivity"
  android:resizeableActivity=["true" | "false"] />;

如果這項屬性設為 true,就能在分割畫面和任意形式模式下啟動活動。如果屬性設為 false,活動不支援多視窗模式。如果值為 false,而使用者嘗試以多視窗模式啟動活動,活動就會佔滿整個螢幕畫面。

如果應用程式指定的 API 級別為 24 以上,但您未指定這個屬性的值,則屬性值會預設為 true。

如果應用程式指定的 API 級別為 31 以上,則此屬性在小螢幕和大螢幕上的運作方式會有所不同:

  • 大螢幕 (sw >= 600dp):所有應用程式皆支援多視窗模式。這個屬性會表明是否可調整活動大小。如果 resizeableActivity="false",應用程式會在必要時進入相容模式,以符合螢幕尺寸。
  • 小螢幕 (sw < 600dp):如果 resizeableActivity="true" 和活動的最小寬度和最小高度都符合多視窗模式的要求,則活動支援多視窗模式。如果 resizeableActivity="false",無論活動的最小寬度和高度如何,活動都不支援多視窗模式。

supportsPictureInPicture

在資訊清單的 <activity> 節點中設定這項屬性,以表示活動是否支援子母畫面模式。

<activity
  android:name=".MyActivity"
  android:supportsPictureInPicture=["true" | "false"] />

configChanges

如要自行處理多視窗設定變更 (例如使用者調整視窗大小時),請將 android:configChanges 屬性加入至少含有下列值的應用程式資訊清單 <activity> 節點:

<activity
  android:name=".MyActivity"
  android:configChanges="screenSize | smallestScreenSize
      | screenLayout | orientation" />

新增 android:configChanges 後,活動和片段會收到對 onConfigurationChanged() 的回呼,而不是刪除並重新建立。接著您可以手動更新檢視畫面、重新載入資源,並視需要執行其他作業。

<layout>

在 Android 7.0 (API 級別 24) 以上版本中,<layout> 資訊清單元素支援多種屬性,這些屬性會影響活動在多視窗模式下的行為:

  • android:defaultHeightandroid:defaultWidth:以任意形式模式啟動時,活動的預設高度和寬度。

  • android:gravity:以任意形式模式啟動時,活動的初始位置。如要瞭解適當的值,請參閱 Gravity 類別。

  • android:minHeightandroid:minWidth:在分割畫面和任意形式這兩個模式下,活動的最小高度和最小寬度。如果使用者在分割畫面模式中移動分隔線,讓活動小於指定最小尺寸,系統會將活動裁剪至使用者要求的大小。

以下程式碼說明如何指定活動的預設大小和位置,以及活動以任意形式模式顯示時的最小尺寸:

<activity android:name=".MyActivity">
    <layout android:defaultHeight="500dp"
          android:defaultWidth="600dp"
          android:gravity="top|end|..."
          android:minHeight="450dp"
          android:minWidth="300dp" />
</activity>

執行階段的多視窗模式

從 Android 7.0 開始,系統會提供功能,支援可在多視窗模式中執行的應用程式。

停用多視窗模式下的功能

在多視窗模式下,對於與其他活動或應用程式共用裝置畫面的活動,Android 可能會停用或忽略不適用於該活動的功能。

此外,還會停用部分系統 UI 自訂選項。舉例來說,如果應用程式在多視窗模式下執行,就無法隱藏狀態列 (請參閱「控管系統 UI 的瀏覽權限」)。

系統會忽略 android:screenOrientation 屬性的變更。

多視窗模式查詢與回呼

Activity 類別提供下列方法支援多視窗模式:

  • isInMultiWindowMode():指出活動是否處於多視窗模式。

  • isInPictureInPictureMode():指出活動是否處於子母畫面模式。

  • onMultiWindowModeChanged():每當活動進入或退出多視窗模式時,系統會呼叫這個方法。如果活動進入多視窗模式,系統會向該方法傳遞 true 值;如果活動離開多視窗模式,系統就會傳遞 false 值。

  • onPictureInPictureModeChanged():每當活動進入或退出子母畫面模式時,系統會呼叫這個方法。如果活動進入子母畫面模式,系統會向該方法傳遞 true 值;如果活動離開子母畫面模式,系統會傳遞 false 值。

Fragment 類別公開許多方法的版本,例如 Fragment.onMultiWindowModeChanged()

子母畫面模式

如要以子母畫面模式執行活動,請呼叫 enterPictureInPictureMode()。如果裝置不支援子母畫面模式,此方法不會有任何作用。詳情請參閱「使用子母畫面 (PiP) 新增影片」。

多視窗模式中的新活動

啟動新活動時,您可以指示新活動應盡可能顯示在目前活動旁。使用意圖旗標 FLAG_ACTIVITY_LAUNCH_ADJACENT,指示系統嘗試在相鄰視窗中建立新活動,讓兩個活動共用畫面。系統會盡力做到這一點,但無法保證一定能進行。

如果裝置處於任意形式模式,當您啟動新活動時,可以呼叫 ActivityOptions.setLaunchBounds() 來指定新活動的大小和螢幕位置。如果裝置未處於多視窗模式,這個方法就不會生效。

在 API 級別 30 及以下級別中,如果您在工作堆疊中啟動活動,該活動會取代螢幕上的活動,並繼承所有多視窗模式屬性。如要在多視窗模式下在獨立視窗中啟動新活動,您必須在新的工作堆疊中啟動新活動。

Android 12 (API 級別 31) 允許應用程式在多個活動之間拆分應用程式的工作視窗。您可以建立 XML 設定檔或發出 Jetpack WindowManager API 呼叫,來決定應用程式如何顯示活動 (全螢幕、並排或堆疊)。

拖曳

當兩個活動共用螢幕時,使用者可以將一項活動的資料拖曳到另一個活動。(在 Android 7.0 之前,使用者只能在單一活動內拖曳資料)。如要快速新增接受捨棄內容的支援功能,請參閱 DropHelper API。如需完整的拖曳指南,請參閱「啟用拖曳架構」。

多執行個體

每個根活動都有專屬的工作,而這些工作會在獨立的程序上執行,並顯示在專屬的視窗中。如要在獨立視窗中啟動應用程式的新執行個體,您可以使用 FLAG_ACTIVITY_NEW_TASK 旗標啟動新活動。您可以將該旗標與部分多視窗屬性結合,要求新視窗的具體位置。舉例來說,購物應用程式可以顯示多個視窗來比較產品。

Android 12 (API 級別 31) 可讓您在同一個工作視窗中,同時啟動兩個活動的執行個體。

如要讓使用者透過應用程式啟動器或工作列啟動另一個應用程式執行個體,請確認啟動器活動已設定 android:resizeableActivity="true",且未使用禁止多個執行個體的啟動模式。例如,如果設定了 FLAG_ACTIVITY_MULTIPLE_TASKFLAG_ACTIVITY_NEW_DOCUMENTsingleInstancePerTask 活動便可在不同任務中多次例項化。

請勿將多實體與多面板版面配置混淆,例如使用 SlidingPaneLayout (在單一視窗中執行) 的清單/詳細資料呈現

請注意,在折疊式裝置的個別視窗中執行多個執行個體時,如果型態改變,系統可能會將一或多個執行個體傳送至背景。舉例來說,假設裝置處於展開狀態,而摺疊兩側的兩個視窗中有兩個應用程式執行個體正在執行。如果裝置處於折疊狀態,系統可能會終止其中一個執行個體,而不是嘗試在小螢幕上調整兩個執行個體的視窗大小。

多視窗模式驗證

無論應用程式是否指定 API 級別 24 或以上級別,都應驗證應用程式在多視窗模式下的運作方式,以免使用者嘗試在搭載 Android 7.0 以上版本的裝置上以多視窗模式啟動應用程式。

測試裝置

搭載 Android 7.0 (API 級別 24) 以上版本的裝置支援多視窗模式。

API 級別 23 以下

當使用者嘗試在多視窗模式下使用應用程式時,若應用程式未宣告固定方向,則系統會強制調整應用程式大小。

如果應用程式未宣告固定方向,您應在搭載 Android 7.0 以上版本的裝置上啟動應用程式,並嘗試讓應用程式進入分割畫面模式。確認當應用程式強制調整大小時,使用者體驗是否可接受。

如果應用程式宣告了固定方向,請嘗試使應用程式進入多視窗模式。驗證當執行此動作後,應用程式是否仍維持全螢幕模式。

API 級別 24 至 30

如果應用程式的目標版本為 API 級別 24 至 30,且未停用多視窗模式支援,請在分割畫面和任意形式模式下驗證下列行為:

  • 以全螢幕模式啟動應用程式,然後長按「Recents」按鈕,切換至多視窗模式。確認應用程式可正確切換。

  • 直接在多視窗模式下啟動應用程式,驗證應用程式是否正確啟動。如要啟動多視窗模式的應用程式,請按下「Recents」按鈕,長按應用程式的標題列,並將其拖曳至螢幕上的其中一個醒目顯示區域。

  • 拖曳畫面分隔線,即可在分割畫面模式中調整應用程式大小。請確認應用程式調整大小,且不會異常終止,並且會顯示必要的 UI 元素。

  • 如果您已為應用程式指定最小尺寸,請嘗試調整應用程式大小,讓視窗大小小於這些尺寸。確認應用程式大小無法小於指定的最小尺寸。

  • 透過所有測試,驗證應用程式的效能是否令人滿意。例如,確認調整應用程式大小後更新 UI 的延遲時間是否過長。

API 級別 31 以上

如果應用程式指定的 API 級別為 31 以上,且主要活動的最小寬度和最小高度小於或等於可用顯示區域的個別尺寸,請驗證為 API 級別 24 至 30 列出的所有行為。

測試檢查清單

如要驗證應用程式在多視窗模式下的應用程式效能,請嘗試下列作業。除非另有註明,否則您應在分割畫面和任意形式模式下嘗試這些作業。

  • 進入及退出多視窗模式。

  • 將應用程式切換至其他應用程式,驗證應用程式在顯示但未處於使用狀態時,能正常運作。舉例來說,如果您的應用程式正在播放影片,請驗證當使用者與其他應用程式互動時,影片會繼續播放。

  • 在分割畫面模式中,嘗試移動螢幕分隔線,讓應用程式放大和縮小。請在並排和其他設定上,嘗試這些作業。確認應用程式不會當機、顯示基本功能,且大小調整作業所需時間不會過長。

  • 快速連續執行多項大小調整作業。請確認您的應用程式不會當機或流失記憶體。Android Studio 的記憶體分析器會提供應用程式記憶體用量的相關資訊 (請參閱「使用記憶體分析器檢查應用程式的記憶體用量」)。

  • 在各種不同的視窗設定下正常使用應用程式,並驗證應用程式是否正常運作。確認文字清晰易讀,且 UI 元素不會因太小而無法互動。

多視窗模式支援已停用

在 API 級別 24 至 30 中,如果您設定 android:resizeableActivity="false" 以停用多視窗模式支援,則應在搭載 Android 7.0 至 11 的裝置上啟動應用程式,並嘗試將應用程式設為分割畫面和任意形式模式。驗證當執行此操作後,應用程式是否仍維持全螢幕模式。

其他資源

如要進一步瞭解 Android 對多視窗模式的支援,請參閱:

##

為您推薦

* 注意: 連結 文字 當 JavaScript 關閉 * 裝置相容性 模式 * 支援 大螢幕 大小調整功能 * 處理 設定 變更