WindowManager
| 最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| 2025 年 9 月 24 日 | 1.5.0 | - | - | - |
声明依赖项
如需添加 WindowManager 的依赖项,您必须将 Google Maven 代码库添加到项目中。有关详情,请阅读 Google 的 Maven 制品库。
在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
Groovy
dependencies { implementation "androidx.window:window:1.5.0" // For Java-friendly APIs to register and unregister callbacks implementation "androidx.window:window-java:1.5.0" // For RxJava2 integration implementation "androidx.window:window-rxjava2:1.5.0" // For RxJava3 integration implementation "androidx.window:window-rxjava3:1.5.0" // For testing implementation "androidx.window:window-testing:1.5.0" }
Kotlin
dependencies { implementation("androidx.window:window:1.5.0") // For Java-friendly APIs to register and unregister callbacks implementation("androidx.window:window-java:1.5.0") // For RxJava2 integration implementation("androidx.window:window-rxjava2:1.5.0") // For RxJava3 integration implementation("androidx.window:window-rxjava3:1.5.0") // For testing implementation("androidx.window:window-testing:1.5.0") }
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.5
版本 1.5.0
2025 年 9 月 24 日
发布了 androidx.window:window-*:1.5.0。版本 1.5.0 中包含这些提交内容。
自 1.4.0 以来的重要变更:
- 为大型和超大型窗口添加了
WindowSizeClass断点。(I40d85) - 将
WindowMetrics的计算扩展到了应用上下文。(I8eeeb、b/360934048) - 提供了一个 getter,用于实现对
WindowLayoutInfo的直接访问。(Ie9513) - 引入了一个 API,用于自动保存嵌入状态,并在应用进程重启时自动恢复嵌入状态。(Ie0295)
- 移除了实验性
WindowInsetsAPI。(I68a71)
bug 修复
- 修复了
EmbeddingRule在某些情况下返回不同hashCode的 bug。(I748cc) - 修复了因设备实现中的错误而可能导致
NullPointerException的问题。 - 修复了因 ProGuard 移除未使用的类而导致
ActivityEmbedding安全检查失败的问题。
外部贡献
- 将所有 KMP 平台添加到
window-core。(If3d7c)
版本 1.5.0-rc01
2025 年 8 月 27 日
发布了 androidx.window:window-*:1.5.0-rc01。版本 1.5.0-rc01 中包含这些提交内容。
bug 修复
- 修复了因设备实现中的错误而可能导致
NullPointerException的问题。 - 修复了因 ProGuard 移除未使用的类而导致
ActivityEmbedding安全检查失败的问题。
版本 1.5.0-beta02
2025 年 8 月 13 日
发布了 androidx.window:window-*:1.5.0-beta02。版本 1.5.0-beta02 中包含这些提交内容。
新功能
- 修复了一些小 bug。
外部贡献
- 将所有 KMP 平台添加到
window-core。(If3d7c)
版本 1.5.0-beta01
2025 年 7 月 2 日
发布了 androidx.window:window-*:1.5.0-beta01。版本 1.5.0-beta01 中包含这些提交内容。
版本 1.5.0-alpha02
2025 年 5 月 7 日
发布了 androidx.window:window-*:1.5.0-alpha02。版本 1.5.0-alpha02 中包含这些提交内容。
API 变更
- 为大型和超大型窗口添加了
WindowSizeClass断点。(I40d85) - 将
WindowMetrics的计算扩展到了应用上下文。(I8eeeb、b/360934048) - 提供了一个 getter,用于实现对
WindowLayoutInfo的直接访问。(Ie9513) - 引入了一个 API,用于自动保存嵌入状态,并在应用进程重启时自动恢复嵌入状态。(Ie0295)
- 移除了实验性
WindowInsetsAPI。(I68a71) - 隐藏了一些构造函数。(I87b8d)
bug 修复
- 修复了
EmbeddingRule在某些情况下返回不同hashCode的 bug。(I748cc)
版本 1.5.0-alpha01
2025 年 3 月 12 日
发布了 androidx.window:window-*:1.5.0-alpha01。版本 1.5.0-alpha01 中包含这些提交内容。
新功能
- 下一个 1.5.0 的初始版本。
版本 1.4
版本 1.4.0
2025 年 5 月 20 日
发布了 androidx.window:window-*:1.4.0。版本 1.4.0 中包含这些提交内容。
自 1.3.0 以来的重要变更
- activity 嵌入
- 用于自定义启动动画的 API
- 互动分隔线
ActivityStack固定- 全屏对话框变暗
- 嵌入式 activity 窗口信息回调
- 增强型
ActivityStack管理 - 将 activity 启动到指定的
ActivityStack中
WindowMetricsCalculator- 改进了可测试性支持
WindowMetrics- 用于计算
withDp和heightDp的便捷方法 - 将边界检查更新为
isAtLeast,并使用下限来支持添加新值
- 用于计算
WindowSizeClass- 添加了从
WindowMetrics进行计算的方式
- 添加了从
WindowInfoTracker- 添加了一个 API,用于检测设备上支持的姿势
版本 1.4.0-rc02
2025 年 4 月 23 日
发布了 androidx.window:window-*:1.4.0-rc02。版本 1.4.0-rc02 中包含这些提交内容。
bug 修复
- 修复了
ActivityEmbedding的 Proguard 崩溃问题。
版本 1.4.0-rc01
2025 年 3 月 12 日
发布了 androidx.window:window-*:1.4.0-rc01。版本 1.4.0-rc01 中包含这些提交内容。
新功能
- 更新了
WindowSizeClassAPI。 - 更新了 activity 嵌入 API。
版本 1.4.0-beta02
2025 年 2 月 12 日
发布了 androidx.window:window-*:1.4.0-beta02。版本 1.4.0-beta02 中包含这些提交内容。
新功能
- 修复了仅在属性上但不在 getter 上的注解。
版本 1.4.0-beta01
2025 年 1 月 15 日
发布了 androidx.window:window-*:1.4.0-beta01。版本 1.4.0-beta01 中包含这些提交内容。
新功能
- 添加了允许自定义
ActivityEmbedding动画的 API。 - 扩展了
WindowMetricsCalculator测试 API,以允许伪造窗口指标。
API 变更
- 隐藏了一些构造函数。(I87b8d)
- 允许应用自定义
ActivityEmbedding动画。(If31a8) - 添加了对
watchosDeviceArm64KMP 目标和目标 Kotlin 1.9 的支持。(Icf15d、b/364652024) - 公开了
WindowMetricsCalculatorAPI。(I1cebf)
bug 修复
- 此库现在使用 JSpecify nullness 注解,这些注解属于 type-use 类型。Kotlin 开发者应使用以下编译器实参来强制执行正确用法:
-Xjspecify-annotations=strict(这是 Kotlin 编译器从 2.1.0 版开始的默认实参)。(Ie69ac、b/326456246)
版本 1.4.0-alpha05
2024 年 10 月 16 日
发布了 androidx.window:window-*:1.4.0-alpha05。版本 1.4.0-alpha05 中包含这些提交内容。
新功能
- 添加了便捷函数以从
WindowMetrics获取widthDp和heightDp。
API 变更
- 将
widthDp和heightDp添加到了WindowMetrics。(Ide026) - 移除了实验性
WindowInsetsAPI。(I68a71) - 将边界检查方法名称更新为
isAtLeast。(Ib0ab7)
版本 1.4.0-alpha04
2024 年 10 月 2 日
发布了 androidx.window:window-*:1.4.0-alpha04。版本 1.4.0-alpha04 中包含这些提交内容。
API 变更
- 添加了一种用于根据
WindowMetrics计算WindowSizeClass的方法。(874dba) - 为清晰起见,将
WindowSizeClass方法更改为containsWidthDp、containsHeightDp和containsWindowSizeDp。(fa760d) - 将
WindowAreaController转换成了抽象基类。(I90893)
bug 修复
- 添加了在创建测试
FoldingFeature时对相对边界的支持。(2e6b3e) - 修复了选择
WindowSizeClass时出现的常规 bug。
版本 1.4.0-alpha03
2024 年 9 月 18 日
发布了 androidx.window:window-*:1.4.0-alpha03。版本 1.4.0-alpha03 中包含这些提交内容。
新功能
- 添加了一个实用方法,用于从
WindowMetrics获取WindowSizeClass。(I83f1f) - 将
isAtLeast重命名为containsBreakpoint。(I85b47) - 使用浮点数向
computeWindowSizeClass添加了重载。(I3dcb2、b/364677934、b/364677802、b/364680886)
bug 修复
- 向默认的
WindowSizeClass断点集添加了缺失的断点。 - 修复了在某些情况下,紧凑型尺寸未被正确选择的 bug。
版本 1.4.0-alpha02
2024 年 9 月 4 日
发布了 androidx.window:window-*:1.4.0-alpha02。版本 1.4.0-alpha02 中包含这些提交内容。
新功能
添加了对自定义 WindowSizeClass 的支持。
- 公开了
WindowSizeClass的构造函数,以便开发者可以使用自己的构造函数。 - 添加了
isAtLeast实用程序方法,以便开发者可以处理一系列WindowSizeClass值。 - 在
Set<WindowSizeClass>上添加了一个扩展函数,以计算相应组中的最佳匹配项。 - 为 Android 建议的断点添加了常量。
- 添加了与 Android 建议的断点相对应的断点集。
API 变更
- 更新了
WindowSizeClass的边界方法名称。(If89a6) - 更新了
WindowSizeClassAPI,以支持在未来添加新的断点值。我们不使用绝对界限,而是使用下限。建议开发者在处理WindowSizeClass时使用下限检查。现有的WindowWidthSizeClass和WindowHeightSizeClass将被废弃,因为我们不会进一步开发它们。(I014ce)
版本 1.4.0-alpha01
2024 年 8 月 7 日
发布了 androidx.window:window-*:1.4.0-alpha01。版本 1.4.0-alpha01 中包含这些提交内容。
新功能
- ActivityStack 固定可让应用固定一个容器中的内容,并使其导航与另一个容器隔离。
- 借助互动分隔线,应用可在分屏演示中显示两个 activity 之间的固定分隔线或可拖动分隔线。
- 借助全屏对话框变暗功能,应用可指定对话框变暗区域,从而使整个任务窗口变暗,或仅使显示对话框的容器变暗。
- 嵌入式 activity 窗口信息回调允许应用持续接收嵌入式 activity 窗口的更新。
- 嵌入动画背景功能可让应用指定动画背景,从而在使用
ActivityEmbedding时提高转场动画的质量。 - 增强型 ActivityStack 管理功能允许应用在使用
ActivityEmbedding时更好地控制ActivityStacks,包括: - 将 activity 启动到指定的
ActivityStack中 - 完成
ActivityStack
API 变更
引入了名为
WindowInfoTracker#supportedPostures的新 API:- 此 API 用于确定设备是否支持可折叠设备的桌面模式。添加了 WindowAreaSessionPresenter#getWindow
添加了用于支持
ActivityStack固定的 API:SplitPinRule类SplitController#pinTopActivityStackSplitController#unpinTopActivityStack
添加了用于启用和配置互动分隔线的 API
DividerAttributes类SplitAttributes.Builder#setDividerAttributes
添加了用于为对话框设置
EmbeddingConfiguration和DimAreaBehavior的 APIEmbeddingConfiguration类DimAreaBehavior类ActivityEmbeddingController#setEmbeddingConfiguration
添加了用于接收嵌入式 activity 窗口信息更新的 API
EmbeddedActivityWindowInfo类ActivityEmbeddingController#embeddedActivityWindowInfo
添加了用于设置嵌入动画背景的 API
EmbeddingAnimationBackgroundSplitAttributes.Builder#setAnimationBackground
添加了用于完成
ActivityStacks的 APIActivityEmbeddingController#finishActivityStacks
添加了用于设置启动
ActivityStack的 APIActivityEmbeddingOptions#setLaunchingActivityStack
以下 API 现已稳定,不再处于实验阶段:
ActivityEmbeddingController#invalidateVisibleActivityStacks(已从 SplitController#invalidateTopVisibleSplitAttributes 中移出)ActivityEmbeddingController#getActivityStackSplitController#updateSplitAttributes
添加了适用于版本 1.4 的 API。(I56774)
bug 修复
- 修复了在会话处于活动状态时,某些设备会返回 UNAVAILABLE 而不是 ACTIVE 的 bug。
- 由于 API 支持不稳定,在
vendorApiLevel为 2 的设备上移除了对transferActivityToWindowArea的支持。 - 引入了一个 API,用于为进行 Activity 嵌入的可拖动分隔线启用拖动到全屏功能。(I645c9)
- 允许应用通过
SplitAttributes的动画参数停用ActivityEmbedding动画。(Idc01a) - 移除了对新平台 API 的访问权限进行手动概述的功能,这是因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 时,以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有 build 时,系统会通过 API 建模自动进行 API 访问权限概述。建议未使用 AGP 的客户更新到 D8 版本 8.1 或更高版本。如需了解更多详情,请参阅这篇文章。(Ia60e0、b/345472586)
- 允许扩展程序为
SplitAttributes获取动画参数,以便设备可将其用于动画转场。(Iede00) - 隐藏了叠加层 API。(Ic4251)
- 引入了用于为拆分窗口配置固定分隔线或可拖动分隔线的 API。(Ia7a78)
- 向
WindowMetrics添加了密度。(Id6723) - 添加了用于获取
SupportedPostures的 API。(If557a) - 从实验性 API 中移除了
setLaunchingActivityStack。(I191cf) - 引入了
ActivityEmbeddingController#embeddedActivityWindowInfo。(I24312) - 废弃了
#getToken,并添加了#getActivityStackToken。(Ie0471) - 为
embeddedActivityWindowInfoFlow API 引入了回调适配器。(Ida77f) - 为 overlayInfo Flow API 添加了回调适配器。(I7264f)
- 引入了
WindowSdkExtensionsRule以替换extensionsVersion进行测试。(Ifb928) - - 将
#setLaunchingActivityStack迁移到了 Bundle 以与ActivityOptionsCompat用法兼容。- 用户应传递
activityOptions.toBundle,而不是ActvityOptions本身。 - 移除了
#setLaunchingActivityStack(Activity)。用户应迁移为使用ActivityEmbeddingController#getActivityStac(Activity)获取ActivityStack,并将ActivityStack传递给#setLaunchingActivityStack。(Ie0ccc)
- 用户应传递
- - 引入了
ActivityStack.Token和SpltInfo.Token作为在 WM Jetpack 和扩展程序之间进行通信的标识符。- 废弃/替换了采用/返回令牌(而非 IBinder)的 API。(I12b24)
- - 引入了
ActivityEmbeddingController#invalidateVisibleActivityStacks- 移除了
SplitController#invalidateTopVisibleSplitAttributes,因为该功能已整合到#invalidateVisibleActivityStacks中。(I02ef5)
- 移除了
- - 添加了用于设置嵌入配置的 API。(I59a4a)
- - 添加了固定/取消固定顶部
ActivityStackandroidx.WindowAPI- 更新了演示应用,以允许固定/取消固定顶部
ActivityStack。(I24dd3)
- 更新了演示应用,以允许固定/取消固定顶部
- 重新添加了
#finishActivityStacks和ActivityEmbeddingOptions。(Ic1ab3) - 移除了不稳定的 API。(Ibc534、b/302380585)
版本 1.3
版本 1.3.0
2024 年 5 月 29 日
发布了 androidx.window:window-*:1.3.0。版本 1.3.0 中包含这些提交内容。
自 1.2.0 以来的重要变更
- 添加了针对窗口大小类的 Kotlin Multiplatform 支持。
版本 1.3.0-rc01
2024 年 5 月 14 日
WindowManager Jetpack 1.3 为 WindowSizeClass 功能带来了 Kotlin Multiplatform 支持,并修复了多个 bug。
发布了 androidx.window:window-*:1.3.0-rc01。版本 1.3.0-rc01 中包含这些提交内容。
版本 1.3.0-beta02
2024 年 5 月 1 日
发布了 androidx.window:window-*:1.3.0-beta02。版本 1.3.0-beta02 中包含这些提交内容。
API 变更
- 移除了对创建和使用自定义
WindowSizeClass的支持。(Id1143)
bug 修复
- 修复了因 ProGuard 在某些设备实现上剥离某些文件而导致的
KotlinReflectionInternalError。(I01b02)
版本 1.3.0-beta01
2024 年 4 月 3 日
发布了 androidx.window:window-*:1.3.0-beta01。版本 1.3.0-beta01 中包含这些提交内容。
版本 1.3.0-alpha03
2024 年 3 月 6 日
发布了 androidx.window:window-*:1.3.0-alpha03。版本 1.3.0-alpha03 中包含这些提交内容。
API 变更
- 将
WindowSizeClassUtil拆分为更专注的方法。(Ie9292) - 恢复了
WindowSizeClass#compute。(I21355、b/324293374)
bug 修复
- 修复了所提供的上下文未正确解封装时发生的崩溃。(94d10ce、b/318787482)
版本 1.3.0-alpha02
2024 年 2 月 7 日
发布了 androidx.window:window-*:1.3.0-alpha02。版本 1.3.0-alpha02 中包含这些提交内容。
新功能
- 对窗口大小类 API 的 API surface 进行了更新,让开发者可以更加灵活地使用自己的大小类。
API 变更
- 为宽度选择器添加了高度限制。(I23393)
- 添加了用于从集合中选择
WindowSizeClass的实用函数。添加了实验性评分函数,以便开发者可以编写自己的选择器。添加了选择器扩展函数,以在给定边界内选择最宽的WindowSizeClass。(I0c944) - 公开了
WindowSizeClass构造函数,以便添加自定义断点。(Ic1ff3) - 添加了用于根据宽度、高度和密度创建大小类的便捷函数。(If67f4)
bug 修复
- 修复了浮点值截断为 0 时出现的异常。(272ffac)
版本 1.3.0-alpha01
2023 年 11 月 15 日
发布了 androidx.window:window-*:1.3.0-alpha01。版本 1.3.0-alpha01 中包含这些提交内容。
新功能
- 公开了用于访问后屏幕的实验性窗口 API。
- 用于创建
FoldingFeature的测试 API 现已稳定。 - 用于设置虚假
ActivityEmbedding值的测试 API 现已稳定。 WindowLayoutInfoPublisherRule在从UiContext获取值时现在会报告替换项。WindowInfoTracker会将折叠功能数据报告给UiContext参数。- 公开了设备上的扩展程序版本。
- 添加了供用户按应用进行替换的
WindowProperties常量:PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE- 通知系统,相应应用已选择不使用面向用户的宽高比兼容性替换项。PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE- 通知系统,相应应用已选择不使用用户宽高比兼容性替换设置的全屏选项。
版本 1.2
版本 1.2.0
2023 年 11 月 15 日
发布了 androidx.window:window-*:1.2.0。版本 1.2.0 中包含这些提交内容。
自 1.1.0 以来的重要变更
- 公开了用于访问后置屏幕的实验性窗口 API。
- 用于创建
FoldingFeature的测试 API 现已稳定。 - 用于设置虚假
ActivityEmbedding值的测试 API 现已稳定。 WindowLayoutInfoPublisherRule在从UiContext获取值时现在会报告替换项。WindowInfoTracker会将折叠功能数据报告给UiContext参数。- 公开了设备上的扩展程序版本。
版本 1.2.0-rc01
2023 年 11 月 1 日
发布了 androidx.window:window-*:1.2.0-rc01。版本 1.2.0-rc01 中包含这些提交内容。
新功能
- 公开了用于访问后屏幕的实验性窗口 API。
- 用于创建
FoldingFeature的测试 API 现已稳定。 - 用于设置虚假
ActivityEmbedding值的测试 API 现已稳定。 WindowLayoutInfoPublisherRule在从UiContext获取值时现在会报告替换项。WindowInfoTracker会将折叠功能数据报告给UiContext参数。- 公开了设备上的扩展程序版本。
版本 1.2.0-beta04
2023 年 10 月 18 日
发布了 androidx.window:window-*:1.2.0-beta04。版本 1.2.0-beta04 中包含这些提交内容。
API 变更
- 移除了不稳定的 API。(Ibc534、b/302380585)
版本 1.2.0-beta03
2023 年 9 月 20 日
发布了 androidx.window:window-*:1.2.0-beta03。版本 1.2.0-beta03 中包含这些提交内容。
新功能
- 为需要特定版本的扩展程序才能正常运行的 API 添加了
RequiresApi检查。 - 添加了一个 API,用于公开设备上的扩展程序版本。
API 变更
- 在公共 API 上添加了必需的窗口 SDK 扩展程序版本注解。
- 移除了 activity 嵌入组件中的
isXXXSupported。(Ie3dae)
- 移除了 activity 嵌入组件中的
- 引入了
WindowSdkExtensions,用于报告设备上的扩展程序版本。- 引入了
RequiresWindowSdkExtension,用于为所需的最低扩展程序版本添加注解。(I05fd4)
- 引入了
- 使
WindowAreaInfo#getCapability不可为 null。(I17048)
版本 1.2.0-beta01
2023 年 7 月 26 日
发布了 androidx.window:window-*:1.2.0-beta01。版本 1.2.0-beta01 中包含这些提交内容。
新功能
- 公开了用于访问后屏幕的实验性窗口 API。
- 用于创建
FoldingFeature的测试 API 现已稳定。 - 用于设置虚假
ActivityEmbedding值的测试 API 现已稳定。 WindowLayoutInfoPublisherRule在从UiContext获取值时现在会报告替换项。WindowInfoTracker会将折叠功能数据报告给UiContext参数。
API 变更
- 将
WindowAreaAPI 标记为实验性 API,以允许 API 变更继续在稳定版本 1.3 中发挥作用。(I857f5) - 更新了 API 文件,以便为兼容性抑制添加注解。(I8e87a、b/287516207)
版本 1.2.0-alpha03
2023 年 6 月 21 日
发布了 androidx.window:window-*:1.2.0-alpha03。版本 1.2.0-alpha03 中包含这些提交内容。
新功能
- 从 API Surface 中移除了已废弃的 API。
- 添加了用以支持并发显示的 API。
- 添加了用以停用强制性大小调整替换项的属性。
- 添加了用以停用最小宽高比替换项的属性。
- 稳定了
ActivityEmbeddingRule,以支持围绕 activity 嵌入的单元测试。
API 变更
bug 修复
- 添加了用于停用强制性大小调整替换项的 compat 属性。(Ie7ab1)
- 从扩展程序接口移除了
SESSION_STATE_CONTENT_INVISIBLE。(I6ed19) - 稳定了
ActivityEmbeddingRule,以支持围绕 activity 嵌入的单元测试。(I8d6b6) - 添加了用于停用最小宽高比替换项的 compat 属性。(I66390)
- 移除了已废弃的 WindowArea API。(Ieb67c)
- 将屏幕方向请求循环属性重命名为了
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED。(Ie2fbd) - 更新了窗口区域会话常量名称。(I83675)
- 添加了用于停用的 compat 属性,该属性会在检测到屏幕方向请求循环时将其忽略。(I0a7a2)
- 添加了
WindowAreaComponent#STATUS_ACTIVE,用于表示相应功能已处于活动状态。(I62bc3) - 添加了
RearDisplayPresentationModeAPI。(I0401c) - 移除了背景颜色 API,以保持稳定。(I34c3e)
- 隐藏了窗口区域 API。(I39de0)
- 添加了用于替换
SplitController中的SplitInfo的方法。添加了用于为SplitInfo和ActivityStack创建替身的测试方法。(Icd69f) - 将
ActivityRule.Builder的标记设置成了可选标记。(Ib0b44) - 移除了
RatioSplitType、ExpandContainersSplit和HingeSplitType。它们现在都整合成了SplitType。- 将
#splitEqually()、#expandContainers()和#splitByHinge替换成了常量SplitType SPLIT_TYPE_EQUAL、SPLIT_TYPE_EXPAND和SPLIT_TYPE_HINGE。 - 移除了设置后备铰链分屏类型的功能。如果由于当前设备或窗口状态而无法应用铰链分屏类型,则回退为均分父级任务容器。使用
SplitController#setSplitAttributesCalculator可以自定义后备分屏类型。(Ifcc59)
- 将
- 废弃了
add/removeSplitCallback。- 将
add/removeSplitCallback移到了SplitControllerCallbackAdapter。 - 添加了
Flow支持,以获取SplitInfo列表。(I7f1b6)
- 将
- 为
ActivityEmbeddingController添加了测试规则。(I42e9b) - 将
ActivityOptionsCompat重命名为了ActivityEmbeddingOptions。(I89301) - 添加了
splitSupportStatus,以指明 activity 嵌入功能是否可用。(I10024) - 引入了
SplitAttributes.BackgroundColor,以更好地表示DEFAULT值。明确指出不支持非不透明动画背景颜色,因此任何非不透明颜色都将被视为默认颜色,这意味着系统将使用当前主题窗口背景颜色。(Ic6b95) - 将
alwaysAllow()和alwaysDisallow()替换为了ALWAYS_ALLOW和ALWAYS_DISALLOW。(I3057b) - 为
SplitRule、SplitAttributes和SplitAttributesCalculator添加了 API。(I92d23) - 添加了
TestActivityStack,以创建用于测试的ActivityStack。- 添加了
TestSplitInfo,以创建用于测试的SplitInfo。(I8e779)
- 添加了
- 添加了创建虚假
SplitAttributesCalculatorParams的方法,这样一来,开发者就可以验证其自定义的SplitAttributesCalculator。(Id4a6e) - 添加了
WindowMetricsCalculator#computeCurrentWindowMetrics(@UiContext context: Context)和WindowMetricsCalculator#computeMaximumWindowMetrics(@UiContext context: Context)。(I66c7f)
版本 1.2.0-alpha02
2023 年 6 月 7 日
发布了 androidx.window:window-*:1.2.0-alpha02。版本 1.2.0-alpha02 中包含这些提交内容。
新功能
- 更新测试 API,以为未指定的折叠功能提供常量。
- 如果使用
WindowLayoutInfoPublishRule进行替换,将替换掉windowLayoutInfo的所有值,包括基于上下文的 API。
API 变更
- 为未指定的中央折叠功能添加了常量。(I7530c)
bug 修复
- 更新了
WindowLayoutInfoPublishRule,以支持在基于Context的WindowLayoutInfo上进行替换操作。(I2037a)
版本 1.2.0-alpha01
2023 年 5 月 24 日
发布了 androidx.window:window-*:1.2.0-alpha01。版本 1.2.0-alpha01 中包含这些提交内容。
新功能
稳定了围绕 activity 嵌入和 WindowLayoutInfoTracker 的测试 API。ActivityEmbeddingRule 已提升到稳定版。WindowMetricsCalculatorRule 也已提升到稳定版。用于创建测试用 FoldingFeature 的实用函数也已提升到稳定版。
API 变更
- 稳定了
ActivityEmbeddingRule,以支持围绕 activity 嵌入的单元测试。(I8d6b6) WindowMetrisCalculatorTestRule现已稳定,从而允许 JVM 测试使用桩指标。我们建议使用模拟器,以确保结果的准确性。- 稳定了
WindowLayoutInfo的测试 API,以支持 JVM 测试。(Ie036e) - 添加了用于测试折叠功能值的
IntRange。(I69f7d)
版本 1.1
版本 1.1.0
2023 年 6 月 7 日
发布了 androidx.window:window-*:1.1.0。版本 1.1.0 中包含这些提交内容。
自 1.0.0 以来的重要变更
activity 嵌入
- 添加了
PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED,并将其作为应用清单中<application>标记的布尔属性。 - 废弃了
isSplitSupported并代之以splitSupportStatus,以详细说明分屏功能不可用的原因。 - 添加了
SplitController.SplitSupportStatus嵌套类,以为splitSupportStatus属性提供状态常量。 - 将
SplitController重构为了几个模块:ActivityEmbeddingController模块,适用于Activity或ActivityStack相关 API。- 将
isActivityEmbedded从SplitController移动到了ActivityEmbeddingController。 RuleController模块,用于完成EmbeddingRule相关操作:- 移除了
SplitControllerAPI: clearRegisteredRules()getSplitRules()initialize()registerRule()unregisterRule()- 添加了
RuleControllerAPI: addRule()- 添加规则或更新具有相同标记的规则。removeRule()- 从已注册规则集合中移除规则。setRules()- 建立规则集合。clearRules()- 移除所有已注册规则。parseRules()- 根据 XML 规则定义解析规则。
- 所有模块都需要通过
#getInstance()方法初始化上下文,包括:ActivityEmbeddingController#getInstance(Context)SplitController#getInstance(Context)RuleController#getInstance(Context)
- 添加了
EmbeddingAspectRatio类,以定义与显示宽高比相关的枚举类行为常量。 - 添加了
SplitAttributes类,以定义分屏布局。 - 在
SplitController中添加了SplitAttributes计算器函数,以自定义分屏布局:setSplitAttributesCalculator(Function)clearSplitAttributesCalculator()isSplitAttributesCalculatorSupported(),用于检查设备是否支持SplitAttributesCalculatorAPI
- 添加了
EmbeddingRule#tag字段。 SplitRule中的 API 更新:- 添加了
defaultSplitAttributes,用于定义分屏的默认分屏布局;替换了splitRatio和layoutDirection。 - 向
defaultSplitAttributes中添加了 XML 属性splitRatio和splitLayoutDirection的转换结果。 - 更改了最小尺寸的定义,以使用密度无关像素 (dp) 而不是像素。
- 添加了
minHeightDp,并将默认值设为 600dp。 - 将
minWidth变更为了minWidthDp,并将默认值设为 600dp。 - 将
minSmallestWidth变更为了minSmallestWidthDp,并将默认值设为 600dp。 - 添加了
maxAspectRatioInHorizontal,并将默认值设为ALWAYS_ALLOW。 - 添加了
maxAspectRatioInPortrait,并将默认值设为 1.4。 - 定义了
FinishBehavior嵌套类,用以替换完成行为常量。 - 将属性更改应用到了
SplitPairRule和SplitPlaceholderRule的 Builder 嵌套类。
- 添加了
- 将
SplitInfo#getSplitRatio()替换成了SplitInfo#getSplitAttributes(),以提供更多的分屏相关信息。
WindowLayout
- 向
WindowInfoTracker添加了实验性非 activity 界面上下文支持。 - 向
WindowMetricsCalculator添加了实验性非 activity 界面上下文。
迁移步骤
- 如需启用 activity 嵌入功能,以在分屏中显示 activity,应用必须将
PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED属性添加到清单<application>标记中:xml <property android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED" android:value="true" />。这样一来,系统就可以提前优化应用的分屏行为。 SplitInfo分屏比- 检查当前分屏是否堆叠:
kotlin SplitInfo.splitAttributes.splitType is SplitAttributes.SplitType.ExpandContainersSplitType - 检查当前分屏比:
kotlin if (SplitInfo.splitAttributes.splitType is SplitAttributes.SplitType.RatioSplitType) { val ratio = splitInfo.splitAttributes.splitType.ratio } else { // Ratio is meaningless for other types. }
- 检查当前分屏是否堆叠:
- SplitController 迁移:
SplitController.getInstance()更改为SplitController.getInstance(Context)。SplitController.initialize(Context, @ResId int)更改为RuleController.getInstance(Context).setRules(RuleController.parse(Context, @ResId int))。SplitController.getInstance().isActivityEmbedded(Activity)更改为ActivityEmbeddingController.getInstance(Context).isActivityEmbedded(Activity)。SplitController.getInstance().registerRule(rule)更改为RuleController.getInstance(Context).addRule(rule)。SplitController.getInstance().unregisterRule(rule)更改为RuleController.getInstance(Context).removeRule(rule)。SplitController.getInstance().clearRegisteredRules()更改为RuleController.getInstance(Context).clearRules()。SplitController.getInstance().getSplitRules()更改为RuleController.getInstance(Context).getRules()。
SplitRule属性迁移:minWidth和minSmallestWidth现在使用 dp 单位,而不是像素。应用可以使用以下调用:kotlin TypedValue.applyDimension( COMPLEX_UNIT_DIP, minWidthInPixels, resources.displayMetrics ),也可以直接将以像素为单位的minWith除以displayMetrics#density。
- 必须将完成行为常量迁移到
FinishBehavior类枚举类常量:FINISH_NEVER更改为FinishBehavior.NEVER。FINISH_ALWAYS更改为FinishBehavior.ALWAYS。FINISH_ADJACENT更改为FinishBehavior.ADJACENT。
- 必须将布局方向迁移到
SplitAttributes.LayoutDirection:ltr更改为SplitAttributes.LayoutDirection.LEFT_TO_RIGHT。rtl更改为SplitAttributes.LayoutDirection.RIGHT_TO_LEFT。locale更改为SplitAttributes.LayoutDirection.LOCALE。- 必须将
splitRatio迁移到SplitAttributes.SplitType.ratio(splitRatio)。
SplitPairRule.Builder迁移:SplitPairRule.Builder(filters, minWidth, minSmallestWidth)更改为kotlin SplitPairRule.Builder(filters) .setMinWidthDp(minWidthInDp) // Optional if minWidthInDp is 600. .setMinSmallestWidthDp(minSmallestWidthDp) // Optional if minSmallestWidthInDp is 600.setLayoutDirection(layoutDirection)和setSplitRatio(ratio)更改为kotlin setDefaultSplitAttributes( SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )。setFinishPrimaryWithSecondary和setFinishSecondaryWithPrimary可接受FinishBehavior类枚举常量。请参阅“SplitRule 迁移”了解详情。- 使用
setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ALWAYS_ALLOW),以在纵向设备上显示分屏。
SplitPlaceholder.Builder迁移:- 只保留
filters和placeholderIntent参数。其他属性均移至 setter。请参阅“SplitPairRule.Builder 迁移”了解详情。 setFinishPrimaryWithPlaceholder可接受FinishBehavior类枚举常量。请参阅“SplitRule 迁移”了解详情。setLayoutDirection(layoutDirection)和setSplitRatio(ratio)更改为kotlin setDefaultSplitAttributes( SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )。- 使用
setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ALWAYS_ALLOW),以在纵向设备上显示分屏。
- 只保留
版本 1.1.0-rc01
2023 年 5 月 10 日
发布了 androidx.window:window-*:1.1.0-rc01。版本 1.1.0-rc01 中包含这些提交内容。
新功能
- 将
ActivityEmbedding作为稳定版 API 发布。 - 修复了各种 bug。
版本 1.1.0-beta02
2023 年 4 月 5 日
发布了 androidx.window:window-*:1.1.0-beta02。版本 1.1.0-beta02 中包含这些提交内容。
新功能
- 进行了内部修复和清理。
版本 1.1.0-beta01
2023 年 3 月 22 日
发布了 androidx.window:window-*:1.1.0-beta01。版本 1.1.0-beta01 中包含这些提交内容。
activity 嵌入
- 添加了
PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED,并将其作为应用清单中<application>标记的布尔属性。 - 废弃了
isSplitSupported并代之以splitSupportStatus,以详细说明分屏功能不可用的原因。 - 添加了
SplitController.SplitSupportStatus嵌套类,以为splitSupportStatus属性提供状态常量。 - 将
SplitController重构为了几个模块:ActivityEmbeddingController模块,适用于Activity或ActivityStack相关 API。- 将
isActivityEmbedded从SplitController移动到了ActivityEmbeddingController。 RuleController模块,用于完成EmbeddingRule相关操作:- 移除了
SplitControllerAPI:clearRegisteredRules()getSplitRules()initialize()registerRule()unregisterRule()
- 添加了
RuleControllerAPI:addRule()- 添加规则或更新具有相同标记的规则。removeRule()- 从已注册规则集合中移除规则。setRules()- 建立规则集合。clearRules()- 移除所有已注册规则。- `parseRules() - 根据 XML 规则定义解析规则。
- 所有模块都需要通过
#getInstance()方法初始化上下文,包括:ActivityEmbeddingController#getInstance(Context)SplitController#getInstance(Context)RuleController#getInstance(Context)
- 添加了
EmbeddingAspectRatio类,以定义与显示宽高比相关的枚举类行为常量。 - 添加了
SplitAttributes类,以定义分屏布局。 - 在
SplitController中添加了SplitAttributes计算器函数,以自定义分屏布局:setSplitAttributesCalculator(Function)clearSplitAttributesCalculator()isSplitAttributesCalculatorSupported(),用于检查设备是否支持 SplitAttributesCalculator API
- 添加了
EmbeddingRule#tag字段。 SplitRule中的 API 更新:- 添加了
defaultSplitAttributes,用于定义分屏的默认分屏布局;替换了splitRatio和layoutDirection。 - 向
defaultSplitAttributes中添加了 XML 属性splitRatio和splitLayoutDirection的转换结果。 - 更改了最小尺寸的定义,以使用密度无关像素 (dp) 而不是像素。
- 添加了
minHeightDp,并将默认值设为 600dp。 - 将
minWidth变更为了minWidthDp,并将默认值设为 600dp。 - 将
minSmallestWidth变更为了minSmallestWidthDp,并将默认值设为 600dp。 - 添加了
maxAspectRatioInHorizontal,并将默认值设为ALWAYS_ALLOW。 - 添加了
maxAspectRatioInPortrait,并将默认值设为1.4。 - 定义了
FinishBehavior嵌套类,用以替换完成行为常量。 - 将属性更改应用到了
SplitPairRule和SplitPlaceholderRule的Builder嵌套类。
- 添加了
- 将
SplitInfo#getSplitRatio()替换成了SplitInfo#getSplitAttributes(),以提供更多的分屏相关信息。
WindowLayout
- 向
WindowInfoTracker添加了非 activity 界面上下文支持。 - 向
WindowMetricsCalculator添加了非 activity 界面上下文。
迁移步骤
- 如需启用 activity 嵌入功能,以在分屏中显示 activity,应用必须将
PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED属性添加到清单<application>标记中:xml <property android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED" android:value="true" />。这样一来,系统就可以提前优化应用的分屏行为。 SplitInfo分屏比- 检查当前分屏是否堆叠:
kotlin SplitInfo.splitAttributes.splitType is SplitAttributes.SplitType.ExpandContainersSplitType - 检查当前分屏比:
kotlin if (SplitInfo.splitAttributes.splitType is SplitAttributes.SplitType.RatioSplitType) { val ratio = splitInfo.splitAttributes.splitType.ratio } else { // Ratio is meaningless for other types. }
- 检查当前分屏是否堆叠:
SplitController迁移:SplitController.getInstance()更改为SplitController.getInstance(Context)。SplitController.initialize(Context, @ResId int)更改为RuleController.getInstance(Context).setRules(RuleController.parse(Context, @ResId int))。SplitController.getInstance().isActivityEmbedded(Activity)更改为ActivityEmbeddingController.getInstance(Context).isActivityEmbedded(Activity)。SplitController.getInstance().registerRule(rule)更改为RuleController.getInstance(Context).addRule(rule)。SplitController.getInstance().unregisterRule(rule)更改为RuleController.getInstance(Context).removeRule(rule)。SplitController.getInstance().clearRegisteredRules()更改为RuleController.getInstance(Context).clearRules()。SplitController.getInstance().getSplitRules()更改为RuleController.getInstance(Context).getRules()。
SplitRule属性迁移:minWidth和minSmallestWidth现在使用 dp 单位,而不是像素。应用可以使用以下调用:kotlin TypedValue.applyDimension( COMPLEX_UNIT_DIP, minWidthInPixels, resources.displayMetrics ),也可以直接将以像素为单位的minWith除以displayMetrics#density。
- 必须将完成行为常量迁移到
FinishBehavior类枚举类常量:FINISH_NEVER更改为FinishBehavior.NEVER。FINISH_ALWAYS更改为FinishBehavior.ALWAYS。FINISH_ADJACENT更改为FinishBehavior.ADJACENT。
- 必须将布局方向迁移到
SplitAttributes.LayoutDirection:ltr更改为SplitAttributes.LayoutDirection.LEFT_TO_RIGHT。rtl更改为SplitAttributes.LayoutDirection.RIGHT_TO_LEFT。locale更改为SplitAttributes.LayoutDirection.LOCALE。- 必须将
splitRatio迁移到SplitAttributes.SplitType.ratio(splitRatio)。
SplitPairRule.Builder迁移:SplitPairRule.Builder(filters, minWidth, minSmallestWidth)更改为kotlin SplitPairRule.Builder(filters) .setMinWidthDp(minWidthInDp) // Optional if minWidthInDp is 600. .setMinSmallestWidthDp(minSmallestWidthDp) // Optional if minSmallestWidthInDp is 600.setLayoutDirection(layoutDirection)和setSplitRatio(ratio)更改为kotlin setDefaultSplitAttributes( SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )。setFinishPrimaryWithSecondary和setFinishSecondaryWithPrimary可接受FinishBehavior类枚举常量。请参阅“SplitRule 迁移”了解详情。- 使用
setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ALWAYS_ALLOW),以在纵向设备上显示分屏。
SplitPlaceholder.Builder迁移:- 只保留
filters和placeholderIntent参数。其他属性均移至 setter。请参阅“SplitPairRule.Builder 迁移”了解详情。 setFinishPrimaryWithPlaceholder可接受FinishBehavior类枚举常量。请参阅“SplitRule 迁移”了解详情。setLayoutDirection(layoutDirection)和setSplitRatio(ratio)更改为kotlin setDefaultSplitAttributes( SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )。- 使用
setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ALWAYS_ALLOW),以在纵向设备上显示分屏。
- 只保留
版本 1.1.0-alpha06
2023 年 2 月 22 日
发布了 androidx.window:window-*:1.1.0-alpha06。版本 1.1.0-alpha06 中包含这些提交内容。
新功能
- 公开了从界面上下文获取
WindowLayoutInfo的实验性版本。
API 变更
- 添加了
splitSupportStatus,以指明 activity 嵌入功能是否可用。(I10024) - 将界面上下文
WindowLayoutInfoAPI 设为实验性。(I58ee0) - 引入了
WindowAreaController和 API,使RearDisplay模式可将当前窗口移至与后置摄像头对齐的屏幕。(Iffcbf) - 更新了默认背景颜色。(I1ac1b)
- 添加了
SplitAttributes参数。(I18bdd) - 为
SplitRule、SplitAttributes和SplitAttributesCalculator添加了 API。(I92d23) - 改进了与
maxAspectRatio相关的 API:- 将
alwaysAllow()和alwaysDisallow()替换为ALWAYS_ALLOW和ALWAYS_DISALLOW。 - 将 @see 的 API 文档更新为独立文档。(I3057b)
- 将
- 从公共 API 中移除了以下构造函数,因为它们不应由应用调用。
SplitInfo构造函数ActivityStack构造函数 (Ide534)
SplitRule现在接受maxAspectRatioInPortrait/Landscape。它仅允许在父级边界的宽高比小于或等于请求的maxAspectRatio时进行 activity 分屏。(Ia5990)- 将
RuleController#parseRules更改为静态 (I785df) - 改进了与 ActivityEmbedding 相关的 API
- 采用一致的 API 命名方式 - 针对多个实例使用添加/移除功能:
registerRule更改为addRuleunregisterRule更改为removeRule- 将
getSplitRules替换为getRules,因为ActivityRule不是分屏规则 - 添加了
RuleController#setRules以设置一系列规则 - 将与规则相关的 API 从
SplitController提取到单例RuleController。它们是: addRuleremoveRulegetRulessetRulesclearRulesparseRules- 将
#isActivityEmbedded从SplitController提取到单例ActivityEmbeddingController。它们是: isActivityEmbedded- 移除了
SplitController#initialize。如需通过 XML 文件设置规则,请使用RuleController#parseRules和#setRules。在此变更生效之前:SplitController.initialize(context, R.xml.static_rules)在此变更生效之后:val ruleController = RuleController.getInstance(context) val rules = ruleController.parseRules(R.xml.static_rules) ruleController.setRules(rules) - 我们不再区分静态规则和运行时规则。也就是说,调用
#clearRules会清除所有规则,无论它们使用静态 XML 规则定义注册,还是在运行时注册,都会被清除。若要让SplitController#clearRegisteredRules具有旧版行为,请使用 XML 资源 ID 调用RuleController#parseRules,然后调用RuleController#setRules以重新设置规则。在此变更生效之前:SplitController.getInstance(context).clearRegisteredRules()在此变更生效之后:val ruleController = RuleController.getInstance(context) val rules = ruleController.parseRules(R.xml.static_rules) ruleController.setRules(rules)(Ib3967)
- 改进了 SplitRule API:
- 对于
SplitRule,以 DP 而不是像素为单位获取最小尺寸。 - 重构了
SplitRule构建器,以将最小尺寸设置为可选。(I95f17)
- 对于
- 传递上下文以初始化
SplitController(I42549) - 将
SplitRule#layoutDir重命名为#layoutDirection,将SplitRule Builder#setLayoutDir重命名为Builder#setLayoutDirection。(I3f6d1)
版本 1.1.0-alpha04
2022 年 11 月 9 日
发布了 androidx.window:window-*:1.1.0-alpha04。版本 1.1.0-alpha04 中包含这些提交内容。
新功能
- 公开了一种方法,用于确定
ActivityEmbedding的ActivityStack是否为空。 - 从
ActivityEmbeddingAPI 中移除了实验性 API 标记。 - 隐藏了
ActivityRule构造函数,因为Builder是首选构造方式。 - 添加了一种实验性方法,用于在
WindowMetrics上获取WindowInsets。 - 更新了
SplitPlaceholderFinishBehavior以防止填充占位符。填充占位符会导致某种令人困惑的行为。
API 变更
- 将 val
isEmpty设为公开,以替换isEmpty函数。 - 将
ActivityStack参数 activity 重命名为activitiesInProcess。(Ia5055) - 移除了
ActivityFilter#matchesClassName和ActivityFilter#matchesClassNameOrWildCard,因为它们令人感到困惑。 - 添加了
ActivityFilter#componentName和ActivityFilter#intentAction,以允许调用方区分不同的过滤器 (I41f22) - 从实验性 API 中移除了
@DeprecatedAPI (I216b3) - 移除了 Activity Embeding API 的
@ExperimentalWindowApi(I69ebe) - 隐藏了
ActivityRule构造函数,改用构建器。(If4eb6) - 添加了 API,用于检查 activity 是否属于
ActivityFilter。(Ia43cf) - 更新了 API 文件以反映
WindowMetrics和WindowMetricsCalculatorCompat类中的更改 (I667fe) - 更新了
ActivityEmbedding属性 Javadoc 和类名称 (Ia1386) - 添加了要在 AndroidManifest.xml 中使用的
ActivityEmbedding属性标记名称 (Id1ad4) - 添加了新的 API
SplitPlaceholderFinishBehavior和SplitPlaceholderRule.finishPrimaryWithPlaceholder,这取代了现有的SplitPlaceholderRule.finishPrimaryWithSecondary,后者定义了占位符 activity 的完成时间以及 Activity Embedding 中关联 activity 的行为方式。(I64647)
bug 修复
- 引入了
WindowAreaController和 API,使RearDisplay模式可将当前窗口移至与后置摄像头对齐的屏幕。(I388ab)
版本 1.1.0-alpha03
2022 年 7 月 27 日
发布了 androidx.window:window-*:1.1.0-alpha03。版本 1.1.0-alpha03 中包含这些提交内容。
新功能
- 更新了嵌入规则的默认值。
API 变更
- 更新了嵌入规则属性的默认值。(Ic4d35)
版本 1.1.0-alpha02
2022 年 5 月 11 日
发布了 androidx.window:window-*:1.1.0-alpha02。版本 1.1.0-alpha02 中包含这些提交内容。
新功能
- 发布了适配器库以支持 Java 和 RxJava。
版本 1.1.0-alpha01
2022 年 5 月 11 日
发布了 androidx.window:window-*:1.1.0-alpha01。版本 1.1.0-alpha01 中包含这些提交内容。
新功能
- 发布了适配器以支持 java 和 RxJava
版本 1.1.0-alpha01
2022 年 4 月 20 日
发布了 androidx.window:window:1.1.0-alpha01。版本 1.1.0-alpha01 中包含这些提交内容。
新功能
- 修复了以下 bug:将应用置于后台后,系统不再触发折叠功能。
- 扩展了实验性 ActivityEmbedding API。
API 变更
- 添加了用于检查是否正在嵌入 activity 的公共 API。(I39eb7)
bug 修复
版本 1.0
版本 1.0.0
2022 年 1 月 26 日
发布了 androidx.window:window-*:1.0.0。版本 1.0.0 中包含这些提交内容。
1.0.0 的主要功能
- 通过
WindowInfoTracker和FoldingFeature支持折叠手机。添加了有助于计算当前 WindowMetrics 的WindowMetricsCalculator。
版本 1.0.0-rc01
2021 年 12 月 15 日
发布了 androidx.window:window-*:1.0.0-rc01。版本 1.0.0-rc01 中包含这些提交内容。
新功能
- 通过
WindowInfoTracker添加了对可折叠手机的支持。 - 添加了一些方法,以便计算当前和最大
WindowMetrics。 - 添加了一些辅助性测试 API。
版本 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 修复
- 修复了内存泄漏的问题。(I3fc79、b/202989046)
版本 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。(I88b72、b/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 的信息。(I57f66、Ida620)
版本 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-rxjava2和window-rxjava3工件,可提供适配 RxJava 的 API。
API 变更
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 变更
版本 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 修复
- 更新
ExtensionInterfaceAPI 以接受视觉上下文。(I8e827)
外部贡献
- 合并 DeviceState 和 WindowLayoutInfo,以便更轻松地访问数据。(Id34f4)
版本 1.0.0-alpha01
2020 年 2 月 27 日
发布了 androidx.window:window:1.0.0-alpha01 和 androidx.window:window-extensions:1.0.0-alpha01。版本 1.0.0-alpha01 中包含这些提交内容
这是 Window Manager 库的第一个版本。
新功能
DisplayFeature:这一新的 API 可识别一整块屏幕平面上的中断处,比如合页或折叠线DeviceState:这一新的 API 可根据定义的折叠状态(例如CLOSED、OPENED、HALF_OPENED等)列表,提供手机当前的折叠状态