窗口管理器
最新更新 | 稳定版 | 候选版 | 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
获取widthDp
和heightDp
。
API 更改
- 将
widthDp
和heightDp
添加到WindowMetrics
。(Ide026) - 移除实验性
WindowInsets
API。(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)
错误修复
- 在创建测试
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
添加重载。(I3dcb2,b/364677934,b/364677802,b/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
时使用下界检查。现有的WindowWidthSizeClass
和WindowHeightSizeClass
将被弃用,因为它们将不再进一步开发。(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以设置对话框的
EmbeddingConfiguration
和DimAreaBehavior
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或更高版本。有关更多详细信息,请参阅这篇文章。(Ia60e0,b/345472586)
- 允许扩展为
SplitAttributes
获取动画参数,以便设备可以将其用于动画转换。(Iede00) - 隐藏覆盖API(Ic4251)
- 引入API以配置拆分的固定或可拖动分隔符(Ia7a78)
- 向
WindowMetrics
添加密度(Id6723) - 添加API以获取
SupportedPostures
。(If557a) - 从实验性API中删除
setLaunchingActivityStack
(I191cf) - 引入
ActivityEmbeddingController#embeddedActivityWindowInfo
(I24312) - 弃用
#getToken
并添加#getActivityStackToken
(Ie0471) - 为
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.Token
和SpltInfo.Token
作为在WM Jetpack和扩展之间进行通信的标识符。- 弃用/替换API以使用/返回Token而不是IBinder。(I12b24)
- - 引入
ActivityEmbeddingController#invalidateVisibleActivityStacks
- 删除
SplitController#invalidateTopVisibleSplitAttributes
,因为该功能已合并到#invalidateVisibleActivityStacks
(I02ef5)
- 删除
- - 添加API以设置嵌入配置。(I59a4a)
- - 添加/取消固定顶部
ActivityStack
androidx.Window
API- 更新演示应用程序以允许固定/取消固定顶部
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 多平台支持。
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)
错误修复
- 修复了提供的上下文未正确解包导致的崩溃。(94d10ce , b/318787482)
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 更改
- 移除不稳定的API。(Ibc534, b/302380585)
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 更改
错误修复
- 添加强制调整大小覆盖的选择退出兼容性属性 (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
。添加测试方法以创建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
的所有值,包括基于Context的API。
API 更改
- 添加未指定中心折叠功能的常量。(I7530c)
错误修复
- 更新
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
以支持围绕活动嵌入的单元测试。(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
模块用于Activity
或ActivityStack
相关的API。- 将
isActivityEmbedded
从SplitController
移至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
— 定义分割的默认分割布局;替换splitRatio
和layoutDirection
。 - 添加了XML属性
splitRatio
和splitLayoutDirection
到defaultSplitAttributes
的转换。 - 更改最小维度定义,使用密度无关像素 (dp) 代替像素。
- 添加了
minHeightDp
,默认值为600dp。 - 将
minWidth
更改为minWidthDp
,默认值为600dp。 - 将
minSmallestWidth
更改为minSmallestWidthDp
,默认值为600dp。 - 添加了
maxAspectRatioInHorizontal
,默认值为ALWAYS_ALLOW
。 - 添加了
maxAspectRatioInPortrait
,默认值为1.4。 - 定义了
FinishBehavior
嵌套类以替换完成行为常量。 - 将属性更改应用于
SplitPairRule
和SplitPlaceholderRule
的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
属性迁移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) // minWidthInDp 为 600 时可选 .setMinSmallestWidthDp(minSmallestWidthDp) // minSmallestWidthInDp 为 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。 - 各种错误修复。
版本 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
模块用于Activity
或ActivityStack
相关的API。- 将
isActivityEmbedded
从SplitController
移至ActivityEmbeddingController
。 RuleController
模块用于EmbeddingRule
相关的操作- 已移除
SplitController
APIclearRegisteredRules()
getSplitRules()
initialize()
registerRule()
unregisterRule()
- 添加了
RuleController
APIaddRule()
— 添加规则或更新具有相同标签的规则。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
。 - 添加了XML属性
splitRatio
和splitLayoutDirection
到defaultSplitAttributes
的转换。 - 更改最小维度定义,使用密度无关像素 (dp) 代替像素。
- 添加了
minHeightDp
,默认值为600dp。 - 将
minWidth
更改为minWidthDp
,默认值为600dp。 - 将
minSmallestWidth
更改为minSmallestWidthDp
,默认值为600dp。 - 添加了
maxAspectRatioInHorizontal
,默认值为ALWAYS_ALLOW
。 - 添加了
maxAspectRatioInPortrait
,默认值为1.4
。 - 定义了
FinishBehavior
嵌套类以替换完成行为常量。 - 将属性更改应用于
SplitPairRule
和SplitPlaceholderRule
的Builder
嵌套类。
- 添加了
- 将
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
属性迁移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) // minWidthInDp 为 600 时可选 .setMinSmallestWidthDp(minSmallestWidthDp) // minSmallestWidthInDp 为 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 包含这些提交。
新功能
- 公开获取 UI 上下文中
WindowLayoutInfo
的实验版本。
API 更改
- 添加
splitSupportStatus
用于指示Activity嵌入是否可用。(I10024) - 将 UI 上下文
WindowLayoutInfo
API 设为实验性。(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
时,它才允许分割活动。(Ia5990)- 将
RuleController#parseRules
更改为静态方法 (I785df) - 改进围绕 ActivityEmbedding 的 API。
- 统一 API 命名 - 对多个实例使用 add/remove
registerRule
更改为addRule
unregisterRule
更改为removeRule
- 将
getSplitRules
替换为getRules
,因为ActivityRule
不是分割规则。 - 添加
RuleController#setRules
以设置一组规则。 - 将与规则相关的 API 从
SplitController
提取到单例RuleController
。它们是: addRule
removeRule
getRules
setRules
clearRules
parseRules
- 将
#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
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 包含这些提交。
新功能
- 公开了一种方法,用于确定
ActivityEmbedding
的ActivityStack
是否为空。 - 从
ActivityEmbedding
API 中删除了实验性 API 标签。 - 隐藏
ActivityRule
构造函数,因为Builder
是首选的构造方式。 - 添加了一种实验性方法,用于在
WindowMetrics
上获取WindowInsets
。 - 更新
SplitPlaceholderFinishBehavior
以防止结束占位符。结束占位符会导致一些令人困惑的行为。
API 更改
- 将 val
isEmpty
公开以替换 funisEmpty
。 - 将
ActivityStack
参数 activities 重命名为activitiesInProcess
。(Ia5055) - 删除
ActivityFilter#matchesClassName
和ActivityFilter#matchesClassNameOrWildCard
,因为它们令人困惑。 - 添加
ActivityFilter#componentName
和ActivityFilter#intentAction
以允许调用者区分不同的过滤器 (I41f22) - 从实验性 API 中删除
@Deprecated
API (I216b3) - 移除 Activity Embedding API 中的
@ExperimentalWindowApi
。(I69ebe) - 隐藏
ActivityRule
构造函数,改用 Builder。(If4eb6) - 添加 API 用于检查 Activity 是否是
ActivityFilter
的一部分。(Ia43cf) - 更新 API 文件以反映
WindowMetrics
和WindowMetricsCalculatorCompat
类中的更改。(I667fe) - 更新
ActivityEmbedding
属性 Javadoc 和类名。(Ia1386) - 添加
ActivityEmbedding
属性标签名,用于 AndroidManifest.xml。(Id1ad4) - 添加新的 API
SplitPlaceholderFinishBehavior
和SplitPlaceholderRule.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)
错误修复
1.0 版本
1.0.0 版本
2022年1月26日
androidx.window:window-*:1.0.0
已发布。1.0.0 版本包含这些提交。
1.0.0 版本的主要功能
- 通过
WindowInfoTracker
和FoldingFeature
支持折叠手机。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)
错误修复
- 修复内存泄漏。(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)
错误修复
- 依赖于
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)
错误修复
- 修复核心库被移除的 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 的信息。(I57f66,Ida620)
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-rxjava2
和window-rxjava3
工件,用于公开 RxJava 适配的 API。
API 更改
错误修复
- 添加新的数据类以表示功能边界。(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的错误。现在我们发出一个空的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-alpha01
和androidx.window:window-extensions:1.0.0-alpha01
已发布。1.0.0-alpha01版本包含这些提交。这是窗口管理器库的第一个版本。
新特性
DisplayFeature
:此新API识别连续平面屏幕表面中的中断,例如铰链或折叠DeviceState
:此新API提供手机的当前姿态,来自定义姿态列表(例如,CLOSED
、OPENED
、HALF_OPENED
等)