自 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:![wKgZomUwAQeAGdxfAANwGdWvh-Q837.png](https://file1.elecfans.com//web2/M00/AA/DB/wKgZomUwAQeAGdxfAANwGdWvh-Q837.png)
-
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
開發者福利月
在十月,開啟專屬開發者們的快樂!線下線上精彩互動活動、神秘禮品、干貨資料包統統安排上,讓驚喜和期待填滿整月。
趕快來了解詳情參與互動,收獲快樂和福利吧!
![wKgZomUwAQiAOXxrAAAafJIrrMk621.gif](https://file1.elecfans.com//web2/M00/AA/DB/wKgZomUwAQiAOXxrAAAafJIrrMk621.gif)
原文標題:Jetpack WindowManager 1.1 穩定版
文章出處:【微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
-
谷歌
+關注
關注
27文章
6194瀏覽量
106014
原文標題:Jetpack WindowManager 1.1 穩定版
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
HTTP 1.1 和 HTTP 2.0 的區別
解析NVIDIA JetPack 6.1的新功能
![解析NVIDIA <b class='flag-5'>JetPack</b> 6.1的新功能](https://file1.elecfans.com/web3/M00/00/40/wKgZPGdH2LuAJIMMAAAQ_V_JeLk798.png)
英國比克新推出了PicoScope7軟件的穩定新版本
![英國比克新推出了PicoScope7軟件的<b class='flag-5'>穩定</b>新版本](https://file.elecfans.com/web2/M00/9F/D9/poYBAGQ9752APSjeAAAYI1VgEtY574.png)
谷歌正式向Pixel設備推送Android 15穩定版
谷歌開始推送Android 15穩定版
NVIDIA JetPack 6.0版本的關鍵功能
![NVIDIA <b class='flag-5'>JetPack</b> 6.0版本的關鍵功能](https://file1.elecfans.com/web2/M00/05/B8/wKgZombeWvOAEOjgAAIXpwM05c0983.png)
使用NVIDIA JetPack 6.0和YOLOv8構建智能交通應用
![使用NVIDIA <b class='flag-5'>JetPack</b> 6.0和YOLOv8構建智能交通應用](https://file1.elecfans.com/web2/M00/03/F4/wKgZombITTeAJoN0AAFiFjt_ems659.png)
Jetpack Compose和設備類型的三大重要更新
【AWTK使用經驗】如何更換AWTK SDK與渲染模式
![【AWTK使用經驗】如何更換AWTK SDK與渲染模式](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
運放輸出不穩定是什么原因
idf.py set-target esp32s2命令無效的原因?
STM8L0515F3低功耗不穩定怎么解決?
微軟PowerToys發布0.80.1版,修復多項BUG提升軟件穩定性
Mozilla發布Firefox 123.0穩定版,新添網站兼容性報告工具
Wi-SUN FAN 1.1物理層認證的物聯網系統產品確保穩定和遠程通信白皮書
![Wi-SUN FAN <b class='flag-5'>1.1</b>物理層認證的物聯網系統產品確保<b class='flag-5'>穩定</b>和遠程通信白皮書](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論