WindowManager

借助 Jetpack WindowManager 库,应用开发者可为新的设备外形规格和多窗口环境提供支持。 该库为 API 版本 14 及更高版本提供通用的 API 接口。初始版本以可折叠设备为目标,不过未来版本将支持更多屏幕类型和窗口功能。
最近更新时间 当前稳定版 下一候选版 Beta 版 Alpha 版
2021 年 11 月 17 日 - - 1.0.0-beta04 -

声明依赖项

如需添加 WindowManager 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

Groovy

dependencies {
    implementation "androidx.window:window:1.0.0-beta04"

    // For Java-friendly APIs to register and unregister callbacks
    implementation "androidx.window:window-java:1.0.0-beta04"

    // For RxJava2 integration
    implementation "androidx.window:window-rxjava2:1.0.0-beta04"

    // For RxJava3 integration
    implementation "androidx.window:window-rxjava3:1.0.0-beta04"

    // For testing
    implementation "androidx.window:window-testing:1.0.0-beta04"
}

Kotlin

dependencies {
    implementation("androidx.window:window:1.0.0-beta04")

    // For Java-friendly APIs to register and unregister callbacks
    implementation("androidx.window:window-java:1.0.0-beta04")

    // For RxJava2 integration
    implementation("androidx.window:window-rxjava2:1.0.0-beta04")

    // For RxJava3 integration
    implementation("androidx.window:window-rxjava3:1.0.0-beta04")

    // For testing
    implementation("androidx.window:window-testing:1.0.0-beta04")
}

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库的改进有自己的见解,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

1.0 版

版本 1.0.0-beta04

2021 年 11 月 17 日

发布了 androidx.window:window-*:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

新功能

  • 将 WindowInfoRepository 重命名为 WindowInfoTracker。
  • 将 activity 设置为 WindowInfoTracker 的一个显式方法依赖项。
  • 为 WindowMetricsCalculator 添加一个简单的 TestRule,用于为使用 Robolectric 的开发者提供支持。

API 变更

  • 提取扩展 (I25a5f)
  • 在 ActivityStack 中添加了 isEmpty (I5a4e6)
  • 将 WindowInfoRepository 重命名为 WindowInfoTracker。
    • 同时根据这项更改更新了 java/rxjava/testing 依赖项。(I0da63)
  • 为简单的 WindowMetricsCalculator 添加了测试规则。(Ibacdb)

版本 1.0.0-beta03

2021 年 10 月 27 日

发布了 androidx.window:window-*:1.0.0-beta03版本 1.0.0-beta03 中包含这些提交内容

新功能

  • 添加了实验性 Activity Embeding API。此初始布局版本可以并排显示两个 Activity。

API 变更

  • 移除了 currentWindowMetrics API,因为我们无法准确提供它。请改用 WindowMetricsCalculator (Icda5f)
  • 更新了 Extensions API。(Ica92b)
  • 为一项新功能添加了一个接口,该接口允许嵌入 activity 并在父级任务窗口中并排显示这些 activity。(I5711d)
  • 已隐藏 WindowMetrics 和 WindowLayoutInfo 的构造函数,请改用测试 API。(I5a1b5)
  • 添加了一个 API,用于创建虚假 WindowLayoutInfo 对象。(I4a2fd)

bug 修复

版本 1.0.0-beta02

2021 年 9 月 1 日

发布了 androidx.window:window-*:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

新功能

  • 添加了实验性注解,以便为实验性 API 添加注解。(I9f1b6)
  • 添加了测试方法来创建接受 Rect 的测试 FoldingFeature,以便在使用 Robolectric(而非实际 activity)时更轻松地进行测试。(Id1cca)

版本 1.0.0-beta01

2021 年 8 月 18 日

发布了 androidx.window:window-*:1.0.0-beta01版本 1.0.0-beta01 中包含这些提交内容

新功能

  • 移除了旧常量,并将 FoldingFeature 转换为一个接口。

API 变更

  • 移除了旧常量,并将 FoldFeature 转换为一个接口。(I9a2d5)

bug 修复

  • 依赖于 Test Core 库的库已升级到版本 1.4.0,现支持 Android 平台版本 S。(I88b72b/189353863

版本 1.0.0-alpha10

2021 年 8 月 4 日

发布了 androidx.window:window-*:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

新功能

  • 将 WindowInfoRepo 重命名为了 WindowInfoRepository,并调整了相应的类/文件。
  • 在 WindowInfoRepository 中将当前窗口指标转换为了 Flow,因为该值会随时间而变化。
  • 将 WindowInfoRepoJavaAdapter 重命名为了 WindowInfoRepoCallbackAdapter
  • 添加了辅助方法来创建测试 FoldingFeature 对象
  • 更新了软件包,以便按软件包支持的功能对类进行分组。

API 变更

  • 将 ActivityExt 重命名为了 ActivityExtensions,并将 Repo 更改为了 Repository。(I61a16)
  • 更新了类的软件包。(I23ae2)
  • 从 WindowInfoRepo 中移除了 WindowMetrics (I24663)
  • 移除了 WindowManager 并改用 WindowInfoRepo
    • 将 WindowBackend 转换为了内部类。(I06d9a)
  • 将窗口指标转换为了 Flow。
    • 将 Java 适配器重命名为了 WindowInfoRepoCallbackAdapter
    • 移除了 callbackFlow,不再使用实验性 API。(Ia4d15)
  • 添加了辅助方法来创建测试显示功能。
    • 从 occlusionMode 更改为了 occlusionType (If4cff)

bug 修复

  • 修复了移除 core 库时出现的 proguard 错误。
  • 修复了 WindowLayoutInfo 未能传递给其他订阅者的错误。
  • 修复了配置更改不会触发折叠功能更新的错误。

版本 1.0.0-alpha09

2021 年 6 月 30 日

发布了 androidx.window:window-*:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

新功能

  • 将整数常量更改为无界限枚举。
  • 添加测试 util 以创建测试折叠功能。

API 变更

  • 添加了辅助方法来创建测试显示功能。(I3cf54)
    • occlusionMode 更改为 occlusionType

bug 修复

  • 当添加数据流的多个使用方时,发出初始值。

版本 1.0.0-alpha08

2021 年 6 月 16 日

发布了 androidx.window:window-*:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

新功能

  • 发布了测试工件,以便在使用 WindowInfoRepository 时更轻松地进行测试。使用 WindowInfoRepository 可获取有关 DisplayFeature 和 WindowMetrics 的信息。(I57f66Ida620

版本 1.0.0-alpha07

2021 年 6 月 2 日

发布了 androidx.window:window-*:1.0.0-alpha07版本 1.0.0-alpha07 中包含这些提交内容

新功能

  • 将核心窗口库迁移到了 Kotlin。今后将使用协程和挂起函数来公开异步数据。
  • 将 WindowInfoRepo 添加为用于获取 WindowLayoutInfo 数据流和 WindowMetrics 的主交互点。
  • 新增了 window-java 工件,可提供兼容 Java 的 API,用于注册和取消注册回调。
  • 新增了 window-rxjava2window-rxjava3 工件,可提供适配 RxJava 的 API。

API 变更

  • 添加了 WindowServices,以统一提供依赖项。
    • 添加了基于协程的 API,以使用窗口布局信息。(Iab70f)
  • 将核心窗口管理器库迁移到了 Kotlin。(Icca34)

bug 修复

  • 添加了新的数据类,以表示功能边界。(I6dcd1)

版本 1.0.0-alpha06

2021 年 5 月 5 日

发布了 androidx.window:window:1.0.0-alpha06版本 1.0.0-alpha06 中包含这些提交内容

新功能

  • 我们已开始迁移到 Kotlin,并将在下一版本中完成迁移。
  • DeviceState 已从公共 API 中移除,请改用 FoldingFeature。
  • 我们已从 FoldingFeature 状态中移除了 STATE_FLIPPED,因为目前任何用例都不支持它。
  • 此外,我们还移除了其他已废弃的 API。

API 变更

  • 添加 Kotlin 作为依赖项。
    • 将核心库迁移到 Kotlin。(Idd995)
  • 移除了 DisplayFeature 构建器。(I61fa4)
  • 从公共 API 中移除了 DeviceState,请改用 FoldingFeature。(Id6079)
  • 从扩展程序中移除了设备状态回调。(I5ea83)
  • 从 FoldingFeature 中移除了 STATE_FLIPPED。(I9c4e1)
  • 移除了已废弃的注册方法。(Ib381b)

版本 1.0.0-alpha05

2021 年 3 月 24 日

发布了 androidx.window:window:1.0.0-alpha05版本 1.0.0-alpha05 中包含这些提交内容。

新功能

我们为 FoldingFeature 添加了一些便捷方法,以便应用能够判断相应功能是否处于分离状态、遮蔽状态,以及确定合页的朝向。我们还将隐藏合页类型,以便

我们从 WindowManager 中移除同步读取方法。因存在隐式竞态条件,同步读取方法容易出错。注册监听器和回调,以在 WindowLayoutInfo 上接收更新。

API 变更

  • 添加了可与 FoldingFeature 搭配使用的便捷方法 (Ie733f)
  • 从 WindowManager 中移除了同步读取方法 (I96fd4)

版本 1.0.0-alpha04

2021 年 3 月 10 日

发布了 androidx.window:window:1.0.0-alpha04版本 1.0.0-alpha04 中包含这些提交内容

新功能

  • 修复了在没有 OEM 实现的情况下不发出 WindowLayoutInfo 的错误。现在我们会发出一个空的 WIndodoLayoutInfo。
  • 修复了因铰链状态在应用处于后台运行时发生更改而导致系统无法正确更新状态的错误。现在状态将会保持一致。
  • 更新了 proguard 文件,以忽略运行时依赖项发出的警告。

bug 修复

  • 当缺少 OEM 库时,发出一个空值。(Ide935)

版本 1.0.0-alpha03

2021 年 2 月 18 日

发布了 androidx.window:window:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

新功能

  • 当 OEM 实现为空时,针对 WindowLayoutInfo 发出一个空值。这样可以更轻松地在更多设备上使用此库。由于这些 API 是异步的,因此我们仍建议应用编写一些防御性代码,并在超时后发出默认值。我们对 OEM 实现不作任何保证,并且初始值也可能会出现延迟。

bug 修复

  • 当缺少 OEM 库时,发出一个空值。(Ide935)

版本 1.0.0-alpha02

2021 年 1 月 27 日

发布了 androidx.window:window:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

新功能

  • 我们弃用了一些 API,以帮助简化 API 并减少错误。一些值得注意的示例包括从 WindowManager 中移除同步读取操作,以及弃用 DeviceState。同步读取操作可能会导致出现竞态条件并且界面错误。

  • 我们已将 DisplayFeature 转换为一个今后将实现其他功能的接口。我们的第一个功能是 FoldingFeature,现在是屏幕折叠或合页的表示形式。该部分还包含取代 DeviceState 的合页的状态。

  • Android 11 中引入了 WindowMetrics,可让开发者轻松查询与窗口相关的指标,例如,窗口的位置和大小,以及任何系统边衬区。我们在此版本中向后移植了 API,以便开发者能够利用 WindowMetrics,并继续支持旧版 Android。可以通过 WindowManager#getCurrentWindowMetrics() 和 WindowManager#getMaximumWindowMetrics() API 获取 WindowMetrics。

API 变更

  • 弃用将在下一个 Alpha 版中移除的 API (Ib7cc4)
  • 更新 ExtensionInterface 以接受显式 Activity 引用。(I07ded)
  • 引入 WindowMetrics API。(I3ccee)
  • 从 WindowManager 中移除同步读取方法 (I69983)
  • 保护 ExtensionWindowBackend 软件包。(Ied208)

bug 修复

  • 更新 ExtensionInterface API 以接受视觉上下文。(I8e827)

外部贡献

  • 合并 DeviceState 和 WindowLayoutInfo,以便更轻松地访问数据。(Id34f4)

版本 1.0.0-alpha01

2020 年 2 月 27 日

发布了 androidx.window:window:1.0.0-alpha01androidx.window:window-extensions:1.0.0-alpha01版本 1.0.0-alpha01 中包含这些提交内容 这是 Window Manager 库的第一个版本。

新功能

  • DisplayFeature:这一新的 API 可识别一整块屏幕平面上的中断处,如合页或折叠线
  • DeviceState:这一新的 API 可根据定义的折叠状态(例如 CLOSEDOPENEDHALF_OPENED 等)列表,提供手机当前的折叠状态