作者 / android 开发者关系工程师 francesco romano
自 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 的应用,您可以使用以下代码段来计算窗口大小类别:
private fun computewindowsizeclasses() { 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/
一旦收集到 foldingfeature 信息,您便可以使用这些数据为当前设备状态创建优化布局,例如实现桌面模式。您可以在 mediaplayeractivity.kt 中查看桌面模式的示例。 mediaplayeractivity.kt
https://github.com/android/platform-samples/blob/main/samples/user-interface/windowmanager/src/main/java/com/example/platform/ui/windowmanager/mediaplayeractivity.kt
您还可以访问我们的 codelab 了解如何使用 jetpack windowmanager 支持可折叠设备和双屏设备:https://developer.android.google.cn/codelabs/android-window-manager-dual-screen-foldables
并排显示两个 activity
除了上述功能您还可以使用最新的稳定版 jetpack windowmanager api: activity 嵌入。 activity 嵌入
https://developer.android.google.cn/reference/kotlin/androidx/window/embedding/package-summary
自 android 12l 起,activity 嵌入允许采用传统多 activity 架构的开发者通过同一应用,甚至多个应用在大屏设备上并排显示多个 activity。 这是以最少的代码更改甚至无需代码更改便可以实现列表详情布局的绝佳方式。 注意: modern android development (mad) 建议使用基于 jetpack api (包括 jetpack compose) 的单 activity 架构。如果您的应用使用 fragment,请参阅 slidingpanelayout。activity 嵌入专为无法轻松更新为 mad 的多 activity 旧版应用而设计。
slidingpanelayout
https://developer.android.google.cn/jetpack/androidx/releases/slidingpanelayout
这也是该库中最大的变化,目前在 jetpack windowmanager 1.1 版中,activity 嵌入 api 非常稳定! 不仅如此,该 api 目前的功能也更加丰富,您可以通过此 api: 修改分屏行为 (分屏比例、规则、结束行为)
定义占位符 在运行时环境中检查 (并更改) 分屏状态 实现水平分屏 在全窗口中启动模态 如果您想探索 activity 嵌入,可访问专用 codelab 了解如何使用 activity 嵌入构建列表详情布局: 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
您可以参阅 jetpack windowmanager 文档和示例应用,即刻开始使用 windowmanager!
文档
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 稳定版
文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。
霍尔电流传感器如何测量电流
GaN HEMT器件结构解析
瑞能股份申请创业板IPO获受理
小米10 Pro珍珠白高清图集
NS LM5118宽电压升/降压电源方案
Jetpack WindowManager 1.1 稳定版
影响云原生应用性能的关键因素为什么是监控?
去耦电容的选择、容值计算和布局布线(一)
测试MPF102构成的直耦级联放大电路验证电路稳定性
S475可用于供应链自动化数据监测控制
基于SiC功率模块的高效逆变器设计方案
电路板四层板和两层板有什么区别?
关于欧美集成电路发展动态分析和应用
了解用话题建模分析在线产品评论的重要性
5G向垂直行业拓展的杀手锏
汽车各个零部件的更换时间是多久
MIMO,MIMO是什么意思,什么是MIMO无线通信技术
印制线路板刷涂防潮氧化涂液
更换机器人过程中出现MAM文件数值丢失故障原因
加速数字化转型与升级_构建全新数字经济体系