窗口管理器

Jetpack WindowManager 库使应用开发者能够支持新的设备外形规格和多窗口环境。该库为 API 版本 14 及更高版本提供通用的 API 接口。初始版本针对可折叠设备,但未来版本将扩展到更多显示类型和窗口功能。
最新更新 稳定版 候选版 Beta 版 Alpha 版
2024年10月16日 1.3.0 - - 1.4.0-alpha05

声明依赖项

要添加对 WindowManager 的依赖项,必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以了解更多信息。

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

Groovy

dependencies {
    implementation "androidx.window:window:1.3.0"

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

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

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

    // For testing
    implementation "androidx.window:window-testing:1.3.0"
}

Kotlin

dependencies {
    implementation("androidx.window:window:1.3.0")

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

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

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

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

反馈

您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中现有问题。您可以通过点击星号按钮为现有问题添加您的投票。

创建新问题

查看问题跟踪器文档以了解更多信息。

1.4 版

1.4.0-alpha05 版

2024年10月16日

androidx.window:window-*:1.4.0-alpha05 已发布。1.4.0-alpha05 版包含这些提交

新功能

  • 添加便利函数,用于从WindowMetrics获取widthDpheightDp

API 更改

  • widthDpheightDp添加到WindowMetrics。(Ide026
  • 移除实验性WindowInsets API。(I68a71
  • 将边界检查方法名称更新为isAtLeastIb0ab7

1.4.0-alpha04 版

2024年10月2日

发布了androidx.window:window-*:1.4.0-alpha04。1.4.0-alpha04版本包含这些提交

API 更改

  • 添加了一个从WindowMetrics计算WindowSizeClass的方法。(874dba
  • 为了更清晰,将WindowSizeClass方法更改为containsWidthDpcontainsHeightDpcontainsWindowSizeDp。(fa760d
  • WindowAreaController转换为抽象基类。(I90893

错误修复

  • 在创建测试FoldingFeature时添加对相对边界的支持。(2e6b3e
  • 选择WindowSizeClass时的常规错误修复。

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添加重载。(I3dcb2b/364677934b/364677802b/364680886

错误修复

  • 向默认的WindowSizeClass断点集添加缺失的断点。
  • 修复了一个在某些情况下无法正确选择紧凑尺寸的错误。

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
  • 更新WindowSizeClass API 以支持将来添加新的断点值。我们不使用绝对边界,而是使用下界,并建议开发者在处理WindowSizeClass时使用下界检查。现有的WindowWidthSizeClassWindowHeightSizeClass将被弃用,因为它们将不再进一步开发。(I014ce

1.4.0-alpha01版本

2024年8月7日

发布了androidx.window:window-*:1.4.0-alpha01。1.4.0-alpha01版本包含这些提交

新功能

  • 活动堆栈固定允许应用固定一个容器中的内容,并使其导航与其他容器隔离。
  • 交互式分隔符允许应用在拆分演示文稿中的两个活动之间显示固定或可拖动的分隔符。
  • 全屏对话框调暗允许应用指定对话框调暗区域,可以选择调暗整个任务窗口或仅调暗显示对话框的容器。
  • 嵌入式活动窗口信息回调允许应用持续接收嵌入式活动窗口的更新。
  • 嵌入式动画背景允许应用指定动画背景,从而提高使用ActivityEmbedding时的过渡动画质量。
  • 改进的活动堆栈管理允许应用在使用ActivityEmbedding时更好地控制ActivityStacks,包括
  • 将活动启动到指定的ActivityStack
  • 完成ActivityStack

API 更改

  • 一个新的API WindowInfoTracker#supportedPostures

    • 一个用于确定设备是否支持可折叠设备的桌面模式的API。添加了WindowAreaSessionPresenter#getWindow
  • 添加API以支持ActivityStack固定

    • SplitPinRule
    • SplitController#pinTopActivityStack
    • SplitController#unpinTopActivityStack
  • 添加API以启用和配置交互式分隔符

    • DividerAttributes
    • SplitAttributes.Builder#setDividerAttributes
  • 添加API以设置对话框的EmbeddingConfigurationDimAreaBehavior

    • EmbeddingConfiguration
    • DimAreaBehavior
    • ActivityEmbeddingController#setEmbeddingConfiguration
  • 添加API以接收嵌入式活动窗口信息更新

    • EmbeddedActivityWindowInfo
    • ActivityEmbeddingController#embeddedActivityWindowInfo
  • 添加API以设置嵌入式动画背景

    • EmbeddingAnimationBackground
    • SplitAttributes.Builder#setAnimationBackground
  • 添加API以完成ActivityStacks

    • ActivityEmbeddingController#finishActivityStacks
  • 添加API以设置启动ActivityStack

    • ActivityEmbeddingOptions#setLaunchingActivityStack
  • 以下API稳定,不再是实验性的

    • ActivityEmbeddingController#invalidateVisibleActivityStacks(从SplitController#invalidateTopVisibleSplitAttributes移动)
    • ActivityEmbeddingController#getActivityStack
    • SplitController#updateSplitAttributes
  • 添加1.4的API。(I56774

错误修复

  • 修复了某些设备上的错误,在会话处于活动状态时,会返回UNAVAILABLE而不是ACTIVE。
  • 由于API支持不稳定,因此删除了在vendorApiLevel为2的设备上对transferActivityToWindowArea的支持。
  • 引入API以启用活动嵌入可拖动分隔符的拖动到全屏功能。(I645c9
  • 允许应用通过SplitAttributes的动画参数禁用ActivityEmbedding动画。(Idc01a
  • 删除了对新平台API的手动访问概述,因为在使用具有AGP 7.3或更高版本(例如R8版本3.3)的R8以及在使用AGP 8.1或更高版本(例如D8版本8.1)的所有构建时,这会通过API建模自动发生。建议不使用AGP的客户端更新到D8版本8.1或更高版本。有关更多详细信息,请参阅这篇文章。(Ia60e0b/345472586
  • 允许扩展为SplitAttributes获取动画参数,以便设备可以将其用于动画转换。(Iede00
  • 隐藏覆盖API(Ic4251
  • 引入API以配置拆分的固定或可拖动分隔符(Ia7a78
  • WindowMetrics添加密度(Id6723
  • 添加API以获取SupportedPostures。(If557a
  • 从实验性API中删除setLaunchingActivityStackI191cf
  • 引入ActivityEmbeddingController#embeddedActivityWindowInfoI24312
  • 弃用#getToken并添加#getActivityStackTokenIe0471
  • embeddedActivityWindowInfo流API引入回调适配器(Ida77f
  • 为overlayInfo流API添加回调适配器(I7264f
  • 引入WindowSdkExtensionsRule以覆盖测试的extensionsVersion。(Ifb928
  • - 将#setLaunchingActivityStack迁移到Bundle以与ActivityOptionsCompat用法兼容。
    • 用户应传递activityOptions.toBundle而不是ActvityOptions本身。
    • 删除#setLaunchingActivityStack(Activity)。用户应迁移到使用ActivityEmbeddingController#getActivityStac(Activity)获取ActivityStack,并将ActivityStack传递给#setLaunchingActivityStack。(Ie0ccc
  • - 引入ActivityStack.TokenSpltInfo.Token作为在WM Jetpack和扩展之间进行通信的标识符。
    • 弃用/替换API以使用/返回Token而不是IBinder。(I12b24
  • - 引入ActivityEmbeddingController#invalidateVisibleActivityStacks
    • 删除SplitController#invalidateTopVisibleSplitAttributes,因为该功能已合并到#invalidateVisibleActivityStacksI02ef5
  • - 添加API以设置嵌入配置。(I59a4a
  • - 添加/取消固定顶部 ActivityStack androidx.Window API
    • 更新演示应用程序以允许固定/取消固定顶部 ActivityStack (I24dd3)
  • 重新添加 #finishActivityStacksActivityEmbeddingOptions (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 多平台支持。

1.3.0-rc01 版本

2024年5月14日

Jetpack 1.3 版 WindowManager 带来了 WindowSizeClass 功能的 Kotlin 多平台支持以及多个错误修复。

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)

错误修复

  • 修复了某些设备实现上 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)

错误修复

1.3.0-alpha02 版本

2024年2月7日

androidx.window:window-*:1.3.0-alpha02 已发布。 1.3.0-alpha02 版本包含这些提交。

新功能

  • 对窗口大小类 API 的 API 表面进行了更新,以提高想要使用自己大小类的开发人员的灵活性。

API 更改

  • 向宽度选择器添加高度约束。(I23393)
  • 添加用于从集合中选择 WindowSizeClass 的实用程序函数。添加实验性评分函数,以便开发人员可以编写自己的选择器。添加一个选择器扩展函数,以在给定边界内选择最宽的 WindowSizeClass。(I0c944)
  • 打开 WindowSizeClass 构造函数,以便可以添加自定义断点。(Ic1ff3)
  • 添加便利函数,用于根据宽度、高度和密度创建大小类。(If67f4)

错误修复

  • 修复浮点值截断为 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 更改

1.2.0-beta03 版本

2023年9月20日

androidx.window:window-*:1.2.0-beta03 已发布。 1.2.0-beta03 版本包含这些提交。

新功能

  • 添加 RequiresApi 检查,用于需要特定扩展版本才能正确运行的 API。
  • 添加一个 API 来公开设备上的扩展版本。

API 更改

  • 在公共 API 上注释所需的窗口 SDK 扩展版本。
    • 移除活动嵌入组件中的 isXXXSupported。(Ie3dae)
  • 引入 WindowSdkExtensions 来报告设备上的扩展版本。
    • 引入 RequiresWindowSdkExtension 来注释所需的最小扩展版本。(I05fd4)
  • 使 WindowAreaInfo#getCapability 不可为空。(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 更改

  • WindowArea API 标记为实验性,以便允许在 1.3 版本中继续进行 API 更改 (I857f5)
  • 更新 API 文件以注释兼容性抑制 (I8e87a, b/287516207)

1.2.0-alpha03 版本

2023年6月21日

androidx.window:window-*:1.2.0-alpha03 已发布。 1.2.0-alpha03 版本包含这些提交。

新功能

  • 从 API 表面移除已弃用的 API。
  • 添加 API 以支持并发显示。
  • 添加一个属性以选择退出强制调整大小覆盖。
  • 添加属性以选择退出最小纵横比覆盖。
  • 稳定 ActivityEmbeddingRule 以支持围绕活动嵌入的单元测试。

API 更改

  • 移除已弃用的 API (I18d39)
  • 添加对并发显示的支持。(Ifcbb0)

错误修复

  • 添加强制调整大小覆盖的选择退出兼容性属性 (Ie7ab1)
  • 从扩展接口中移除 SESSION_STATE_CONTENT_INVISIBLE。(I6ed19)
  • 稳定 ActivityEmbeddingRule 以支持围绕活动嵌入的单元测试。(I8d6b6)
  • 添加最小纵横比覆盖的选择退出兼容性属性。(I66390)
  • 移除已弃用的 WindowArea API (Ieb67c)
  • 将方向请求循环属性重命名为 PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED。(Ie2fbd)
  • 更新窗口区域会话常量名称 (I83675)
  • 添加选择退出兼容性属性,该属性在检测到方向请求循环时会忽略它 (I0a7a2)
  • 添加 WindowAreaComponent#STATUS_ACTIVE 以表示该功能已处于活动状态。(I62bc3)
  • 添加 RearDisplayPresentationMode API (I0401c)
  • 移除稳定版本的背景颜色 API。(I34c3e)
  • 隐藏窗口区域 API。(I39de0)
  • 添加方法以覆盖 SplitController 中的 SplitInfo。添加测试方法以创建 SplitInfoActivityStack 的双倍值。(Icd69f)
  • 使 ActivityRule.Builder 的标签可选。(Ib0b44)
  • 移除 RatioSplitTypeExpandContainersSplitHingeSplitType。它们现在是 SplitType
    • #splitEqually()#expandContainers()#splitByHinge 替换为常量 SplitType SPLIT_TYPE_EQUALSPLIT_TYPE_EXPANDSPLIT_TYPE_HINGE
    • 移除设置铰链分割类型回退类型功能。如果由于当前设备或窗口状态无法应用铰链分割类型,则会回退到平均分割父任务容器。使用 SplitController#setSplitAttributesCalculator 来自定义回退分割类型。(Ifcc59)
  • 弃用 add/removeSplitCallback
    • add/removeSplitCallback 移动到 SplitControllerCallbackAdapter
    • 添加 Flow 支持以获取 SplitInfo 列表 (I7f1b6)
  • ActivityEmbeddingController添加测试规则(I42e9b
  • ActivityOptionsCompat重命名为ActivityEmbeddingOptionsI89301
  • 添加splitSupportStatus用于指示Activity嵌入是否可用。(I10024
  • 引入SplitAttributes.BackgroundColor以更好地表示DEFAULT值。说明不支持不透明的动画背景颜色,任何不透明的颜色都将被视为默认值,这意味着使用当前主题窗口背景颜色。(Ic6b95
  • alwaysAllow()alwaysDisallow()替换为ALWAYS_ALLOWALWAYS_DISALLOW。(I3057b
  • SplitRuleSplitAttributesSplitAttributesCalculator添加API。(I92d23
  • 添加TestActivityStack用于创建用于测试的ActivityStack
    • 添加TestSplitInfo用于创建用于测试的SplitInfo。(I8e779
  • 添加创建伪造SplitAttributesCalculatorParams的方法,以便开发者可以验证其自定义的SplitAttributesCalculatorId4a6e
  • 添加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的所有值,包括基于Context的API。

API 更改

  • 添加未指定中心折叠功能的常量。(I7530c

错误修复

  • 更新WindowLayoutInfoPublishRule以支持基于ContextWindowLayoutInfo覆盖。(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 以支持围绕活动嵌入的单元测试。(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嵌入

  • 在应用程序清单的<application>标签中添加了PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED作为布尔属性。
  • 已弃用isSplitSupported并将其替换为splitSupportStatus,以提供有关拆分功能不可用的原因的更多详细信息。
  • 添加了SplitController.SplitSupportStatus嵌套类,为splitSupportStatus属性提供状态常量。
  • SplitController重构为多个模块
    • ActivityEmbeddingController模块用于ActivityActivityStack相关的API。
    • isActivityEmbeddedSplitController移至ActivityEmbeddingController
    • RuleController模块用于EmbeddingRule相关的操作
    • 已移除SplitController API
    • clearRegisteredRules()
    • getSplitRules()
    • initialize()
    • registerRule()
    • unregisterRule()
    • 添加了RuleController API
    • 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 — 定义分割的默认分割布局;替换splitRatiolayoutDirection
    • 添加了XML属性splitRatiosplitLayoutDirectiondefaultSplitAttributes的转换。
    • 更改最小维度定义,使用密度无关像素 (dp) 代替像素。
    • 添加了minHeightDp,默认值为600dp。
    • minWidth更改为minWidthDp,默认值为600dp。
    • minSmallestWidth更改为minSmallestWidthDp,默认值为600dp。
    • 添加了maxAspectRatioInHorizontal,默认值为ALWAYS_ALLOW
    • 添加了maxAspectRatioInPortrait,默认值为1.4。
    • 定义了FinishBehavior嵌套类以替换完成行为常量。
    • 将属性更改应用于SplitPairRuleSplitPlaceholderRule的Builder嵌套类。
  • SplitInfo#getSplitRatio()替换为SplitInfo#getSplitAttributes()以提供其他与分割相关的信息。

窗口布局

  • WindowInfoTracker添加了实验性的非活动UI上下文支持。
  • WindowMetricsCalculator添加了实验性的非活动UI上下文。

迁移步骤

  • 要启用活动嵌入以在分割中显示活动,应用程序必须将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属性迁移
    • minWidthminSmallestWidth 现在使用 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) // minWidthInDp 为 600 时可选 .setMinSmallestWidthDp(minSmallestWidthDp) // minSmallestWidthInDp 为 600 时可选
    • setLayoutDirection(layoutDirection)setSplitRatio(ratio) 更改为 kotlin setDefaultSplitAttributes( SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )
    • setFinishPrimaryWithSecondarysetFinishSecondaryWithPrimary 使用 FinishBehavior 枚举型常量。“SplitRule 迁移”部分有详细说明。
    • 使用 setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ALWAYS_ALLOW) 在纵向设备上显示分割。
  • SplitPlaceholder.Builder 迁移
    • 只有 filtersplaceholderIntent 参数。其他属性移动到 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。
  • 各种错误修复。

版本 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嵌入

  • 在应用程序清单的<application>标签中添加了PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED作为布尔属性。
  • 已弃用isSplitSupported并将其替换为splitSupportStatus,以提供有关拆分功能不可用的原因的更多详细信息。
  • 添加了SplitController.SplitSupportStatus嵌套类,为splitSupportStatus属性提供状态常量。
  • SplitController重构为多个模块
    • ActivityEmbeddingController模块用于ActivityActivityStack相关的API。
    • isActivityEmbeddedSplitController移至ActivityEmbeddingController
    • RuleController模块用于EmbeddingRule相关的操作
    • 已移除SplitController API
      • clearRegisteredRules()
      • getSplitRules()
      • initialize()
      • registerRule()
      • unregisterRule()
    • 添加了RuleController API
      • 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 — 定义分割的默认分割布局;替换splitRatiolayoutDirection
    • 添加了XML属性splitRatiosplitLayoutDirectiondefaultSplitAttributes的转换。
    • 更改最小维度定义,使用密度无关像素 (dp) 代替像素。
    • 添加了minHeightDp,默认值为600dp。
    • minWidth更改为minWidthDp,默认值为600dp。
    • minSmallestWidth更改为minSmallestWidthDp,默认值为600dp。
    • 添加了maxAspectRatioInHorizontal,默认值为ALWAYS_ALLOW
    • 添加了 maxAspectRatioInPortrait,默认值为 1.4
    • 定义了FinishBehavior嵌套类以替换完成行为常量。
    • 将属性更改应用于 SplitPairRuleSplitPlaceholderRuleBuilder嵌套类。
  • SplitInfo#getSplitRatio()替换为SplitInfo#getSplitAttributes()以提供其他与分割相关的信息。

窗口布局

  • WindowInfoTracker 添加了非 Activity UI 上下文支持。
  • WindowMetricsCalculator 添加了非 Activity UI 上下文。

迁移步骤

  • 要启用活动嵌入以在分割中显示活动,应用程序必须将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属性迁移
    • minWidthminSmallestWidth 现在使用 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) // minWidthInDp 为 600 时可选 .setMinSmallestWidthDp(minSmallestWidthDp) // minSmallestWidthInDp 为 600 时可选
    • setLayoutDirection(layoutDirection)setSplitRatio(ratio) 更改为 kotlin setDefaultSplitAttributes( SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )
    • setFinishPrimaryWithSecondarysetFinishSecondaryWithPrimary 使用 FinishBehavior 枚举型常量。“SplitRule 迁移”部分有详细说明。
    • 使用 setMaxAspectRatioInPortrait(EmbeddingAspectRatio.ALWAYS_ALLOW) 在纵向设备上显示分割。
  • SplitPlaceholder.Builder 迁移
    • 只有 filtersplaceholderIntent 参数。其他属性移动到 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 包含这些提交。

新功能

  • 公开获取 UI 上下文中 WindowLayoutInfo 的实验版本。

API 更改

  • 添加splitSupportStatus用于指示Activity嵌入是否可用。(I10024
  • 将 UI 上下文 WindowLayoutInfo API 设为实验性。(I58ee0)
  • 引入了 WindowAreaController 和 API,以启用 RearDisplay 模式,将当前窗口移动到与后置摄像头对齐的显示屏。(Iffcbf)
  • 更新默认背景颜色。(I1ac1b)
  • 添加 SplitAttributes 参数。(I18bdd)
  • SplitRuleSplitAttributesSplitAttributesCalculator添加API。(I92d23
  • 改进围绕 maxAspectRatio 的 API。
    1. alwaysAllow()alwaysDisallow() 替换为 ALWAYS_ALLOWALWAYS_DISALLOW
    2. 更新带有独立文档的 @see 的 API 文档。(I3057b)
  • 以下构造函数已从公共 API 中删除,因为应用不应调用它们。
    • SplitInfo 构造函数
    • ActivityStack 构造函数 (Ide534)
  • SplitRule 现在采用 maxAspectRatioInPortrait/Landscape。只有当父边界的高宽比小于或等于请求的 maxAspectRatio 时,它才允许分割活动。(Ia5990)
  • RuleController#parseRules 更改为静态方法 (I785df)
  • 改进围绕 ActivityEmbedding 的 API。
    1. 统一 API 命名 - 对多个实例使用 add/remove
    2. registerRule 更改为 addRule
    3. unregisterRule 更改为 removeRule
    4. getSplitRules 替换为 getRules,因为 ActivityRule 不是分割规则。
    5. 添加 RuleController#setRules 以设置一组规则。
    6. 将与规则相关的 API 从 SplitController 提取到单例 RuleController。它们是:
    7. addRule
    8. removeRule
    9. getRules
    10. setRules
    11. clearRules
    12. parseRules
    13. #isActivityEmbeddedSplitController 提取到单例 ActivityEmbeddingController。它们是:
    14. isActivityEmbedded
    15. 删除 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)
    16. 我们不再区分静态规则和运行时规则。也就是说,调用 #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。
    1. SplitRule 使用 DP 而不是像素作为最小尺寸。
    2. 重构 SplitRule Builder,使其将最小尺寸作为可选参数。(I95f17)
  • 传递 Context 以初始化 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 包含这些提交。

新功能

  • 公开了一种方法,用于确定 ActivityEmbeddingActivityStack 是否为空。
  • ActivityEmbedding API 中删除了实验性 API 标签。
  • 隐藏 ActivityRule 构造函数,因为 Builder 是首选的构造方式。
  • 添加了一种实验性方法,用于在 WindowMetrics 上获取 WindowInsets
  • 更新 SplitPlaceholderFinishBehavior 以防止结束占位符。结束占位符会导致一些令人困惑的行为。

API 更改

  • 将 val isEmpty 公开以替换 fun isEmpty
  • ActivityStack 参数 activities 重命名为 activitiesInProcess。(Ia5055)
  • 删除 ActivityFilter#matchesClassNameActivityFilter#matchesClassNameOrWildCard,因为它们令人困惑。
  • 添加 ActivityFilter#componentNameActivityFilter#intentAction 以允许调用者区分不同的过滤器 (I41f22)
  • 从实验性 API 中删除 @Deprecated API (I216b3)
  • 移除 Activity Embedding API 中的 @ExperimentalWindowApi。(I69ebe
  • 隐藏 ActivityRule 构造函数,改用 Builder。(If4eb6
  • 添加 API 用于检查 Activity 是否是 ActivityFilter 的一部分。(Ia43cf
  • 更新 API 文件以反映 WindowMetricsWindowMetricsCalculatorCompat 类中的更改。(I667fe
  • 更新 ActivityEmbedding 属性 Javadoc 和类名。(Ia1386
  • 添加 ActivityEmbedding 属性标签名,用于 AndroidManifest.xml。(Id1ad4
  • 添加新的 API SplitPlaceholderFinishBehaviorSplitPlaceholderRule.finishPrimaryWithPlaceholder,它替换了现有的 SplitPlaceholderRule.finishPrimaryWithSecondary,定义了占位符 Activity 何时结束以及 Activity Embedding 中相关 Activity 的行为方式。(I64647

错误修复

  • 引入 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 版本包含这些提交。

新功能

  • 修复了一个错误,该错误会导致应用程序后台运行时停止发出折叠功能。
  • 扩展实验性 ActivityEmbedding API。

API 更改

  • 一个公共 API,用于检查 Activity 是否正在嵌入。(I39eb7

错误修复

  • 添加 API 以自定义 Activity 分割中容器的结束行为。(I1a1e4
  • 添加了 Activity 分割规则的新配置选项。(Iec6af

1.0 版本

1.0.0 版本

2022年1月26日

androidx.window:window-*:1.0.0 已发布。1.0.0 版本包含这些提交。

1.0.0 版本的主要功能

  • 通过 WindowInfoTrackerFoldingFeature 支持折叠手机。WindowMetricsCalculator 用于帮助计算当前的 WindowMetrics。

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 Embedding API。此初始布局版本允许并排显示两个 Activity。

API 更改

  • 移除 currentWindowMetrics API,因为我们无法准确地提供它。请改用 WindowMetricsCalculator。(Icda5f
  • 更新了扩展 API。(Ica92b
  • 添加了一个接口,用于一个允许嵌入 Activity 并将其并排显示在父任务窗口中的新功能。(I5711d
  • 隐藏了 WindowMetrics 和 WindowLayoutInfo 的构造函数,请改用测试 API。(I5a1b5
  • 添加一个 API 来创建伪造的 WindowLayoutInfo 对象。(I4a2fd

错误修复

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

错误修复

  • 依赖于 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

错误修复

  • 修复核心库被移除的 Proguard 错误。
  • 修复 WindowLayoutInfo 未传递给其他订阅者的错误。
  • 修复配置更改不会触发折叠功能更新的错误。

1.0.0-alpha09 版本

2021年6月30日

androidx.window:window-*:1.0.0-alpha09 已发布。1.0.0-alpha09 版本包含这些提交。

新功能

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

API 更改

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

错误修复

  • 在添加多个数据流使用者时发出初始值。

1.0.0-alpha08 版本

2021年6月16日

androidx.window:window-*:1.0.0-alpha08 已发布。1.0.0-alpha08 版本包含这些提交。

新功能

  • 发布了一个测试工件,以便在使用 WindowInfoRepository 时更容易进行测试。使用 WindowInfoRepository 获取有关 DisplayFeatures 和 WindowMetrics 的信息。(I57f66Ida620

1.0.0-alpha07 版本

2021年6月2日

androidx.window:window-*:1.0.0-alpha07 已发布。1.0.0-alpha07 版本包含这些提交。

新功能

  • 将核心窗口库迁移到 Kotlin。将使用协程和挂起函数来公开未来的异步数据。
  • 添加 WindowInfoRepo 作为获取 WindowMetrics 和 WindowLayoutInfo 流的主要交互点。
  • 新的 window-java 工件,用于公开友好的 Java API 来注册和注销回调。
  • 新的 window-rxjava2window-rxjava3 工件,用于公开 RxJava 适配的 API。

API 更改

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

错误修复

  • 添加新的数据类以表示功能边界。(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 更改

  • 添加用于处理FoldingFeatures的便捷方法(Ie733f
  • 从WindowManager中移除同步读取方法(I96fd4

1.0.0-alpha04版本

2021年3月10日

androidx.window:window:1.0.0-alpha04已发布。1.0.0-alpha04版本包含这些提交。

新功能

  • 修复了如果没有OEM实现则不发出WindowLayoutInfo的错误。现在我们发出一个空的WIndowLayoutInfo。
  • 修复了如果在应用处于后台时铰链状态发生变化,状态无法正确更新的错误。现在状态应该保持一致。
  • 更新我们的proguard文件以忽略运行时依赖项的警告。

错误修复

  • 当OEM库缺失时发出空值。(Ide935

1.0.0-alpha03版本

2021年2月18日

androidx.window:window:1.0.0-alpha03已发布。1.0.0-alpha03版本包含这些提交。

新功能

  • 当OEM实现为空时,发出WindowLayoutInfo的空值。这应该使在更多设备上使用该库更容易。由于API是异步的,因此仍然建议应用编写一些防御性代码,并在超时后发出默认值。我们对OEM实现没有任何保证,初始值可能会延迟。

错误修复

  • 当OEM库缺失时发出空值。(Ide935

1.0.0-alpha02版本

2021年1月27日

androidx.window:window:1.0.0-alpha02已发布。1.0.0-alpha02版本包含这些提交。

新功能

  • 我们弃用了一些API,以帮助简化API并减少错误。一些值得注意的例子是从WindowManager中移除同步读取操作和弃用DeviceState。同步读取操作会导致竞争条件并出现不正确的UI。

  • 我们将DisplayFeature转换为一个接口,其他特性将在未来实现。我们的第一个特性是FoldingFeature,它现在是屏幕折叠或铰链的表示。这也包含了代替DeviceState的铰链状态。

  • WindowMetrics在Android 11中引入,为开发者提供了一种简单的方法来查询窗口的指标,例如它在屏幕上的位置和大小以及任何系统内边距。我们在本版本中向后移植了API,以便开发者可以利用WindowMetrics并继续支持旧版本的Android。WindowMetrics可以通过WindowManager#getCurrentWindowMetrics()和WindowManager#getMaximumWindowMetrics() API获得。

API 更改

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

错误修复

  • 更新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版本包含这些提交。这是窗口管理器库的第一个版本。

新特性

  • DisplayFeature:此新API识别连续平面屏幕表面中的中断,例如铰链或折叠
  • DeviceState:此新API提供手机的当前姿态,来自定义姿态列表(例如,CLOSEDOPENEDHALF_OPENED等)