0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Jetpack WindowManager 1.1 稳定版

谷歌开发者 来源:未知 2023-10-18 19:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者 / 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 的应用,您可以使用以下代码段来计算窗口大小类别:

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 信息,如
  • 状态: 设备的折叠状态: FLATHALF_OPENED

  • 方向:折叠或设备合页的方向:HORIZONTALVERTICAL
  • 遮挡类型: 折叠或合页是否遮挡部分显示屏:NONEFULL
  • 是否分离:折叠或合页是否创建了两个逻辑显示区域: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:wKgZomUwAQeAGdxfAANwGdWvh-Q837.png  还有 eBay!

wKgZomUwAQeAFg-uAAd0Z8rsiAI921.png

实现包含多 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

开发者福利月

在十月,开启专属开发者们的快乐!线下线上精彩互动活动、神秘礼品、干货资料包统统安排上,让惊喜和期待填满整月。

赶快来了解详情参与互动,收获快乐和福利吧!

wKgZomUwAQiAOXxrAAAafJIrrMk621.gif 点击屏末||即刻开始使用 Jetpack WindowManager

wKgZomUwAQiAIF0UAAATN9B0Fw0405.png

wKgZomUwAQiAYx-lAAMyGF3oQT4271.png

wKgZomUwAQiACFDOAAAptPJQ2wE812.png


原文标题:Jetpack WindowManager 1.1 稳定版

文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    6271

    浏览量

    112241

原文标题:Jetpack WindowManager 1.1 稳定版

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Flymaple V1.1:高性能四轴飞行器控制器板

    Flymaple V1.1:高性能四轴飞行器控制器板 在电子工程领域,一款优秀的控制器板对于各类项目的成功实施至关重要。今天,我们就来深入了解一下 Flymaple V1.1(SKU:DFR0188
    的头像 发表于 05-13 17:00 325次阅读

    润芯微科技Gemini-S1开发板通过openvela 5.2稳定版兼容性测试

    近日,openvela生态迎来重要进展。润芯微自研的Gemini‑S1开发板顺利通过openvela 5.2稳定版兼容性测试,成为全球第一款获得openvela官方认证的开发板,也让生态落地真正进入硬件规模化阶段。
    的头像 发表于 04-16 15:59 423次阅读

    找不到适用于“S32 Design Studio for Power Architecture”的完整安装程序

    旧版本、更新或工具链文件,而不显示完整的安装程序本身。 您能否提供**完整安装程序**的最新稳定版本的直接下载链接? 谢谢。
    发表于 04-15 07:29

    TikTok使用Jetpack Compose提升开发者工作效率

    TikTok 是一个全球短视频平台,以海量的用户群体和极具创新性的功能而闻名。其团队不断为用户发布更新、进行实验并上线新功能。在保持高速迭代与应对技术债的双重挑战下,TikTok Android 团队选择了 Jetpack Compose。
    的头像 发表于 03-31 09:11 517次阅读

    微电网稳定性分析:电压、频率稳定的核心判定标准

    本文将系统梳理微电网电压稳定与频率稳定的核心内涵,拆解二者的核心判定标准、判定方法,分析影响稳定性的关键因素,重点探讨不同类型微电源对微电网稳定性的影响,为微电网
    的头像 发表于 03-17 15:08 696次阅读
    微电网<b class='flag-5'>稳定</b>性分析:电压、频率<b class='flag-5'>稳定</b>的核心判定标准

    微电网稳定性分析:小干扰稳定与暂态稳定关键技术

    微电网作为新型电力系统“源网荷储”协同的核心单元,其稳定性直接决定能源供给的可靠性与用户用电安全。在高比例新能源渗透与多模式运行的双重背景下,微电网面临着“功率波动常态化、故障冲击多样化”的挑战
    的头像 发表于 03-02 10:43 1885次阅读
    微电网<b class='flag-5'>稳定</b>性分析:小干扰<b class='flag-5'>稳定</b>与暂态<b class='flag-5'>稳定</b>关键技术

    解析DS320PR822:PCIe 5.0和CXL 1.1的高性能线性转接驱动器

    解析DS320PR822:PCIe 5.0和CXL 1.1的高性能线性转接驱动器 在高速数据传输领域,PCIe 5.0、CXL 1.1等接口技术的发展对信号传输的质量和稳定性提出了更高
    的头像 发表于 12-16 14:15 677次阅读

    CW32时钟的稳定检测

    HSE、LSE、HSIOSC、LSI、PLL 这 5 种时钟源都支持时钟稳定检测功能,用户可通过对应时钟源的稳定标志位来确定时钟状态。时钟稳定标志在关闭时钟源时由硬件清 0,在时钟源启动并稳定
    发表于 12-03 06:15

    重要通知 | Splashtop 即将停止支持 TLS 1.0/1.1

    尊敬的Splashtop用户:为持续增强Splashtop远程连接服务的安全性,我们将于2025年10月底停止支持TLS1.0和1.1协议。TLS1.0与1.1协议采用过时的加密方法,缺乏关键的安全
    的头像 发表于 09-30 10:08 957次阅读
    重要通知 | Splashtop 即将停止支持 TLS 1.0/<b class='flag-5'>1.1</b>

    0.6–1.1 GHz 两级、高线性度、高增益、低噪声放大器 skyworksinc

    电子发烧友网为你提供()0.6–1.1 GHz 两级、高线性度、高增益、低噪声放大器相关产品参数、数据手册,更有0.6–1.1 GHz 两级、高线性度、高增益、低噪声放大器的引脚图、接线图、封装手册
    发表于 09-18 18:30
    0.6–<b class='flag-5'>1.1</b> GHz 两级、高线性度、高增益、低噪声放大器 skyworksinc

    百度文心大模型X1.1正式发布

    今天,在WAVE SUMMIT深度学习开发者大会2025上,文心大模型X1.1正式发布,在事实性、指令遵循、智能体等能力上均提升显著。
    的头像 发表于 09-10 11:08 2468次阅读

    是德示波器MSOX2024A时间基准稳定性的测试方法

    一、时间基准稳定性对示波器性能的影响 1.1 时间基准稳定性如何影响示波器的测量精度 时间基准稳定性直接影响示波器测量精度。若时间基准不稳定
    的头像 发表于 08-18 17:19 921次阅读
    是德示波器MSOX2024A时间基准<b class='flag-5'>稳定</b>性的测试方法

    yolov11转kmodel,numpy是要降级为1.x吗?

    python3.9,yolo是最新的稳定版,和yolo捆绑pip安装的numpy是2.0.1 错误日志
    发表于 08-11 08:16

    全新导航库Jetpack Navigation 3发布

    在应用中的不同屏幕之间导航理应简单明了。然而,构建稳健、可扩展且赏心悦目的导航体验却并非易事。多年来,Jetpack Navigation 库一直是开发者的重要工具,但随着 Android 界面格局的演变,尤其是 Jetpack Compose 的兴起,我们意识到是时候探
    的头像 发表于 08-06 13:56 1623次阅读

    新品 | Cardputer Accessory Kit v1.1 &amp;amp; Atomic GPS Base V2.0

    本周,我们推出两款实用型产品CardputerAccessoryKitv1.1和AtomicGPSBaseV2.0,前者主要针对Cardputer在使用过程中常见的硬件维护问题,后者则是
    的头像 发表于 07-04 17:39 1665次阅读
    新品 | Cardputer Accessory Kit v<b class='flag-5'>1.1</b> &amp;amp; Atomic GPS Base V2.0