自 Jetpack WindowManager 1.0 穩定版發布的一年多以來,可折疊設備和大屏設備領域發生了諸多變化。許多新款設備都已進入市場,大量新用例也已解鎖! Jetpack WindowManager 庫在幫助您優化您的 Android 應用上發揮重要作用,使其能夠適用于不同的設備類型。并且此版本還包含多項新功能和改進,是一個重大的里程碑式進展。 讓我們來回顧一下 Jetpack WindowManager 庫涵蓋的所有用例。
獲取窗口指標 (和大小類別!)
過去,開發者通過設備顯示尺寸來決定其應用布局,但隨著不同設備類型 (如可折疊設備) 和顯示模式 (如多窗口模式和多顯示屏模式) 的出現,了解應用窗口的大小而不是設備的顯示尺寸變得至關重要。 Jetpack WindowManager WindowMetricsCalculator 界面可以提供可靠的數據來源,以幫助您衡量當前可用于顯示您應用的屏幕空間。
-
WindowMetricsCalculator
https://developer.android.google.cn/reference/kotlin/androidx/window/layout/WindowMetricsCalculator
在此基礎上,窗口大小類別是一組視口劃分點,有助于您設計、開發和測試響應式和自適應應用布局。此類劃分點專門用于平衡布局的簡單性和靈活性,以便針對特殊情況優化您的應用。
-
窗口大小類別
https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes#window_size_classes
對于基于 View 的應用,您可以使用以下代碼段來計算窗口大小類別:
privatefuncomputeWindowSizeClasses(){
val metrics = WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(this)
val width = metrics.bounds.width()
val height = metrics.bounds.height()
val density = resources.displayMetrics.density
val windowSizeClass = WindowSizeClass.compute(width/density, height/density)
// use windowSizeClass.windowHeightSizeClass and windowSizeClass.windowWidthSizeClass
}
您可以參閱 "支持不同屏幕尺寸"開發者指南了解詳細信息。
-
支持不同屏幕尺寸
https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes
讓應用能夠感知折疊
Jetpack WindowManager 還提供優化可折疊設備布局所需的所有 API。 具體而言,您可以使用 WindowInfoTracker 查詢 FoldingFeature 信息,如
-
狀態: 設備的折疊狀態: FLAT 或 HALF_OPENED
- 方向:折疊或設備合頁的方向:HORIZONTAL 或 VERTICAL
- 遮擋類型: 折疊或合頁是否遮擋部分顯示屏:NONE 或 FULL
- 是否分離:折疊或合頁是否創建了兩個邏輯顯示區域:true 或 false
- 邊界:應用窗口內功能的邊界矩形 (繼承自 DisplayFeature)
- WindowInfoTrackerhttps://developer.android.google.cn/reference/kotlin/androidx/window/layout/WindowInfoTracker
- FoldingFeaturehttps://developer.android.google.cn/reference/androidx/window/layout/FoldingFeature
- DisplayFeaturehttps://developer.android.google.cn/reference/androidx/window/layout/DisplayFeature#getBounds%28%29
您可以通過 Flow 訪問這些數據:
override fun onCreate(savedInstanceState: Bundle?) {
...
lifecycleScope.launch(Dispatchers.Main) {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
WindowInfoTracker.getOrCreate(this@MainActivity)
.windowLayoutInfo(this@MainActivity)
.collect { layoutInfo ->
// New posture information
val foldingFeature = layoutInfo.displayFeatures
// use the folding feature to update the layout
}
}
}
}
-
Flow
https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/
-
MediaPlayerActivity.kt
https://github.com/android/platform-samples/blob/main/samples/user-interface/windowmanager/src/main/java/com/example/platform/ui/windowmanager/MediaPlayerActivity.kt
并排顯示兩個 Activity
除了上述功能您還可以使用最新的穩定版 Jetpack WindowManager API:Activity 嵌入。
-
Activity 嵌入
https://developer.android.google.cn/reference/kotlin/androidx/window/embedding/package-summary
-
SlidingPaneLayout
https://developer.android.google.cn/jetpack/androidx/releases/slidingpanelayout
-
修改分屏行為 (分屏比例、規則、結束行為)
- 定義占位符
- 在運行時環境中檢查 (并更改) 分屏狀態
- 實現水平分屏
- 在全窗口中啟動模態
https://developer.android.google.cn/codelabs/large-screens/activity-embedding
許多應用都已開始在生產環境中使用 Activity 嵌入,例如 WhatsApp: ?還有 eBay!實現包含多 Activity 的列表詳情布局并不是 Activity 嵌入的唯一用例。 自 Android 13 (API 級別 33) 起,應用可以嵌入來自其他應用的 Activity。 跨應用 Activity 嵌入支持多個 Android 應用的 Activity 進行可視化集成處理。系統會在屏幕上并排或上下顯示托管應用的 Activity 和其他應用的嵌入 Activity,就像在單一應用 Activity 嵌入中一樣。 托管應用會按照實現單一應用 Activity 嵌入的相同方式實現跨應用 Activity 嵌入,但出于安全原因,被嵌入的應用必須同意并選擇加入。 您可以在 "Activity 嵌入" 開發者指南中深入了解跨應用嵌入:
-
Activity 嵌入
https://developer.android.google.cn/guide/topics/large-screens/activity-embedding#cross-application
總結
如果您想優化您的應用在不同設備類型上的用戶體驗,Jetpack WindowManager 便是您應該學習的最重要的庫之一。 WindowManager 還將在每個版本中添加有趣的新功能,敬請關注 1.2 版本中即將推出的功能。-
1.2 版本
https://developer.android.google.cn/jetpack/androidx/releases/window#version_12_2
-
文檔
https://developer.android.google.cn/jetpack/androidx/releases/window
-
示例應用
https://github.com/android/platform-samples/tree/main/samples/user-interface/windowmanager
開發者福利月
在十月,開啟專屬開發者們的快樂!線下線上精彩互動活動、神秘禮品、干貨資料包統統安排上,讓驚喜和期待填滿整月。
趕快來了解詳情參與互動,收獲快樂和福利吧!
?點擊屏末|閱讀原文|即刻開始使用 Jetpack WindowManager
原文標題:Jetpack WindowManager 1.1 穩定版
文章出處:【微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
-
谷歌
+關注
關注
27文章
6194瀏覽量
106014
原文標題:Jetpack WindowManager 1.1 穩定版
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論