自 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文章
6139浏览量
105061
原文标题:Jetpack WindowManager 1.1 稳定版
文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论