視窗大小類別

視窗大小類別是一組自主的可視區域中斷點,有助於設計、開發及測試回應式/自動調整式版面配置。中斷點可輕鬆針對獨特的情境最佳化應用程式,讓版面配置保持簡單。

視窗大小類別會將應用程式的可用顯示區域分類為「精簡」、「中等」及「展開」。可用的寬度和高度會另外分類,因此應用程式在任何時間點都會有兩種視窗大小類別:寬度類別和高度類別。一般來說,可用寬度比可用高度更重要,這是因為直向捲動操作比較常見,因此寬度的視窗大小類別可能會與應用程式 UI 設定更相關。

圖 1. 寬度視窗大小類別的示意圖。
圖 2. 以高度為基礎的視窗大小類別圖示。

如圖所示,中斷點可讓您繼續思考裝置和設定的版面配置。每個大小類別中斷點都代表了典型裝置情境的大部分案例,當您考慮設計以中斷點為基礎的版面配置時,這個參考框架便可以派上用場。

大小類別 中斷點 裝置佔比
精簡寬度 寬度 < 600 dp 99.96% 直向模式的手機
中等寬度 600 dp ≤ 寬度 < 840 dp 93.73% 直向模式的平板電腦、

直向模式下大部分未摺疊的大型內螢幕

展開寬度 寬度 ≥ 840 dp 97.22% 橫向模式的平板電腦、

大多數橫向未摺疊的大型內螢幕

精簡高度 高度 < 480 dp 99.78% 橫向模式的手機
中等高度 480 dp ≤ 高度 < 900 dp 96.56% 橫向模式的平板電腦、

97.59% 直向模式的手機

展開高度 高度 ≥ 900 dp 94.25% 直向模式的平板電腦

雖然以實體裝置呈現大小類別相當實用,但視窗大小類別並非明確取決於裝置螢幕大小。視窗大小類別不適用「isTablet」類型的邏輯。視窗大小類別取決於應用程式可用的視窗大小,且無論執行應用程式的裝置類型為何,這都有兩項重要影響:

  • 實體裝置不能保證特定的視窗大小類別。由於許多原因,應用程式能使用的螢幕空間可能不同於裝置螢幕大小。在行動裝置上,分割畫面模式可將畫面分割至兩個應用程式。在 ChromeOS 中,Android 應用程式會顯示在可自由調整大小的任意形式視窗中。折疊式裝置可能會因為裝置折疊或未折疊,而分別存取兩種不同大小的螢幕。

  • 視窗大小類別可能在應用程式的生命週期發生變化。執行應用程式時,變更裝置螢幕方向、進行多工處理和處於摺疊/未摺疊狀態等因素,都會影響可用的螢幕空間大小。因此,視窗大小類別會動態變化,應用程式的 UI 應據此調整。

視窗大小類別可對應至質感設計版面配置指南中的精簡、中等和展開中斷點。請使用視窗大小類別決定概略的應用程式版面配置,例如決定是否使用特定標準版面配置來善用額外的螢幕空間。

使用WindowSizeClass currentWindowAdaptiveInfo() androidx.compose.material3.adaptive 程式庫。這個函式會傳回 WindowAdaptiveInfo 的執行個體,其中包含 windowSizeClass。 以下範例說明如何計算視窗大小類別並接收 每當視窗大小類別變更時進行更新:

val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass

Manage layouts with window size classes

Window size classes enable you to change your app layout as the display space available to your app changes, for example, when a device folds or unfolds, the device orientation changes, or the app window is resized in multi‑window mode.

Localize the logic for handling display size changes by passing window size classes down as state to nested composables just like any other app state:

@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Composable
fun MyApp(
    windowSizeClass: WindowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
) {
    // Perform logic on the size class to decide whether to show the top app bar.
    val showTopAppBar = windowSizeClass.windowHeightSizeClass != WindowHeightSizeClass.COMPACT

    // MyScreen knows nothing about window sizes, and performs logic based on a Boolean flag.
    MyScreen(
        showTopAppBar = showTopAppBar,
        /* ... */
    )
}

測試視窗大小類別

變更版面配置時,請測試所有視窗大小的版面配置行為,尤其是精簡、中等和展開中斷點寬度。

如果現有版面配置適用於精簡螢幕,請先針對展開寬度大小類別將版面配置最佳化,因為這個大小類別能為其他內容和 UI 變更提供最多空間。接下來,再決定哪種版面配置適合中等寬度大小類別;建議您新增專門的版面配置。

後續步驟

如要進一步瞭解如何使用視窗大小類別建立回應式/自動調整式版面配置,請參閱以下資源:

如要進一步瞭解如何讓應用程式在所有裝置和螢幕大小上提供良好體驗,請參閱: