WindowState
重要
本文說明 處於公開預覽 狀態的功能和指引,而且可能會在正式推出之前大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
WindowState 是 Jetpack Compose 的公用程式程式庫,可協助您輕鬆取得雙螢幕、可折迭和大型螢幕裝置視窗狀態的詳細資料。 此資訊是使用 Google 的 Jetpack 視窗管理員 程式庫所收集。
類別 WindowState
會以 Compose 狀態提供資訊,其中包含折迭功能位置/方向、視窗大小類別和視窗模式等屬性。 高度和寬度視窗大小類別是根據 官方 Android 指導方針來測量,而目前的視窗模式取決於折迭功能和裝置方向。 提醒您,視窗模式是顯示利用雙螢幕和可折迭尺寸的狀態。 有四種可能模式:雙直向、雙重橫向、單一直向和單一橫向。
新增相依性
請確定您在最上層build.gradle檔案中有mavenCentral () 存放庫:
allprojects { repositories { google() mavenCentral() } }
將下列相依性新增至模組層級 build.gradle 檔案, (目前版本可能與此處所示的內容不同) :
implementation "com.microsoft.device.dualscreen:windowstate:1.0.0-alpha07"
此外,請確定 compileSdkVersion 已設定為 API 33,且 targetSdkVersion 設定為模組層級 build.gradle 檔案中的 API 32 或更新版本。
android { compileSdkVersion 33 defaultConfig { targetSdkVersion 32 } ... }
在您的專案中使用 WindowState
若要在 Compose 專案中使用程式庫,請從 MainActivity 呼叫 函 rememberWindowState()
式。 這個方法會傳 WindowState
回物件,您可以傳遞至最上層可撰寫的狀態。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ExampleAppTheme {
ExampleApp(rememberWindowState())
}
}
}
}
接著,您可以在撰寫程式記憶體取物件的不同屬性 WindowState
,以選擇應用程式的版面配置。 在下列範例中 isDualScreen()
,方法可用來選擇兩個不同的版面配置,一個用於單一螢幕裝置,另一個用於雙螢幕裝置。
fun ExampleApp(windowState: WindowState) {
if (windowState.isDualScreen())
DualScreenAppContent(windowState.foldSizeDp)
else
SingleScreenAppContent()
}
如需更詳細的 API 參考資訊,請參閱 WindowState 讀我檔案。
計算窗格大小
除了公開 Jetpack 視窗管理員和視窗大小類別資訊之外,類別 WindowState
也會計算兩個窗格版面配置的窗格大小。 如果 TwoPaneLayout 元件不適合您的專案,您可以使用 largeScreenPane1Weight
、 pane1SizeDp
和 pane2SizeDp
屬性來設定您自己的自訂版面配置:
fun ExampleApp(windowState: WindowState) {
windowState.largeScreenPane1Weight = 0.3f
CustomListDetailLayout(
pane1Width = windowState.pane1SizeDp.width,
pane2Width = windowState.pane2SizeDp.width,
list = { ListContent() },
detail = { DetailContent() }
)
}
窗格大小是根據下列邏輯來計算:
- 如果視窗包含 分隔 折迭功能:
- 根據折迭功能的界限計算窗格大小
- 如果視窗被視為大型 (
EXPANDED
寬度,且至少MEDIUM
高度大小類別) :- 根據
largeScreenPane1Weight
屬性、視窗大小和裝置方向計算窗格大小
- 根據
- 如果無法折迭或大型螢幕:
- 應該只顯示一個窗格,因此傳回窗格大小 0
請注意,這些邏輯檢查會依序執行,因此如果大型可折迭裝置並未分隔其折迭功能,表示裝置沒有轉軸且為平移,就可能被視為大型螢幕。
重要
largeScreenPane1Weight
必須在呼叫 pane1SizeDp
或 pane2SizeDp
之前設定 屬性,才能在計算中使用權數。
我們建議使用上述屬性來同時支援大型螢幕和可折迭。 不過,如果您只需要在分隔折迭功能出現時使用窗格大小,則可以改用 foldablePane1SizeDp
和 foldablePane2SizeDp
屬性:
fun ExampleApp(windowState: WindowState) {
CustomCompanionPaneLayout(
pane1Size = windowState.foldablePane1SizeDp,
pane2Size = windowState.foldablePane2SizeDp,
game = { GameScreen() },
controls = { ControlPanel() }
)
}
範例
若要查看更多如何使用 WindowState
的範例,請參閱連結 庫範例 和我們的 Compose 範例。