Compose UI
androidx.compose.ui
androidx.compose.ui.geometry
androidx.compose.ui.graphics
androidx.compose.ui.platform
androidx.compose.ui.test
(如需获取所有 Compose 软件包,请参阅相应 API 参考文档)
| 最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 | 
|---|---|---|---|---|
| 2025 年 10 月 22 日 | 1.9.4 | - | 1.10.0-beta01 | - | 
结构
Compose 由 androidx 中的 7 个 Maven 组 ID 构成。每个组都包含一套特定用途的功能,并各有专属的版本说明。
下表介绍了各个组的内容,点击链接即可查看其版本说明。
| 组 | 说明 | 
|---|---|
| compose.animation | 在 Jetpack Compose 应用中构建动画,丰富用户体验。 | 
| compose.compiler | 借助 Kotlin 编译器插件,转换 @Composable functions(可组合函数)并启用优化功能。 | 
| compose.foundation | 使用现成可用的构建块编写 Jetpack Compose 应用,还可扩展 Foundation 以构建您自己的设计系统元素。 | 
| compose.material | 使用现成可用的 Material Design 组件构建 Jetpack Compose UI。这是更高层级的 Compose 入口点,旨在提供与 www.material.io 上描述的组件一致的组件。 | 
| compose.material3 | 使用 Material Design 3(新一代 Material Design)组件构建 Jetpack Compose UI。Material 3 中包括了更新后的主题和组件,以及动态配色等 Material You 个性化功能,旨在与新的 Android 12 视觉风格和系统界面相得益彰。 | 
| compose.runtime | Compose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。 | 
| compose.ui | 与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。 | 
声明依赖项
如需添加 Compose 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库。
在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
Groovy
dependencies { implementation "androidx.compose.ui:ui:1.9.4" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.ui:ui:1.9.4") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.10
版本 1.10.0-beta01
2025 年 10 月 22 日
发布了 androidx.compose.ui:ui-*:1.10.0-beta01。版本 1.10.0-beta01 中包含这些提交内容。
API 变更
- 添加了焦点更改调度优化。可以使用 isOptimizedFocusEventDispatchEnabled = false停用此功能(I919fb、b/449228515)
- 更新了所有间接触控 API,以使用名称间接指针 API 来匹配指针输入 API。(I238ce、b/451607214)
- TextDirection、- TextAlign、- Hyphens、- FontSynthesis、- valueOf函数现在会在收到未知值时抛出- IllegalArgumentException。(I07c67)
- 更新了 CompositionDataTree.makeTree以传递默认值,而不是封装函数。(Id64a6、b/445229688)
- 接受 effectContext参数的测试规则 APIcreateComposeRule、createAndroidComposeRule和createEmptyComposeRule处于稳定状态,且该参数的默认值为EmptyCoroutineContext。(If400c、b/450540702)
- UnplacedStateAwareModifierNode已重命名为- UnplacedAwareModifierNode(I6a551、b/449719932)
- 撤消内容捕获优化(Ic000b、b/442364065)
- 添加了 ComposeUiFlags.isRectManagerOffsetUsageFromLayoutCoordinatesEnabled功能标志。它实现了性能优化,其中LayoutCoordinates.positionInRoot()等坐标请求使用RectManager中已有的缓存偏移量,而不是在每次调用时遍历整个树。(Ieaadc)
bug 修复
- PlaceholderSpan现在可以正确使用非线性字体缩放来调整大小(Id2ead、b/324462728)
- 使用 ViewCompat执行平台级触感反馈常量,并依靠其对较新常量的回退支持。(Ib5a00)
版本 1.10.0-alpha05
2025 年 10 月 8 日
发布了 androidx.compose.ui:ui-*:1.10.0-alpha05。版本 1.10.0-alpha05 中包含这些提交内容。
bug 修复
- 修复了嵌套 Popup 错误地定位在屏幕顶部的问题;现在,它们可以正确锚定到其父 Popup。(Id4603、b/191279752)
- 修复了层次结构中与其他视图相关的焦点环绕问题。(I95223、b/446028624)
- 修复了 Kotlin 2.2.20 生成的 lambda 中检查器缺少内联形参的字段的问题(I9855d、b/447110005)
- 修复了界面模块和基础模块之间自动填充资源的名称遮盖问题 (I5da5a)
外部贡献
- UiModes对象已重命名为 AndroidUiModes,以反映其常量是从 Android API 中提取的。(Ia0a77)
版本 1.10.0-alpha04
2025 年 9 月 24 日
发布了 androidx.compose.ui:ui-*:1.10.0-alpha04。版本 1.10.0-alpha04 中包含这些提交内容。
API 变更
- 接受 CoroutineContext参数的 Compose 测试规则变体已提升为稳定版。实验性注解已移除,开发者不再需要选择启用此 API。(I74e6e)
- 移除了 ComposeUiFlags.isRectTrackingEnabled。此逻辑并不总是处于启用状态。(Id78df)
- 废弃了 Updater#set的内联过载,因为它们对提供的值进行了过多次装箱 (Id679e)
- 将 onAutofillText语义属性标记为已弃用。(I6f81c)
- 引入了 UnplacedStateAwareModifierNode。它提供了一个回调,当之前放置的布局不再放置时调用该回调。(I8fdd8、b/309776096)
- 更正了 RetainObserver.onRetained的文档,并添加了RetainObserver.onUnused(与RememberObserver.onAbandoned类似)。(Ia6fc5)
- 添加了 onVisibilityChangedNode(),它会生成Modifier.Node,由Modifier.onVisibilityChanged()通过委托使用,从而允许您在自定义Modifier.Node中扩展此功能。(I70d84、b/443001320)
bug 修复
- 修复了以下问题:当内嵌内容位于多行省略号文本的最后一行时,即使占位符位于省略号区域之前,内嵌内容也无法呈现。(I76aaf、b/441829208)
版本 1.10.0-alpha03
2025 年 9 月 10 日
发布了 androidx.compose.ui:ui-*:1.10.0-alpha03。版本 1.10.0-alpha03 中包含这些提交内容。
API 变更
- 将 DelegatableNode.invalidateLayoutForSubtree重命名为DelegatableNode.invalidateMeasurementForSubtree。(I94257、b/430106107)
- 移除了冗余的 isInHiddenAccessibilitySubtree匹配器。(I4476c、b/443792965)
- 引入了基于组密钥的 Compose 堆栈轨迹,默认情况下,所有精简版应用均会启用该功能。从 Kotlin 2.3.0 开始,Compose 编译器 Gradle 插件将生成这些轨迹的 ProGuard 映射。(Ifbcb5)
- Modifier.skipToLookaheadSize现在使用默认启用的 lambda,该 lambda 仅在共享过渡处于活动状态时启用大小跳过,与- Modifier.skipToLookaheadPosition相同。(Ibe0f5、b/432485585)
- 移除了 ComposeUiFlags.isOutOfFrameDeactivationEnabled,此功能现在始终处于启用状态。(I421ed)
- 将用于创建 FillableData实例的工厂函数移至伴生对象。请使用新的工厂方法FillableData.createFrom(value),而不是调用FillableData(value)。(I2e200、b/441719650)
- 引入了 BeyondBoundsLayoutModifierNode一个新的修饰符节点,用于执行焦点搜索的超出边界布局。(I39be1、b/416133658)
- 当 FocusTargetModifierNode.requestFocus()本身不可聚焦时,它会将焦点发送给其某个子级。现在,此行为与FocusRequester.requestFocus()和FocusRequesterModifierNode.requestFocus()保持一致。如果您不需要此行为,请在应用中将ComposeUiFlags.isRequestFocusOnNonFocusableFocusTargetEnabled标志设置为 false。(Icca5c、b/436863604)
- 在 WindowInfo中提供基于 DP 的窗口大小(I9322b、b/424442112)
- 移除了标志 isNestedScrollDispatcherNodeFixEnabled。(If451a)
- 在 FillableDataAPI 中添加对自动填充日期值的支持。添加了val dateMillisValue: Long以检索日期信息,并添加了相应的FillableData(dateMillisValue: Long)构造函数以创建基于日期的FillableData实例。(Id072a)
外部贡献
- 引入了 UiModes对象来声明用于UiMode注释的常量 (I03cb8)
版本 1.10.0-alpha02
2025 年 8 月 27 日
发布了 androidx.compose.ui:ui-*:1.10.0-alpha02。版本 1.10.0-alpha02 中包含这些提交内容。
API 变更
- 更新 FillableData以支持非文本组件(例如切换开关和列表),包括FillableData内的布尔值和整数值,以及用于创建FillableData的布尔值和列表实例的工厂构造函数,这些实例会转换为平台的AutofillValue。系统还会添加相关的语义属性和操作。(Ia8105、Icc5cf)
- 在非触控模式下,视图系统会将初始/默认焦点分配给屏幕上可聚焦的某个项目。此功能已添加到 Compose 中,可通过启用 ComposeUiFlags.isInitialFocusOnFocusableAvailable来启用。(Ib9178)
- 移除了标志 isPointerInteropFilterDispatchingFixEnabled。(Iaa589)
- 移除了标志 isNestedScrollInteropPostFlingFixEnabled。(I2a756)
- 添加了 isHiddenFromAccessibility()和isInHiddenAccessibilitySubtree()语义匹配器。(I9f5a1)
- 向 MainTestClock添加了runCurrent(),以在底层调度器上运行所有到期任务。这是为了支持在StandardTestDispatcher上运行测试,其中任务会添加到调度程序,而不是在延迟时间为 0 毫秒时立即执行。通过创建ComposeTestRule并向其传递StandardTestDispatcher,可以设置测试以使用StandardTestDispatcher。默认情况下,测试在UnconfinedTestDispatcher上运行,在这种情况下,永远不必调用runCurrent()。
- 添加了对在 StandardTestDispatcher上运行测试的支持。从历史上看,测试框架是(现在仍然是)使用UnconfinedTestDispatcher设置的,这与生产环境略有不同。您现在可以创建自己的StandardTestDispatcher并将其添加到 创建ComposeTestRule时(或调用 runComposeUiTest 时)的effectContext,从而更改此设置。(I334d0、b/254115946)
- 更新了从 SlotTree创建节点树的代码。(I997d3)
bug 修复
- Compose 界面现在会在 Android 上安装生命周期感知型 RetainScopes。默认行为现在会在配置更改期间保留retain值。(Id4a09、b/177562901)
外部贡献
- 添加了 VelocityTracker根据跟踪的指针事件使用平台特定行为计算指针速度的功能。(I621e8)
版本 1.10.0-alpha01
2025 年 8 月 13 日
发布了 androidx.compose.ui:ui-*:1.10.0-alpha01。版本 1.10.0-alpha01 中包含这些提交内容。
API 变更
- 如果鼠标或触控板在 ComposeView中的指针按下操作未发生在获得焦点的节点的边界内,则现在会自动清除焦点。这会带来“点按即可清除焦点”的用户体验,与使用指针输入设备时的当前行为相比,这种体验更符合预期。您可以使用新的AbstractComposeView.isClearFocusOnPointerDownEnabledAPI 选择停用此行为。(I6322b、b/282963174)
- 引入 FillableData接口以支持各种自动填充组件类型,除了文本之外。(If9bd2)
- 新 API,用于动态启用和停用共享元素,同时允许考虑是否已在进行共享元素过渡。新 API,用于在过渡期间处置目标共享元素时设置替代目标边界。用于获取 LookaheadScope的LayoutCoordinates的新 API。(I18dd4、b/409819304、b/395670637)
- 引入标志 isNestedScrollInteropIntegerPropagationEnabled来控制向嵌套滚动互操作分派正确整数的实验。(If8316)
- 向 DelegatableNode添加了requestFocusForChildInRootBounds(),以将焦点移至与给定矩形重叠的子项。(I001ef)
- 移除了标志 isOnScrollChangedCallbackEnabled、isAdjustPointerInputChangeOffsetForVelocityTrackerEnabled、isFlingContinuationAtBoundsEnabled、isAutomaticNestedPrefetchEnabled、DragGesturePickUpEnabled、isPointerInteropFilterDispatchingFixEnabled、isNestedScrollInteropPostFlingFixEnabled、isNestedScrollDispatcherNodeFixEnabled(I36c18)
- 在 SemanticsNodefinder 和选择器函数上添加了@CheckResult注释,以强制使用返回值。(I6f86e、b/201652748)
- 提升内容捕获流程 (I3c7c0) 的性能
- 引入 CompositionLocal,可用于修改自动填充成功填充突出显示的画笔。(I52329)
- 引入了新的 Interpolatable 接口,该接口允许在不同类型之间进行自动插值,前提是其中一种类型知道如何从另一种类型进行转换。此接口在多种 Compose 类型(例如 Brush 和 Shape)中得到利用,但也可以在外部使用。(I58eab)
- 现在,Scrollable 可以更好地支持二维鼠标滚轮滚动事件。新增了一个测试 API,用于帮助测试 MouseInjectionScope中的使用情形。我们还在MouseInjectionScope中为滚动方法引入了新的重载,并引入了一个用于控制新行为的标志,称为isMouseWheel1DAxisLockingEnabled(I136df)
- 为键盘类型和状态、导航类型和状态、触屏状态以及界面模式类型添加了 DeviceConfigurationOverrides(I282f0)
- 添加了新的 LineHeightStyle.Mode,名为Tight。此模式有助于强制执行较小的行高,即使这可能会截断较高的字形。(Id3849)
- BaselineShift现在具有 Unspecified 值,以防止装箱- BaselineShift、- Hyphens、- LineBreak、- TextAlign和- TextDirection现在具有- isSpecified辅助函数- Hyphens、- TextAlign、- TextDecoration和- TextDirection现在具有- valueOf()和值方法,可实现高效的序列化/反序列化。(I8d44c)
- 添加了新的 getDisplayName方法接口,以允许为预览参数实例设置自定义显示名称。(I19bdf、b/241699422)
- 现在,当使用小于或大于将 Dp 值与 Unspecified 进行比较时,始终会返回 false。使用 Dp.compareTo(Unspecified)始终返回 0。将标志ComposeUiUnitFlags.isDpCompareToChanged设置为 false 会使Dp.compareTo()恢复到之前的行为,即在将 Unspecified 与小于和大于进行比较时,不总是返回 false,并且compareTo()与 Unspecified 的匹配行为与Float.compareTo()相同。(Ifa88b、b/429221319)
bug 修复
- 将默认 minSdk 从 API 21 移至 API 23(Ibdfca、b/380448311、b/435705964、b/435705223)
- 修复了在过渡期间无法创建新 AndroidComposeViews的问题。(I2e23e、b/340894487、b/287484338)
- 修复了以下情况下的颜色 bug:使用采用一种颜色的矢量可绘制对象,且 fillColor既不是完全不透明,也不是完全透明。(I3b041、b/328677973)
- 修复了以下问题:通过 painterResource加载的具有特定主题颜色的图标在主题更改时未更新。(I85ea0、b/424416571)
- 引入了 onFillData和fillableData语义 (I45d9e)
- 现在,StateRestorationTester中始终启用平台专用状态编码。这样可使测试行为与实际应用状态恢复(例如 Android 上的 Parcelization)保持一致。(I38211、b/408154192、b/382294247)
- 修复了请求焦点时偶尔发生的崩溃问题。(57b31a11、b/431111149)
版本 1.9
版本 1.9.4
2025 年 10 月 22 日
发布了 androidx.compose.ui:ui-*:1.9.4。版本 1.9.4 中包含这些提交内容。
bug 修复
- 修复了以下问题:即使内嵌内容不在省略号区域中,如果内嵌文本内容位于多行省略号文本的最后一行,也会消失。(I76aaf、b/441829208)
- 修复了当 debounceMillis不为零时,onLayoutRectChanged修饰符回调不总是被调用的问题。(72aba47、b/445324854)
版本 1.9.3
2025 年 10 月 8 日
发布了 androidx.compose.ui:ui-*:1.9.3。版本 1.9.3 中包含这些提交内容。
bug 修复
- 修复了以下 bug:如果正在移动的布局有 170 多个后代,onVisibilityChanged/onFirstVisible/onLayoutRectChanged修饰符不会收到回调。(4f2fdd、b/445356774)
版本 1.9.2
2025 年 9 月 24 日
发布了 androidx.compose.ui:ui-*:1.9.2。版本 1.9.2 中包含这些提交内容。
bug 修复
- 现在,当节点分离或重复使用时,Modifier.onVisibilityChanged()会正确触发。(Ic5ce20)
- Modifier.onVisibilityChanged()和- onLayoutRectChanged()现在可以正确处理使用- placeWithLayer()来放置子项的父布局。(Ia05ac9)
- 对于 Modifier.onVisibilityChanged()和onLayoutRectChanged(),在移除图层/图层修饰符或更新图层属性等特殊情况下,正确发出通知。(Ia05ac)
版本 1.9.1
2025 年 9 月 10 日
发布了 androidx.compose.ui:ui-*:1.9.1。版本 1.9.1 中包含这些提交内容。
bug 修复
- 修复了以下颜色 bug:当使用采用一种颜色且 fillColor既非完全不透明也非完全透明的矢量可绘制对象时,会出现此 bug。(I3b041、b/328677973)
版本 1.9.0
2025 年 8 月 13 日
发布了 androidx.compose.ui:ui-*:1.9.0。版本 1.9.0 中包含这些提交内容。
自 1.8.0 以来的重要变更
- 此博文介绍了版本 1.9.0 中的重要变更
- 随 Compose 提供的 Lint 检查现在要求 AGP 版本不低于 8.8.2。如果您无法升级 AGP,可以改为在 gradle.properties中使用android.experimental.lint.version=8.8.2(或更新版本)单独升级 Lint。如需在 IDE 中运行 Compose lint 检查,您必须使用 Android Studio Ladybug 或更高版本。
- 重大变更:graphicsLayer修饰符节点现在实现了SemanticsModifierNode。这可能会导致向语义树添加新的SemanticsNodes,从而导致在对语义树结构做出假设的测试中出现测试失败。例如,如果当前节点和目标节点之间添加了新节点,则使用onChild、onParent、onSibling和其他类似方法进行断言的测试可能会失败。解决这些故障的首选方法是直接向目标节点添加testTag。另一种方法是使用更宽松的匹配器,例如onNode(hasAnyAncestor(hasText("ancestor")) and hasText("target"))。(I638b5)
版本 1.9.0-rc01
2025 年 7 月 30 日
发布了 androidx.compose.ui:ui-*:1.9.0-rc01。版本 1.9.0-rc01 中包含这些提交内容。
bug 修复
- 修复了以下问题:通过 painterResource加载的具有特定主题颜色的图标在系统主题更改时未更新。(I85ea0、b/424416571)
- 修复了 API 21(Lollipop) 和 28(Pie) 上的错误,这些错误是在优化过程中重命名重要图形方法时出现的。(Iebf99、b/425120571、b/420462749)
- 确保新插入的 onLayoutRectChanged修饰符最初会被回调。(l9aa91)、(lb348a)
- 修复了偏移量缓存被错误地失效的问题,该问题会导致使用错误的坐标调用 onLayoutRectChanged修饰符 (ibd4cd),(lddc57)
- 修复了旋转/倾斜布局通过 onLayoutRectChanged修饰符接收到错误坐标的问题(lddc57、b/426750475)
外部贡献
- 修复了滚动时 LazyList中的dragAndDropSource项消失的问题。感谢 Victor Rendina!(dc3bcd3、b/425894792)
版本 1.9.0-beta03
2025 年 7 月 16 日
发布了 androidx.compose.ui:ui-*:1.9.0-beta03。版本 1.9.0-beta03 中包含这些提交内容。
bug 修复
- 修复了以下问题:均匀模糊的内阴影无法随偏移量正确移动。
版本 1.9.0-beta02
2025 年 7 月 2 日
发布了 androidx.compose.ui:ui-*:1.9.0-beta02。版本 1.9.0-beta02 中包含这些提交内容。
API 变更
bug 修复
- 如果 WindowInsets未侵犯ComposeView的内容,则不会提供WindowInsetsRulers值。(I71221)
版本 1.9.0-beta01
2025 年 6 月 18 日
发布了 androidx.compose.ui:ui-*:1.9.0-beta01。版本 1.9.0-beta01 中包含这些提交内容。
重大变更
- graphicsLayer修饰符节点现在实现了- SemanticsModifierNode。这可能会导致向语义树添加新的- SemanticsNodes,从而导致在对语义树结构做出假设的测试中出现测试失败。例如,如果当前节点和目标节点之间添加了新节点,则使用- onChild、- onParent、- onSibling和其他类似方法进行断言的测试可能会失败。解决这些故障的首选方法是直接向目标节点添加- testTag。另一种方法是使用更宽松的匹配器,例如- onNode(hasAnyAncestor(hasText("ancestor")) and hasText("target"))。(I638b5)
API 变更
- 将 ShadowContext更改为封装接口 (I3ce40)
- 添加了一种跨模块方式来创建间接触控事件(用于测试)(I22e4c)
- 将IndirectTouchEvent.nativeEvent设为实验性。(I6fda5)
- 根据 API 委员会的反馈修订了 API Surface。(Ibf378)
- 移除了 FrameRateCategory.NoPreference常量。将Modifier.requestedFrameRate重命名为Modifier.preferredFrameRate。(I2f976)
- WindowInsetsRulers:将- rulersIgnoringVisibility更改为最大值。将- getDisplayCutoutBounds()更改为- PlacementScope的扩展函数。- WindowInsetsAnimationProperties已更改为- WindowInsetsAnimation,- getAnimationProperties()已更改为- getAnimation()。(I3816f)
- 将类 ShadowParams更改为Shadow(I11cca)
- 将帧速率 API 的软件包从 androidx.compose.ui.ui更改为androidx.compose.ui(I8994e)
- 将 InsetsRulers更改为位于通用代码中,名称为WindowInsetsRulers。简化了 API,使所有边衬区均为WindowInsetsRulers。将非标尺动画属性提取到了AnimationProperties类中。WindowInsetsRulers.innermostOf()可用于合并多个WindowInsetsRulers。(I2f0c6、b/415012444)
- 添加了用于解析由 Compose 编译器添加的源代码信息的工具 API。(Iceaf9、b/408492167)
bug 修复
- 由于该功能已完全验证,因此移除了 isGetFocusedRectReturnEmptyEnabled的标志。(Ife722)
- 修复了 performScrollToNode中的一个 bug,该 bug 在某些情况下会导致无法到达目标节点。通过此修复,在这些情况下,它应始终能到达目标节点。此更改的副作用是,操作结束时的确切滚动位置现在可能有所不同,这会影响屏幕截图测试和对确切滚动位置做出假设的测试。(I2c8a1)
版本 1.9.0-alpha04
2025 年 6 月 4 日
发布了 androidx.compose.ui:ui-*:1.9.0-alpha04。版本 1.9.0-alpha04 中包含这些提交内容。
API 变更
- 添加了用于自定义阴影的修饰符 API。(I2058d、b/160665122)
- 添加一个 SemanticsModifierNode.isImportantForBounds属性,用于确定在计算边界时是否应考虑相应节点。该属性默认为 true,可以设置为 false,以表明不应将相应节点纳入边界计算范围。(I7ebec)
- 添加了一个 SemanticsPropertyKey工厂函数,用于声明作为无障碍功能 extra 通过AccessibilityNodeInfo.getExtras公开的 Android 专用语义属性。(I2ed51)
- 移除了 ComposeUiFlags.isRemoveFocusedViewFixEnabled的用法,并弃用了该标志。(I50328)
- 推出新的可自定义的影子框架。这包括 DropShadowPainter和InnerShadowPainter,以及DropShadow/InnerShadow依赖项。影子基础架构是共享的,因此可以在多个调用点共享同一生成的影子,而无需重新生成 n 次影子。(I24f7a、b/160665122)
- 引入了 CompositeShader和CompositeShaderBrush,可在两个着色器之间创建合成结果。此外,还添加了ShaderBrush#transform以设置着色器的转换矩阵。(I2621a、b/160665122)
bug 修复
- 修复了 NestedScrollInteropConnection中的一个 bug,该 bug 导致轻扫方法相对于视图的顺序错误。(I56ad4)
- 之前,绘制全屏的对话框不会在刘海屏区域内绘制。此 bug 已修复,现在具有 decorFitsSystemWindows = false和usePlatformDefaultWidth = false的对话框可以占用刘海屏区域。(I9e975)
- 修复了以下 bug:在 Compose 应用处于后台运行时,开启 TalkBack后,其绿色焦点指示器未绘制。(Ifd12a)
版本 1.9.0-alpha03
2025 年 5 月 20 日
发布了 androidx.compose.ui:ui-*:1.9.0-alpha03。版本 1.9.0-alpha03 中包含这些提交内容。
API 变更
- 标志 ComposeUiFlags.isGetFocusedRectReturnEmptyEnabled可确保当ComposeView中没有可聚焦的内容时,将矩形设置为“空”值。这样可以防止焦点搜索选择要聚焦的视图。当 IME 具有 NEXT 选项时,这一点尤其重要,因为 IME 可能会尝试聚焦于ComposeView,但requestFocus()失败。(Ibd0e2、b/369256395)
- 引入了标志 isNestedScrollDispatcherNodeFixEnabled。(I0d24a)
- 将 DialogProperties'dialogContentTitle重命名为windowTitle(Ibd27b)
- 引入了 Modifier.onFirstVisible和Modifier.onVisibilityChanged修饰符,它们是基于Modifier.onLayoutRectChanged构建的高级修饰符。这些修饰符专门用于处理许多常见的应用要求,例如记录展示次数、自动播放视频等。这些修饰符在构建时考虑到了性能,因此可以在关键的基于列表的场景中使用,而不会牺牲滚动性能。除了这些修饰符 API 之外,还添加了其他 API 来支持这些使用情形,并让开发者能够更轻松地创建完全适合其使用情形的类似自定义修饰符。RelativeLayoutBounds(I759b8)
- 将 setDiagnosticStackTraceEnabled更改为实验性,以考虑此功能的未来发展。(I11db3)
- 引入了 Modifier.scrollable2D、Scrollable2DState和用于创建状态的配套 API。还引入了常见的滚动扩展函数。(Ic61c8、b/214410040)
- Compose 64 位颜色值无法直接与 Android ColorLongs进行比较,因为某些颜色空间的颜色空间 ID 顺序不正确。为了实现 Android 色彩空间的相互转换,我们添加了两个新的 API:toColorLong()和fromColorLong()。(I36899)
- 引入了 ViewConfiguration.minimumFlingVelocity以允许控制轻拂速度的下限。(I11aab)
版本 1.9.0-alpha02
2025 年 5 月 7 日
发布了 androidx.compose.ui:ui-*:1.9.0-alpha02。版本 1.9.0-alpha02 中包含这些提交内容。
API 变更
- 在 DialogProperties中添加dialogContentTitle,用于设置内容窗口标题。bf9d670
bug 修复
- 在修复内部测试期间,暂时停用了窗口边衬区标尺。8d1402
- 修复了在 DragGestureNode中将指针输入更改添加到VelocityTracker的方式,这可以通过新标志isAdjustPointerInputChangeOffsetForVelocityTrackerEnabled进行控制。254ddb
版本 1.9.0-alpha01
2025 年 4 月 23 日
发布了 androidx.compose.ui:ui-*:1.9.0-alpha01。版本 1.9.0-alpha01 包含这些提交内容。
行为变更
- 随 Compose 提供的 Lint 检查现在要求 AGP 版本不低于 8.8.2。如果您无法升级 AGP,可以改为在 gradle.properties中使用android.experimental.lint.version=8.8.2(或更新版本)单独升级 Lint。如需在 IDE 中运行 Compose lint 检查,您必须使用 Android Studio Ladybug 或更高版本。
API 变更
- 移除了用于为命中路径跟踪器启用跟踪语句的标志(调试)。(I1b2a1)
- 将 InnerRectRulers和OuterRectRules更改为方法。从RectRulers公共 API 中移除了名称参数。DerivedRulers现在是垂直和水平标尺的构造函数选项。MergedHorizontalRulers和MergedVerticalRulers已替换为minOf和maxOf方法,用于生成实例。(Iee89f、b/408192133)
- 废弃了 androidx.compose.ui.LocalSavedStateRegistryOwner,取而代之的是androidx.savedstate.compose.LocalSavedStateRegistryOwner。(I5439f、b/377946781)
- 添加了 Modifier.keepScreenOn,用于将显示屏设置为在显示时保持不休眠状态(Ib5af4、b/408284174)
- 添加了一个新的语义属性 Shape,当界面元素的形状与其边界矩形不同时(例如,圆角矩形),可以设置该属性。(I1376f)
- 修复了 AndroidViews中的指针事件调度问题,并添加了标志isPointerInteropFilterDispatchingFixEnabled来保护更改。(I0e272、b/372055500、b/408002332)
- FocusRestorer不再固定之前获得焦点的项目。用户应使用一个键来确保之前聚焦的项目具有相同的组合哈希,以便成功恢复焦点。(I4203b、b/330696779)
- 允许 Compose 触发 ViewTreeObserver.OnScrollChanged。此行为是在isOnScrollChangedCallbackEnabled标志下引入的。我们还推出了DelegatableNode dispatchOnScrollChanged的扩展函数。(I34b9d、b/238109286)
- currentCompositeKeyHash现已被弃用。已改用- currentCompositeKeyHashCode。替换 API 使用更多位对同一哈希进行编码,从而大幅降低了组成层次结构中两个随机无关的组具有相同哈希键的几率。(I4cb6a、b/177562901)
- 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本才能使用 (Idb6b5)
- 为 FocusRequester添加了 lint 检查支持,以确保在组合中记住它 (I6bf91)
- 添加了在可组合项上设置首选帧速率或帧速率类别的功能,以指定可组合项应以何种帧速率渲染 (Ie5201)
- 在 Android 上公开原生 MotionEvent。(I17286)
- 添加了 getChecked() + setChecked(int),弃用了isChecked + setChecked(boolean)(Iaac9d)
- graphicsLayer修饰符现在接受- blendMode和- colorFilter(Iab0e6)
- 添加了 LocalResources组合本地变量以查询资源。当配置发生变化时,调用LocalResources.current会进行重组,因此对stringResource()等 API 的调用会返回更新后的值。(I50c13、b/274786917)
- 公开实验性 API,供可组合函数处理间接触控事件 (Icff57)
- 此版本改进了对可组合内容在布局和绘制阶段抛出的未处理异常的报告。之前,如果此处存在未捕获的异常,则会导致测试运行程序崩溃并过早结束测试套件。现在可以更平稳地报告这些异常,而不会结束测试套件。(I9928b、b/314128080)
- 弃用了实验性 GlobalAssertionsAPI。其预期用途是运行无障碍检查,请改为使用enableAccessibilityChecks()。(I50aa5)
- SemanticsNodeInteraction.performTextInputSelection不再是实验性功能,现在支持额外的- relativeToOriginal参数,可让您将所选内容应用于原始未转换的文本或转换后的文本。(I3a905、b/261561038、b/277018945)
- 引入了通过 AnnotatedString创建自定义项目符号列表的 API(I1d066、b/383269496、b/139326648)
- 弃用 runWithTimingDisabled,改用runWithMeasurementDisabled,后者更清楚地描述了行为 - 所有指标均已暂停。此外,公开MicrobenchmarkScope超类,因为无法重新声明runWithMeasurementDisabled函数来打开访问权限,因为它是内联的。(I9e23b、b/389149423、b/149979716)
- 更新了界面工具 Devices API,以纳入更多新设备。(Ia2ac1)
- 在预览屏幕尺寸集合中添加了平板电脑竖屏,以帮助开发者考虑更大的窗口 (Ia1976)
- 引入了用于在给定时间点标记/记录具有值的轨迹的轨迹值 API。轨迹值在 Prefetto 中显示为一条新轨道,可通过轨迹的时间轴查看。在 Android 上,它们是使用 Trace.setCounter实现的。(Idcf48)
bug 修复
- 修复了在可暂停的组合中调度 remember 观察者的功能,以避免在同一应用中调度 remembered/forgotten(I570b2、b/404645679、b/407931790)
- 现在可以设置 android:dialogTheme,以便在decorFitsSystemWindows为 false 时控制对话框属性(I7922f、b/246909281)
- 修复了以下 bug:在对话框外部捕获的任何运动事件都可能关闭对话框。(Ia78fd)
- Compose lint 检查现在要求从命令行运行的 AGP 版本至少为 8.8.2,并且 IDE 支持至少需要 Android Studio Ladybug。如果您使用的是旧版 AGP,可以在 gradle.properties 中设置 android.experimental.lint.version=8.8.2以升级 Lint 版本,而不会影响 AGP。(I6f2a8)
- 添加了一个新的语义属性 InputText,用于捕获textfield在应用输出转换之前的值。(Iae46a、b/395911609、b/176949051)
- 将用于为 Android 开启无障碍功能检查的 enableAccessibilityChecks()API 移到了单独的软件包中,如果您在调用TestRule时未使用TestRule和compose:ui:ui-test-junit4-accessibility,则该软件包为compose:ui:ui-test-accessibility(I3c318、b/391560768)
- 在 LaunchedEffect和rememberCoroutineScope中添加了对 Compose 堆栈轨迹的支持(I705c0、b/354163858)
外部贡献
- 更改了实验性 runComposeUiTest函数,使其接受挂起块。还添加了已废弃的函数runComposeUiTest,以实现二进制文件兼容性(I3b88c、b/361577328)
版本 1.8
版本 1.8.3
2025 年 6 月 18 日
发布了 androidx.compose.ui:ui-*:1.8.3。版本 1.8.3 中包含这些提交内容。
bug 修复
- 由于该功能已完全验证,因此移除了 isGetFocusedRectReturnEmptyEnabled的标志。(Ife722)
- 标志 ComposeUiFlags.isGetFocusedRectReturnEmptyEnabled可确保当ComposeView中没有可聚焦的内容时,将矩形设置为“空”值。这样可以防止焦点搜索选择要聚焦的视图。当 IME 具有 NEXT 选项时,这一点尤其重要,因为 IME 可能会尝试聚焦于ComposeView,但requestFocus()失败。(Ibd0e2、b/369256395)
1.8.2 版
2025 年 5 月 20 日
发布了 androidx.compose.ui:ui-*:1.8.2。版本 1.8.2 中包含这些提交内容。
bug 修复
版本 1.8.1
2025 年 5 月 7 日
发布了 androidx.compose.ui:ui-*:1.8.1。版本 1.8.1 中包含这些提交内容。
bug 修复
- 修复了 onLayoutRectChanged和LazyLayout的一些问题 d791b11
- 跳过预合成项的重新衡量请求。此 bug 影响了延迟布局的滚动性能,因为在某些情况下,预提取无法高效运行,测量发生在帧内。742087a
版本 1.8.0
2025 年 4 月 23 日
发布了 androidx.compose.ui:ui-*:1.8.0。版本 1.8.0 中包含这些提交内容。
自 1.7.0 以来的重要变更
- Compose 1.8 新增了对语义自动填充的支持。确保您使用的界面和基础库版本为 1.8 或更高版本,因为文本组件的自动填充功能需要这两个模块的最新版本。如需了解 API 用法和示例,请点击此处查看自动填充文档,了解更多详情。
- Compose 1.8 支持其他类型的触感反馈:Confirm、ContextClick、GestureEnd、GestureThresholdActivate、Reject、SegmentFrequentTick、SegmentTick、ToggleOn、ToggleOff、VirtualKey。可通过LocalHapticFeedback访问此属性,在 Android 上,当 Vibrator API 指示支持触感反馈时,此属性默认可用。
- 多个焦点 API 现已稳定,包括 Modifier.focusRestorer()、onEnter和onExitFocusProperties(I6e667)。您现在可以在调用requestFocus时指定FocusDirection。我们在focusRequester和FocusTargetModifierNode中都添加了requestFocus(FocusDirection)API,以实现按特定方向对焦。(I5d9ec][https://android-review.googlesource.com/#/q/I5d9eca3a2cd283c1b84ad6b77d929ef9a49ce4cc], b/245755256)
版本 1.8.0-rc03
2025 年 4 月 9 日
发布了 androidx.compose.ui:ui-*:1.8.0-rc03。版本 1.8.0-rc03 中包含这些提交内容。
bug 修复
- 停用了导致回归的部分焦点互操作修复。(b9d998、b/369256395、b/378570682、b/376142752、b388590015/、b/389994198、b/391378895)
版本 1.8.0-rc02
2025 年 3 月 26 日
发布了 androidx.compose.ui:ui-*:1.8.0-rc02。版本 1.8.0-rc02 中包含这些提交内容。
bug 修复
- 修复了以下问题:当从 LazyList 中移除嵌入在 Compose 层次结构中的已聚焦视图时,会导致重入组合。(765562)
版本 1.8.0-rc01
2025 年 3 月 12 日
发布了 androidx.compose.ui:ui-*:1.8.0-rc01。版本 1.8.0-rc01 中包含这些提交内容。
bug 修复
- 修复了以下问题:当聚焦的 AndroidView在软键盘处于活动状态时被移除时,应用会崩溃。(Ic725a)
- 修复了新的焦点状态处理实现中的几个问题。(b/395895685)
- 修复了使用 LaunchedEffect请求聚焦文本字段时阻止自动填充的问题。(b/392539099)
版本 1.8.0-beta03
2025 年 2 月 26 日
发布了 androidx.compose.ui:ui-*:1.8.0-beta03。版本 1.8.0-beta03 中包含这些提交内容。
API 变更
- 将用于开启 Android 无障碍检查的 enableAccessibilityChecks()API 移到了单独的软件包中,如果您不使用 TestRule,则该软件包为compose:ui:ui-test-accessibility;在TestRule上调用时,该软件包为compose:ui:ui-test-junit4-accessibility(I547ef、b/391560768)
- 添加了一个新的语义属性 InputText,用于捕获应用输出转换之前的文本字段值。(Iae46a)
bug 修复
- 修复了导致自动填充服务保存转换后的输出文本而非输入文本的问题。(Iae46a、b/395911609、b/176949051)
版本 1.8.0-beta02
2025 年 2 月 12 日
发布了 androidx.compose.ui:ui-*:1.8.0-beta02。版本 1.8.0-beta02 中包含这些提交内容。
新功能
- 添加了 lint 检查,用于警告对 Configuration#screenWidth/heightDp的调用 - 可以改用LocalWindowInfo.current.containerSize来检索当前窗口大小。
版本 1.8.0-beta01
2025 年 1 月 29 日
发布了 androidx.compose.ui:ui-*:1.8.0-beta01。版本 1.8.0-beta01 中包含这些提交内容。
API 变更
- ContextualFlowRow和- ContextualFlowColumn已标记为已弃用。此实验性组件是在 1.7 中引入的,尚未稳定,并且实现已被认为是不理想的。未来,可能会提供一个组件来解决此组件旨在解决的应用场景。- FlowRow和- FlowColumn具有实验性过载,这些过载是在 1.7 中引入的,包含- overflow参数。此参数已被弃用,您可改用不含此参数的重载。这些重载的默认“overflow”行为将为“Clip”,自引入以来一直如此。
- 许多 ContextualFlowRow的使用情形都可以使用 FlowRow 来实现,但我们承认这并不完全正确。ContextualFlowRow完全可以在用户空间中实现,您可以尝试复制其实现并根据需要进行调整。未来,我们希望以不同的方式解决这些使用情形。(Ibafec)
 
- 移除了 SemanticsNodeInteraction.semanticsId()。已改用SemanticsNodeInteraction.fetchSemanticsNode().id。(Ie397a)
- 旧版自动填充 API 已弃用。请改用基于新语义的 API。(I943ff)
- 重写 requestAutofillAPI 以使其存在于自动填充管理器之外。(Id1929)
bug 修复
- 修复了焦点问题,即具有无意义的 previouslyFocusedRect参数(与焦点方向相关)的requestFocus()会跳过ComposeView。(Ifdc2f、b/388590015)
- 修复了使用 GraphicsLayer.record { this@ContentDrawScope.drawContent() }时偶尔出现的 NPE。如果您以这种方式记录drawContent(),请务必在DrawScope内使用GraphicsLayer#record扩展函数,而不是GraphicsLayer上的成员函数。(I75fc0、b/389046242)
- 修复了以下问题:在动画期间,带有省略号的文本布局有时会错误地进行转换。如需了解详情,请参阅 b/389707025(Ie55b1、b/389707025)
版本 1.8.0-alpha08
2025 年 1 月 15 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha08。版本 1.8.0-alpha08 包含这些提交内容。
API 变更
- 将 AutofillManager设为抽象类。(I0a3b0)
- 修复了多个与焦点相关的问题,包括当 IME 尝试聚焦于没有可聚焦项的 ComposeView时发生的崩溃、子级AndroidViews内的焦点变化,以及焦点请求留下AndroidView的问题。(Ia03c3、b/369256395、b/378570682、b/376142752)
- 将 FocusEnterExitScope.cancelFocus()更改为cancelFocusChange()(I89959)
- 您现在可以使用 RectInfo.calculateOcclusions()计算可组合的遮挡。
- 在 DelegatableNode上添加了扩展函数,用于注册全局布局更改的监听器。(I68b59)
bug 修复
- 使用 ComposeContentTestRule.setContent时,用作受测可组合项宿主的 activity 现在使用主题Theme.Material.Light.NoActionBar,以避免在以 SDK 35 为目标平台时,ActionBar与测试内容重叠。如需选择停用此行为,您可以移除对ui-test-manifest的依赖项,并在测试应用的 AndroidManifest.xml 中为ComponentActivity添加一个 activity 条目,并选择您喜欢的主题。(I7ae1b、b/383368165)
- 现在,具有相同变体设置的资源字体将避免过度缓存,从而防止应用错误的变体设置。(If3dff、b/372044241)
- AnnotatedString.fromHtml现在支持- <ul>/<li>标记。(I7c2fe、b/299662276、b/139326648)
外部贡献
- 添加了新的剪贴板接口及其对应的 CompositionLocal。(I80809)
版本 1.8.0-alpha07
2024 年 12 月 11 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha07。版本 1.8.0-alpha07 中包含这些提交内容。
API 变更
- 针对工具公开了 LayoutNode中的所有者。(I26f7f)
- 使 LocalAutofillHighlightColor组合本地使用颜色类型。(I0e05b)
- 保留已弃用的 UrlAnnotation及其标记为实验性的方法。(Ic0021)
bug 修复
- 修复了在 BasicText或 Text 可组合函数中使用LinkAnnotation时出现的IndexOutOfBoundsException崩溃问题(be7605、b/374115892)
- 修复了以下问题:具有自定义形状的已填充文本字段无法剪裁指示器线条。(I4f87f、b/380704151)
- 修复了长屏幕截图缺少背景的问题。(I4d57a)
- 此库现在使用 JSpecify nullness 注解,这些注解属于 type-use 类型。Kotlin 开发者应使用以下编译器实参来强制执行正确用法:-Xjspecify-annotations=strict(这是 Kotlin 编译器从 2.1.0 版开始的默认实参)。(Idfef8、b/326456246)
- 更新了在 Android Q 及更高版本上运行时对广色域和 HDR 颜色的 Compose 支持。(Icd8be、b/379135036)
- 现在,如果资源字体无法加载,系统会以静默方式回退到默认字体,而不是像之前那样在测量时抛出异常。(Ib6a49)
- 修复了 AndroidView分离和附加时焦点丢失的问题。(I53446)
- 接受来自边界外布局操作的 requestFocus()。(Ia8461)
外部贡献
- 向界面添加了 BringIntoViewResponderModifierNode,该函数提供了一种实现“将内容显示在视图中”功能的新方式,并允许在平台级别实现该功能。(Ia6dd8)
版本 1.8.0-alpha06
2024 年 11 月 13 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha06。版本 1.8.0-alpha06 中包含这些提交内容。
API 变更
- 添加了 stylusHoverIcon修饰符。(Iff20a、b/331289114)
- 将自动填充管理器更改为接口。(I84914、b/376080755)
- 向 focusRequester和FocusTargetModifierNode添加了requestFocus(FocusDirection),以允许按特定方向聚焦。(I5d9ec、b/245755256)
- FocusProperties.enter和- FocusProperties.exit已替换为- onEnter和- onExit,使用接收器范围而不是- FocusDirection参数。(I6e667)
- 在文本工具栏中添加了自动填充支持。(Ie6a4c)
- 对 Modifier.focusRestorer()的 API 变更(I99c03):- 参数名称已更改为“fallback”
- 参数现在是 FocusRequester,而不是 lambda
- 形参现在为非 NULL,默认值为 Default
 
- 从自动填充管理器接口中移除了 @Experimental注释。该功能仍在开发中,目标是在此版本中发布,但我们不想引入 @Experimental API (Id8398)
- LocalHapticFeedback现在在 Vibrator API 指示支持触感反馈时提供默认的- HapticFeedback实现。以下内容已添加到- HapticFeedbackType-- Confirm、- ContextClick、- GestureEnd、- GestureThresholdActivate、- Reject、- SegmentFrequentTick、- SegmentTick、- ToggleOn、- ToggleOff、- VirtualKey。Wear Compose 的长按可点击组件(例如- Button、- IconButton、- TextButton和- Card)现在会在提供长按处理程序时执行- LONG_PRESS触感反馈。(I5083d)
- 移除了 OverscrollConfiguration和LocalOverscrollConfiguration,并添加了rememberPlatformOverscrollFactory以创建默认过度滚动实现的实例 / 自定义参数。如需停用过度滚动,请使用LocalOverscrollFactory provides null,而不是LocalOverscrollConfiguration provides null。如需更改发光颜色 / 内边距,请使用LocalOverscrollFactory provides rememberPlatformOverscrollFactory(myColor, myPadding),而不是LocalOverscrollConfiguration provides OverscrollConfiguration(myColor, myPadding)。(Ie71f9、b/255554340、b/234451516)
- 移除了实验性 GlobalAssertionsAPI。它的预期用途是运行无障碍检查,请改为使用enableAccessibilityChecks()。(I59322)
版本 1.8.0-alpha05
2024 年 10 月 30 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha05。版本 1.8.0-alpha05 中包含这些提交内容。
新功能
在此版本中,自动填充功能通过功能标志公开。我们正在努力提高性能,并希望您能尽早提供有关 API 的反馈。在稳定版发布之前,这些 API 会根据反馈进行改进。
- 如需启用自动填充功能,请在 onCreate中将ComposeUiFlags.isSemanticAutofillEnabled设置为 true,并使用最新的 Compose 快照。
- 此版本的自动填充功能支持通过“建议使用安全系数高的密码”和导航手动保存凭据。它还支持在可自动填充的字段获得焦点时或通过文本组件上的文本工具栏触发自动填充时进行填充。当自动填充完成时,相应组件会突出显示。
API 变更
- 修改了自动填充界面,以遵循 expect/actual结构。(I22dce)
- 引入 CompositionLocal,可用于修改自动填充成功填充突出显示的色调。(I32092)
- 添加了 Modifier.onRectChangedAPI,该 API 允许用户订阅LayoutNode的根相对位置/窗口相对位置/屏幕相对位置和大小。该 API 可解决现有onGloballyPositioned修饰符可解决的许多用例,但开销要少得多,并且该 API 附带了用于根据用例需求对回调进行去抖动和节流的工具。(Id28c7、b/372765423、b/372757007、b/372994338)
- 扩展了自动填充管理器,使其包含 commit()和cancel()API,可帮助用户保存新输入的凭据。(I2da00)
- 引入了新的 AutofillManager接口,可用于微调用户的自动填充流程,以及一个isSemanticAutofillEnabled标志,用于启用此新版自动填充功能。(I9d484)
- 添加了 Modifier.onRectChangedAPI,该 API 允许用户订阅LayoutNode的根相对位置/窗口相对位置/屏幕相对位置和大小。该 API 可解决现有onGloballyPositioned修饰符可解决的许多用例,但开销要少得多,并且该 API 附带了用于根据用例需求对回调进行去抖动和节流的工具。(I3c8fa)
- 添加了语义属性和数据类型,以支持扩展的自动填充功能。(I52c7d)
- AnnotatedString构建器中的所有方法现在都不是实验性方法(Ia89c8、b/261561823)
bug 修复
- 嵌入在 Compose 中的视图现在可以在获得焦点时接收旋转事件(I4d53a、b/320510084)
- 修复了各种资源类型在配置更改时无法更新的问题(Ia9b99、b/352336694)
- 解决了在某些旧版 Sony 设备上使用 POBox 日语键盘时,TextField无法正常运行的问题。(Ia9b99、b/373743376)
- 修复了对话框显示在屏幕底部而不是居中的问题(Ia2ec、b/373093006)
- 以 API 35 及更高版本为目标平台的应用不再强制将对话框的 decorFitsSystemWindows设置为 false。(Ibc94、b/364492593)
- 修复了在窗口(例如对话框和主要内容)之间移动图层时发生的崩溃问题(I675ba、b/330955281)
版本 1.8.0-alpha04
2024 年 10 月 16 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha04。版本 1.8.0-alpha04 中包含这些提交内容。
API 变更
- 添加了 DelegatableNode#onDensityChange和DelegatableNode#onLayoutDirectionChange回调,以便在这些状态发生变化时更新节点状态(I04f3e、b/340662451)
- 添加了 WindowInfo#containerSize以提供当前窗口的内容容器大小。可以使用LocalWindowInfo检索此信息。(Idc38c、b/369334429、b/360343819)
- 针对在正在进行的快速滚动期间从节点树中移除的嵌套可滚动对象引入修复。现在,这些节点将取消 fling,并正确发送包含剩余速度的 onPostFling事件。我们还引入了标志NewNestedScrollFlingDispatchingEnabled,用于控制出现回归时的行为。此标志将在 Beta 版发布之前移除。(I05c37、b/371168883)
- 引入了 PointerInputModifierNode#touchBoundsExpansion,可用于扩大单个指针输入修饰符的触摸边界。(Iccf02、b/335339283)
- 添加了 WindowInfo#containerSize以提供当前窗口的内容容器大小。可以使用LocalWindowInfo检索此信息。(I27767、b/369334429、b/360343819)
- 从 TextFields中移除了readOnly,以固定到稳定的基础版本。(I3aaba)
- Paragraph和- ParagraphIntrinsics现在接受应用于- AnnotatedString的所有注释的列表,之前它只接受- SpanStyles的列表 (I12f80)
bug 修复
- 更新了 AnnotatedString中段落的处理方式。之前,您只能创建不重叠的段落。现在,AnnotatedString允许完全重叠的段落(这些段落将合并在一起)和嵌套段落(在这种情况下,外部段落将根据内部段落的边界进行拆分,并且内部段落的样式将与外部段落的样式合并 [Ic9554])
- 修复了 AnnotatedString中因LinkAnnotation长度为零而导致的崩溃问题。(89aac6)
版本 1.8.0-alpha03
2024 年 10 月 2 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha03。版本 1.8.0-alpha03 中包含这些提交内容。
API 变更
- 将 Kotlin 版本更新为 1.9 (I1a14c)
- 引入了新的语义角色“轮播界面”,用于在分页器中模拟列表行为,以供无障碍服务使用。(Id354b、b/354109776、b/239672673)
- 已将 invisibleToUser()重命名为hideFromAccessibility。其功能保持不变。如需了解详情,请参阅文档。(Ib43a3)
bug 修复
- 更新了 SensitiveContent修饰符的文档 (Ib0442)
- 修复了以下问题:在某些 Android 版本上,某些通用轮廓剪裁会与高程阴影结合使用时被忽略
- 修复了以下问题:在某些 Android 版本上指定了通用轮廓剪辑时,系统会应用空剪辑。
- 修复了以下问题:当 IME 在外部视图上处于活跃状态,并且使用“下一步”操作将焦点移至 ComposeView时,系统会抛出异常。clearFocus()行为与 API < 28 上的视图行为一致,其中clearFocus()可能会导致默认视图获得焦点。
- 通过分离不同布局传递的子合成管理,修复了 LazyList中在分离节点上发生放置的问题。
- 修复了以下问题:当焦点从 TextField切换到EditText或任何其他基于视图的编辑器时,软件键盘会闪烁。
- 嵌套的滚动节点现在会在分离后正确调度 onPostFling事件。
- 一般性能改进
版本 1.8.0-alpha02
2024 年 9 月 18 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha02。版本 1.8.0-alpha02 中包含这些提交内容。
API 变更
- 现在可以使用 TextOverflow.StartEllipsis和TextOverflow.MiddleEllipsis,以便在单行文本的开头或中间放置省略号。(I38913、b/185418980)
bug 修复
- 修复了 Dalog dismissOnClickoutside(39a3d、b/364508685)
- 不剪裁对话框内容的阴影(e8e2f、b/363027803)
- 修复了焦点搜索在 Compose 和 View 之间移动时的错误行为(58377、b/350534714)
外部贡献
- AlignmentLines- Map现在接受- VerticalAlignmentLine或- HorizontalAlignmentLine具体类型。(I02912)
- 新增了通用的 ByteArray.decodeToImageBitmap(): ImageBitmap方法。(I83c21)
版本 1.8.0-alpha01
2024 年 9 月 4 日
发布了 androidx.compose.ui:ui-*:1.8.0-alpha01。版本 1.8.0-alpha01 中包含这些提交内容。
版本 1.7
版本 1.7.8
2025 年 2 月 12 日
发布了 androidx.compose.ui:ui-*:1.7.8。版本 1.7.8 中包含这些提交内容。
版本 1.7.7
2025 年 1 月 29 日
发布了 androidx.compose.ui:ui-*:1.7.7。版本 1.7.7 中包含这些提交内容。
bug 修复
- 修复了将带有 LinkAnnotation的AnnotatedString传递给 Text 可组合函数时出现的IndexOutOfBoundsException。(Ic96d2)
- 修复了在极少数情况下,当 LinkAnnotation在AnnotatedString中使用时,测试中出现的超时问题。(I04a03)
版本 1.7.6
2024 年 12 月 11 日
发布了 androidx.compose.ui:ui-*:1.7.6。版本 1.7.6 中包含这些提交内容。
bug 修复
- 之前,每当焦点系统有待处理的失效时,如果遇到关键事件,我们都会抛出错误。现在,我们会改为记录错误(I7ea0、b/346370327)。
- 从 SemanticsPropertyReceiver.invisibleToUser()中移除了实验性注解。此方法将在 1.8 中废弃,取而代之的是SemanticsPropertyReceiver.hideFromAccessibility()。(I448f0、b/376479686)
- 修复了以下问题:在某些旧版 Sony 设备上使用 POBox 日语键盘时,TextField无法正常运行。(I94e0e、b/373743376)
- 修复了 BasicText的 inlineContent 未被TalkBack朗读的无障碍功能问题。(I67bcb、b/376479686)
版本 1.7.5
2024 年 10 月 30 日
发布了 androidx.compose.ui:ui-*:1.7.5。版本 1.7.5 中包含这些提交内容。
bug 修复
- 修复了以下问题:具有自定义轮廓的高度和剪裁无法正常渲染。
- 修复了在零宽度 LinkAnnotation的情况下发生的文本崩溃问题。(Ic1e2e)
- 修复了当按钮构建为可点击的 Text 可组合项时,Talkback中按钮的公告。(I1f588)
版本 1.7.4
2024 年 10 月 16 日
发布了 androidx.compose.ui:ui-*:1.7.4。版本 1.7.4 中包含这些提交内容。
版本 1.7.3
2024 年 10 月 2 日
发布了 androidx.compose.ui:ui-*:1.7.3。版本 1.7.3 中包含这些提交内容。
bug 修复
- 修复了以下问题:在某些 Android 版本中,指定通用轮廓剪辑会导致剪辑边界为空。
- 修复了以下问题:当 IME 在外部视图上处于活跃状态,并且使用“下一步”操作将焦点移至 ComposeView时,系统会抛出异常。clearFocus()行为与 API < 28 上的视图行为一致,其中clearFocus()可能会导致默认视图获得焦点。
- 修复了以下问题:为预读失效使用了错误的 placeOrder,从而修复了跳过预读放置的极端情况。
版本 1.7.2
2024 年 9 月 18 日
发布了 androidx.compose.ui:ui-*:1.7.2。版本 1.7.2 中包含这些提交内容。
bug 修复
- 通过移除详细的跟踪信息,提升了无障碍节点信息和语义事件的性能。(I89156、b/362530618)
- 当传递的测量大小异常大时,ComposeView不再会崩溃(da5db、b/347036173)
- 修复了无障碍功能屏幕阅读器问题,即未播报按钮上的 LiveRegion公告。(f66fa7、b/348590026)
版本 1.7.1
2024 年 9 月 10 日
- Android 制品没有任何变化。移除了 -desktop制品,并添加了-jvmStubs和-linuxx64Stubs制品。这些目标均不打算使用,它们只是占位符,用于帮助 Jetbrains Compose 开展工作。
版本 1.7.0
2024 年 9 月 4 日
发布了 androidx.compose.ui:ui-*:1.7.0。
自 1.6.0 以来的重要变更
有关版本 1.7.0 中的重要变更,请参阅这篇博文。
版本 1.7.0-rc01
2024 年 8 月 21 日
发布了 androidx.compose.ui:ui-*:1.7.0-rc01。版本 1.7.0-rc01 中包含这些提交内容。
显著变更
- ui:ui 模块现在强制要求 foundation:foundation 的最低版本为 1.7.0-rc01 或更高版本。强制执行此操作是为了解决 1.7.0-alpha01 早期发生的 NestedScrollSource更改导致的界面和基础库之间的行为不兼容问题。
版本 1.7.0-beta07
2024 年 8 月 7 日
发布了 androidx.compose.ui:ui-*:1.7.0-beta07。版本 1.7.0-beta07 中包含这些提交内容。
bug 修复
- 与文本输入相关的 SemanticsNodeInteraction函数performTextReplacement、performTextInput和performTextClearance现在在只读TextFields上调用时会抛出断言错误。(I4ae8f)
版本 1.7.0-beta06
2024 年 7 月 24 日
发布了 androidx.compose.ui:ui-*:1.7.0-beta06。版本 1.7.0-beta06 中包含这些提交内容。
版本 1.7.0-beta05
2024 年 7 月 10 日
发布了 androidx.compose.ui:ui-*:1.7.0-beta05。版本 1.7.0-beta05 中包含这些提交内容。
bug 修复
- 修复了以下 bug:更改软件键盘会导致 TextField在失去焦点并重新获得焦点之前,无法接受来自新键盘的输入。
- 修复了以下问题:尝试持久保留图层内容会在使用 SurfaceView内容进行渲染时导致意外的副作用。
版本 1.7.0-beta04
2024 年 6 月 26 日
发布了 androidx.compose.ui:ui-*:1.7.0-beta04。版本 1.7.0-beta04 中包含这些提交内容。
bug 修复
- 避免在测量非常长的文本行(例如 1 万个字符)时发生崩溃 (8157ab)
- 停用对 GraphicsLayerAPI 的软件渲染支持。(35ddd8)
- 修复了图层持久性逻辑中的崩溃问题。(70b13e)
- 由于重用图层对象优化导致了渲染问题,因此已将其还原。(70b13e)
版本 1.7.0-beta03
2024 年 6 月 12 日
发布了 androidx.compose.ui:ui-*:1.7.0-beta03。版本 1.7.0-beta03 中包含这些提交内容。
版本 1.7.0-beta02
2024 年 5 月 29 日
发布了 androidx.compose.ui:ui-*:1.7.0-beta02。版本 1.7.0-beta02 中包含这些提交内容。
API 变更
- 将 SemanticsProperties.Editable重命名为IsEditable,并将SemanticsPropertyReceiver.editable更改为值isEditable。该属性现在是一个布尔值,始终由文本字段指定。(I8acd8)
- 重命名了无障碍基准参数。(I3d440)
- 更新了用于设置链接样式的 API:TextLinkStyles现在是LinkAnnotation构造函数和AnnotatedString.fromHtml方法的一部分 (I90b2b)。还从素材中移除了TextDefaults(I5477b)
bug 修复
- 将 LayoutCoordinates.introducesFrameOfReference重命名为LayoutCoordinates.introducesMotionFrameOfReference,以更好地反映其用途。重命名了相关函数,以根据该标志计算坐标。(I3a330)
版本 1.7.0-beta01
2024 年 5 月 14 日
发布了 androidx.compose.ui:ui-*:1.7.0-beta01。版本 1.7.0-beta01 中包含这些提交内容。
API 变更
- 将 performCustomAccessibilityActionLabelled重命名为performCustomAccessibilityActionWithLabel,将performCustomAccessibilityActionWhere重命名为performCustomAccessibilityActionWithLabelMatching。(I5387f)
- AnnotatedString.hasEqualsAnnotations现已更改为- hasEqualAnnotations(I685c0)
- 更新了用于获取文本中 Material 主题链接的 API。具体而言,移除了 TextDefaults中用于构建主题化LinkAnnotations和解析包含主题化链接的 HTML 的方法。而是添加了一个TextLinkStyles类,该类允许将链接作为参数添加到 Text 可组合项中以设置样式。(I31b93)
bug 修复
- 修复了在事件期间动态添加指针输入修饰符时的其他使用情形 63e1504
版本 1.7.0-alpha08
2024 年 5 月 1 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha08。版本 1.7.0-alpha08 包含这些提交内容。
API 变更
- 添加了对可变形状实现的支持。现在,Shape#createOutline在图形层内受到观察,因此当状态发生变化时,在其中读取状态值会导致失效,从而实现性能更高的形状动画。(Id1629、b/326070216)
- isPositionedByParentWithDirectManipulation已重命名为- introducesFrameOfReference。请注意,它现在具有相反的效果,这意味着默认情况下,大多数- LayoutCoordinates都会引入参考帧,并且只有在直接操作下,该属性才会为 false。如需查询仅引入参考框架的位置,请使用- positionInLocalFrameOfReference(...)。或者,从- LookaheadScope中减去- positionInLocalLookaheadFrameOfReference。(Ifc5f7)
- LookaheadScopeAPI 已稳定 (I21507)
- 根据 API 委员会的反馈,更改了 getScrollViewportLength的操作 lambda。(Ibc74a)
- 更新了 GraphicsLayer轮廓 API,现在使用浮点数参数而不是整数参数。移除了UnsetOffset/UnsetSize IntSize标记值,改用基于浮点数的 Offset 和 Size 内联类上已有的 Unspecified 常量(I2fb03、b/333863462)
- 在测试期间注入鼠标输入时,MouseInjectionScope.click()、MouseInjectionScope.doubleClick()、MouseInjectionScope.tripleClick()、MouseInjectionScope.longClick()现在接受button: MouseButton参数,以使其更具普遍适用性。所有方法的默认值为MouseButton.Primary。(I31a23、b/190493367、b/261439695)
- 将 LinkInteractionListener内的onClicked重命名为onClick。(Iaa35c)
- 已将 TextInclusionStrategy.isInside重命名为isIncluded。将Paragraph/MultiParagraph#getRangeForRect()返回类型设为不可为 null。(I51f26)
bug 修复
- 修复了以下问题:对于具有 reverseScrolling=true的滚动容器,无法截取长屏幕截图。(I7c59c)
外部贡献
- 添加了对预先抓取嵌套 LazyLists中项的支持(例如,渲染嵌套LazyRows的LazyColumn)。此更改预计会减少这些LazyLists在滚动期间的掉帧次数。实现默认值为预提取前 2 个嵌套项,不过可以通过新的LazyLayoutPrefetchStrategy(nestedPrefetchItemCount)和LazyListPrefetchStrategy#onNestedPrefetchAPI 控制此行为。(I51952)
版本 1.7.0-alpha07
2024 年 4 月 17 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha07。版本 1.7.0-alpha07 中包含这些提交内容。
API 变更
- ClickableText已标记为已弃用。如需向文字添加链接,请创建一个包含与链接对应的- LinkAnnotation的- AnnotatedString,并将此- AnnotatedString传递给 Text 可组合项。(I34d4b、b/323346994)
- 引入了 ViewConfiguration.HandwritingGestureLineMargin以支持手写手势。支持BasicTextField的JoinOrSplit手势(Ie6e13、b/325660505)
- FocusProperties.enter和- FocusProperties.exit不再是实验性功能。- FocusDirection.Enter和- FocusDirection.Exit不再是实验性功能。- FocusRequester.Cancel不再是实验性方法(I461a1、b/261564106)
- 查询布局坐标时,您现在可以使用 excludeDirectManipulationOffset实参来排除通过Placeable.PlacementScope.withDirectManipulationPlacement放置子项的父布局设置的偏移量。同样,经常更改子级位置的布局现在可以使用withDirectManipulationPlacement(例如默认实现的滚动)来放置子级。这有助于使基于approachLayout的动画更加直观,现在有机会区分要设置动画效果的偏移量,以及在决定设置动画效果时要直接应用的内容。(I60ec7)
- 已移除长屏幕截图的功能标志。(I28648、b/329128246)
- LazyColumn现在可以在长屏幕截图中正确呈现粘性标题。(I8d239、b/329296635)
- NestedScroll来源拖动和快速滑动正被- UserInput和- SideEffect取代,以适应这些来源的扩展定义,现在包括动画(副作用)以及鼠标滚轮和键盘 (- UserInput)。(I40579)
- ApproachLayoutModifierNode和- Modifier.approachLayout现已稳定,并新增了- isMeasurementApproachInProgress()和- isPlacementApproachInProgress(),分别用于替换旧的- isMeasurementApproachComplete()和- isPlacementApproachComplete()。
- 移除了已弃用的 intermediateLayout修饰符。(I3e91c)
- 将 GraphicsLayer#buildLayer重命名为 record,以镜像 Displaylist 支持的 API(如RenderNode和 Picture)的 begin/endRecording 方法。
- 更新了 rememberGraphicsLayer以利用rememberObserver。(I312c1、b/288494724、b/330758155)
- UrlAnnotation已弃用,请改用- LinkAnnotation.Url。如果您使用的是 Material 主题,请使用- TextDefaults对象创建应用了 Material 主题的注释(I8d180、b/323346545)
- 除了正常样式、悬停样式和聚焦样式之外,文本链接还获得了按下状态样式选项(I5f864、b/139312671)
- String.parseAsHtml已重命名为- AnnotatedString.Companion.fromHtml。(I43dcd)
- 向 parseAsHtml方法添加了样式实参(linkStyle、focusedLinkStyle、hoveredLinkStyle)和链接互动监听器。使用<a>标记解析 HTML 标记的字符串时,该方法将为每个此类标记构建一个LinkAnnotation.Url,并将样式对象和链接互动监听器传递给每个注释。(I7c977)
- LinkAnnotation现在接受基于状态的样式参数和- LinkInteractionListener。向- AnnotatedString添加此注释即可获得超链接。通过传递- focusedState和/或- hoveredState,您可以定义链接在聚焦和/或悬停时的视觉- configuration。(I81ce4、b/139312671)
- ImeOptions.hintLocales不再可为 null。如果您想传递一个空的 Locale 列表,请使用- LocaleList.Empty。(Ic5bc4)
bug 修复
- 妥善处理错误/损坏的历史输入事件数据(忽略错误的偏移数据)。
- 修复了在活跃的指针输入事件流期间(例如,在悬停进入和悬停退出 [鼠标/触控笔] 之间)在另一个指针输入修饰符之前动态添加指针输入修饰符时出现的意外指针事件。
版本 1.7.0-alpha06
2024 年 4 月 3 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha06。版本 1.7.0-alpha06 中包含这些提交内容。
新功能
- 为样式化字符串添加了 parseAsHtml方法:该方法可将标记有 HTML 代码的字符串转换为AnnotatedString。请注意,并非所有标记都受支持,例如,您目前还无法显示项目符号列表。(I84d3d、I30626、b/139326648)
- 使用官方 Android API (ScrollCaptureCallback) 在 Compose 滚动容器中实现了对长屏幕截图的实验性支持。此功能为实验性功能,目前可能无法正确处理所有情况。因此,该功能目前默认处于停用状态。如需选择启用,请将ComposeFeatureFlag_LongScreenshotsEnabled标志设置为 true。(I2b055、b/329296471)
API 变更
- fun ClipEntry.getMetadata()变为- val ClipEntry.clipMetadata。(I50155)
- 移除了 ClipboardManager.getClipMetadata和ClipboardManager.hasClip函数。请使用clipEntry.getMetadata()读取当前剪辑条目的元数据。还要检查ClipboardManager.getClip的结果是否为 null,以了解剪贴板是否包含当前剪辑。(I50498)
- 现在,您可以将 GraphicsLayer对象传递给placeable.placeWithLayer()函数 (I1b22f)
- ClipboardManager.setClip现在接受 null,以便能够清除剪贴板。(I7d2e9)
- 添加了资源 ID,以帮助在 build 工具中隐藏用作实现详细信息的视图 (I99531)
- 添加了 GraphicsLayer#toImageBitmapsuspend 方法,以支持将位图的内容渲染到GraphicsLayer中。这是 API 级别 22 及更高级别(含)的硬件加速渲染操作,支持超过 99% 的 Android 设备。在 Android API 级别 21 上,此功能会回退到软件渲染。(I9e114)
- 用于将 Android RectF转换为ComposeRect的辅助方法(I39925、b/325660505)
- 所有 KeyboardOptions参数现在默认都具有未指定的值。添加了KeyboardOptions.merge方法。
- 将 KeyboardOptions.autoCorrect重命名为autoCorrectEnabled,并使其可为 null,其中 null 表示未指定任何值。(Ia8ba0、b/295951492)
- BasicTextField(state)变体和- BasicSecureTextField现在使用- KeyboardActionHandler而不是- KeyboardActions来处理软件键盘执行的操作。(I58dda)
版本 1.7.0-alpha05
2024 年 3 月 20 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha05。版本 1.7.0-alpha05 中包含这些提交内容。
新功能
- 引入新的 GraphicsLayerAPI,用于在显示列表中记录绘制命令,以及影响显示列表渲染的其他属性。这提供了一个隔离边界,用于将复杂的场景划分为更小的部分,这些部分可以单独更新,而无需重新创建整个场景。对GraphicsLayer进行的转换无需重新记录显示列表。与Modifier.graphicsLayer不同,GraphicsLayer允许在其他位置渲染可组合项内容,并且在需要于不同场景中渲染内容的动画用例中非常有用。
API 变更
- GraphicsLayer.draw(Canvas)不再是公共 API。请改用- DrawScope.drawLayer(GraphicsLayer)扩展函数来绘制图层。(I7a7c0)
- 将 restrictedConstraints()拆分为两种方法:fitPrioritizingWidth()和fitPrioritizingHeight()(I6d7fd)
- 针对 Android L 用法引入了 HardwareCanvas桩(I1c3b5、b/288494724)
- 更新了 Compose 框架,以公开 GraphicsContext组合本地变量,同时更新了 Owner、DelegateableNode和drawWithCache修饰符实现,以公开对GraphicsContext的访问权限,从而实现范围限定的访问,当修饰符被拆除时,该访问权限会自动清理GraphicsLayer实例。(I64a2f、b/288494724)
- 引入了 InterceptPlatformTextInput,以帮助编写低级 IME 相关测试和其他低级 IME 使用情形。PlatformTextInputTestOverride已弃用。(I862ed、b/322680547)
- 添加了 GraphicsLayer.setOutline(Outline)扩展函数。(Ib81f4)
- 引入 GraphicsContext函数构造函数,以创建用于创建GraphicsLayer实例的工厂(Ib98d6、b/288494724)
- 公开了 GraphicsLayerAPI,以便在捕获可用于在其他位置绘制的绘制命令时提供开发者定义的灵活性,并为最终结果应用不同的视觉效果。(I80245、b/288494724)
- 引入了 Paragraph#getRangeForRect,该方法可返回给定矩形区域覆盖的文本范围。(Iee516、b/325660505)
- 移除了具有 onLinkClicked实参的BasicText的实验性替换。未来将推出用于支持超链接的替代 API。(I107d5)
bug 修复
- 添加了 GraphicsLayerexpect/actual API 定义,以支持捕获和重放绘制命令,并提供可选的合成视觉效果和转换。引入GraphicsContext接口,以包含图形依赖项,包括GraphicsLayer实例的创建和管理。(I4a8d6、b/288494724)
- 修复了 1D 焦点搜索的互操作问题,即焦点会卡在嵌入在其他视图中的 ComposeView内。(I08fd4)
外部贡献
- LocalLifecycleOwner从 Compose 界面移到了- lifecycle-runtime-compose,以便其基于 Compose 的辅助 API 可在 Compose 界面之外使用。感谢 Jake Wharton 的贡献。(I6c41b、b/328263448)
- 在所有基于偏差的对齐子类型上一致地公开偏差浮点属性。(I69f0f、b/328088992)
版本 1.7.0-alpha04
2024 年 3 月 6 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha04。版本 1.7.0-alpha04 中包含这些提交内容。
API 变更
- 在 Android U 之后的设备上,支持 BasicTextField2 的触控笔手写功能。(I002e4)
- 在此 CL 中,我们添加了 GetScrollViewportLength语义操作,以便将有关在 Compose 中滚动的组件的信息传递给无障碍功能系统。此 CL 还将上述属性的使用应用于基础可滚动列表。(Ic5fa2)
- FocusRequester.createRefs现已稳定(I4d92c、b/261436820)
- 引入了 DelegatableNode.requireView(),以便修饰符节点在不读取本地组合的情况下获取当前的 AndroidView。(I40768)
- 新增了 API Path.reverse(),用于反转路径的方向 (I36348)
- 向 KeyboardOptions添加了hintLocales,以使TextFields能够通过特定语言区域提示 IME 预设首选语言。
- 公开 Locale中的platformLocale属性,该属性会返回底层平台对象,例如java.util.Locale。(I921c6)
版本 1.7.0-alpha03
2024 年 2 月 21 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha03。版本 1.7.0-alpha03 中包含这些提交内容。
API 变更
- 推出 ContextualFlowRow和增强型FlowRow/Column,支持 MaxLines 和 Overflow。我们很高兴地宣布,实验性FlowRow和FlowColumn得到了增强,现在支持 maxLines 和 overflow,同时还推出了ContextualFlowRow和ContextualFlowColumn。此更新旨在提供性能最佳的组件,其中ContextualFlow*非常适合大量商品,这些商品使用小型maxLines配置和动态“+N”查看更多按钮;而FlowRow和FlowColumn非常适合少量商品(少于 100 件)。重要提示:如需在FlowRow或FlowColumn中保持现有行为(即无论所有商品是否符合交叉轴最大值,都进行组合),请在初始化期间将overflow设置为FlowRowOverflow.Visible或FlowColumnOverflow.Visible。如需查看这些新功能的实际应用示例,请探索ContextualFlowRowSample和FlowRowSample。(Ib9135、b/293577082)
- 添加 maxTextLength语义属性,该属性应在用于过滤允许的最大字符数的文本字段中设置。(I24d9f、b/170648072)
- Modifier.inspectable封装器已被弃用。此 API 会不必要地使修饰符失效,因此现在不建议使用。如果开发者希望向工具公开修饰符属性,建议在- ModifierNodeElement上实现- inspectableProperties()方法。(Ib3236)
- PopupProperties的新构造函数,可用于完全控制- WindowManager.LayoutParams标志。(Ibb33e、b/312485503)
- 引入了 DelegatableNode.requireLayoutCoordinates(),以便在无需替换onPlaced并自行将坐标存储在属性中的情况下获取Modifier.Node的当前LayoutCoordinates。(Ia8657)
- 引入了 DelegatableNode.currentLayoutCoordinates,以便在无需替换onPlaced并自行将坐标存储在属性中的情况下获取Modifier.Node的当前LayoutCoordinates。(Iaebaa)
- BasicTextField2和- androidx.compose.foundation.text2软件包下的相关 API 已移至- androidx.compose.foundation.text。(I9f635)
- 新增了 ApproachLayoutModifierNodeAPI,以支持在显式修饰符节点中创建自定义接近逻辑。还添加了一个新的实验性DeferredTargetAnimationAPI,用于在实例化时目标未知的情况下的动画。(I60745)
- 新增了 PathAPI,用于查询路径的方向并从Path中提取轮廓。(I63d04)
- 添加了 PathHitTest和Path.contains(Offset),用于检查Path是否包含特定点。(I3b218)
- TextLayoutResult现在公开了- getLineBaseline(lineIndex)方法。这样,除了现有的便捷属性- firstBaseline和- lastBaseline之外,还可以读取任意文本行的基准。(Ide4e8、b/237428541)
- 添加了仅比较两个 AnnotatedStrings的注释的方法。(I32659)
bug 修复
- 修复了 SemanticsPropertyReceiver.performImeAction和SemanticsActions.PerformImeAction的向后兼容性问题。(Id0528、b/322269946)
版本 1.7.0-alpha02
2024 年 2 月 7 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha02。版本 1.7.0-alpha02 中包含这些提交内容。
API 变更
- 修复了 SemanticsPropertyReceiver.performImeAction的二进制文件兼容性问题。(I65865、b/322269946)
- 接受 usePlatformDefaultWidth参数的PopupProperties构造函数不再处于实验阶段。(I8f8d2)
- 添加了 ComposeTestRule.waitUntil的重载,该重载接受要包含在超时消息中的条件字符串说明。(I9413e)
- 新的语义 API unset(),用于移除在同一修饰符链中添加的语义属性。新的语义属性isOpaque。(I8c583、b/317966058、b/246056649)
- 从 PointerInputChange的公共 API 中的复制方法中移除了originalEventPosition。(I7bead)
bug 修复
- 修复了以下无障碍功能 bug:允许在选中非标签页和非单选按钮时点击它们。(I2181c)
- VelocityTracker现在将默认修复添加积分的问题。如果出现任何问题,您仍然可以通过将- VelocityTrackerAddPointsFix设置为 false 来关闭此修复。(Ib3877、b/269487059)
- 修复了 TextStyle和ParagraphStyle中的向后二进制不兼容问题。(I179f0、b/320819734)
外部贡献
- 添加了新的 DialogProperties构造函数,该构造函数不含特定于平台的参数。(I45829)
- 添加了新的 PopupProperties构造函数,该构造函数不含特定于平台的参数。(I9a038)
版本 1.7.0-alpha01
2024 年 1 月 24 日
发布了 androidx.compose.ui:ui-*:1.7.0-alpha01。版本 1.7.0-alpha01 中包含这些提交内容。
API 变更
- 通过添加 ClipEntry和ClipMetadata扩展了ClipboardManager,以支持任意内容(例如图片)。
- 向 ui-test添加了DeviceConfigurationOverrideAPI,以允许在本地替换受测内容的行为,例如指定可用尺寸、语言区域、布局方向、字体缩放比例或主题。
版本 1.6
版本 1.6.8
2024 年 6 月 12 日
发布了 androidx.compose.ui:ui-*:1.6.8。版本 1.6.8 中包含这些提交内容。
bug 修复
- 修复了当字体缩放比例低于定义的最低表格时,字体缩放比例不一致的问题。在这种情况下,我们现在在线性 1 倍缩放比例和最低定义的表格之间进行插值,以便字体大小随着缩放比例的增加而单调递增。(Icbae3)
版本 1.6.7
2024 年 5 月 1 日
发布了 androidx.compose.ui:ui-*:1.6.7。版本 1.6.7 中包含这些提交内容。
版本 1.6.6
2024 年 4 月 17 日
发布了 androidx.compose.ui:ui-*:1.6.6。版本 1.6.6 中包含这些提交内容。
bug 修复
- 修复了罕见的 BasicTextField崩溃问题。
版本 1.6.5
2024 年 4 月 3 日
发布了 androidx.compose.ui:ui-*:1.6.5。版本 1.6.5 中包含这些提交内容。
版本 1.6.4
2024 年 3 月 20 日
发布了 androidx.compose.ui:ui-*:1.6.4。版本 1.6.4 中包含这些提交内容。
版本 1.6.3
2024 年 3 月 6 日
发布了 androidx.compose.ui:ui-*:1.6.3。版本 1.6.3 中包含这些提交内容。
版本 1.6.2
2024 年 2 月 21 日
发布了 androidx.compose.ui:ui-*:1.6.2。版本 1.6.2 中包含这些提交内容。
版本 1.6.1
2024 年 2 月 7 日
发布了 androidx.compose.ui:ui-*:1.6.1。版本 1.6.1 中包含这些提交内容。
bug 修复
- 修复了 SemanticsPropertyReceiver.performImeAction和SemanticsActions.PerformImeAction的向后兼容性问题。(Ie0bb2、b/322269946)
- 如果布局在测量时返回异常大的尺寸,现在会发出错误。如果衡量直接使用最大限制,而不检查 Constraints.Infinity,通常会发生此类错误。此检查将帮助开发者发现尺寸错误的布局中的问题,而不是包含该布局的布局中的问题。(I339a9)
版本 1.6.0
2024 年 1 月 24 日
发布了 androidx.compose.ui:ui-*:1.6.0。版本 1.6.0 中包含这些提交内容。
版本 1.6.0-rc01
2024 年 1 月 10 日
发布了 androidx.compose.ui:ui-*:1.6.0-rc01。版本 1.6.0-rc01 中包含以下提交内容。
bug 修复
- 优化了矢量图形实现,通过最大限度减少额外的重组来提高性能。
版本 1.6.0-beta03
2023 年 12 月 13 日
发布了 androidx.compose.ui:ui-*:1.6.0-beta03。版本 1.6.0-beta03 中包含这些提交内容。
新功能
- 现在,LayoutCoordinates可以在不分离节点的情况下分离。在 Compose 布局检查器 (If693) 中防范这种情况
bug 修复
- PlatformImeOptions现在是一个具体类,而不是接口。(If40a4)
- 修复了因每次根重组时 LocalSoftwareKeyboardController和LocalTextInputService都会获得新值而导致的额外下游重组。(I42190、b/310510985)
版本 1.6.0-beta02
2023 年 11 月 29 日
发布了 androidx.compose.ui:ui-*:1.6.0-beta02。版本 1.6.0-beta02 中包含这些提交内容。
版本 1.6.0-beta01
2023 年 11 月 15 日
发布了 androidx.compose.ui:ui-*:1.6.0-beta01。版本 1.6.0-beta01 中包含这些提交内容。
API 变更
- DragAndDropTarget修饰符现在显式接收- DragAndDropTarget,并具有一个用于选择加入拖放会话的 lambda。现在,- DragAndDropModifierNode有两个工厂函数。一个用于接收转移,一个用于转移数据 (I69481)
- 已将 maximumFlingVelocity更新为以 Float 表示。更新了文档,以便更清楚地说明maximumFlingVelocityunity。(I8adc7)
- DragAndDropModifierNode工厂中的- onDragAndDropStart已重命名为- acceptDragAndDropTransfer。已将- acceptsDragAndDropTransfer添加到- dragAndDropTarget修饰符,以接受来自拖放会话的内容。如果对拖放会话感兴趣,此 lambda 会返回可行的- DragAndDropTarget。用于处理拖动事件的其他 lambda 已被此 lambda 取代。添加了- DragAndDropTarget工厂函数以接收来自拖放会话的数据 (Iebf3a)
- 移除了 - DragAndDropInfo作为类型- DragAndDropModifierNode.drag现在接受- transferData、装饰大小和拖动装饰- DrawScopelambda 的参数- DragAndDropTarget具有用于特定拖放事件的方法,而不是单个抽象方法- DragAndDropModifierNode的工厂函数中的- onDragAndDropEvent已重命名为- onDragAndDropStart,以便更好地传达所提供的- DragAndDropTarget仅在给定的拖放会话中有效- 已移除 - DragAndDropEventType(I645b1)
- 已将 - PlatformTextInputModifierNode.runTextInputSession重命名为- establishTextInputSession。(I03cd0)
- 改进了可遍历节点 API 名称,使其更易于理解。(Ia4474) 
- 将 - OriginalText替换为- TextSubstitution。(Ifa5a8)
- PlatformTextInputModifierNode.textInputSession已重命名为- runTextInputSession。(Ie9c6b)
- 保留下来以便日后重复使用的 - SubcomposeLayout的子项(以及基于- SubcomposeLayout的布局,例如- LazyColumn)被视为已停用。引入了新的- assertIsDeactivated()测试 API 来测试此类节点。其余测试 API 将默认过滤掉已停用的节点。(I2ef84、b/187188981)
- 移除了 - FocusDirection.In和- FocusDirection.Out,请改用- FocusDirection.Enter和- FocusDirection.Exit(I2f660)
- Material - SwipeToRevealAPI(适用于卡片和 Chip)现在依赖于基于 slot 的 API(如 Compose 所建议的那样),而不是基于数据类的实例来创建这些 slot。这是一项重大变更,请参阅演示和示例代码,了解如何使用新 API。(Ia8943)
- FontStyle(int)构造函数已弃用,请改用- FontStyle.Normal或- FontStyle.Italic。(I66610)
- 将 - FontScalable接口重命名为- FontScaling(Ie804a)
bug 修复
- 如果没有任何文本编辑器获得焦点,SoftwareKeyboardController.show()将不再显示软件键盘。(I2165a、b/301477279)
- 现在,对于在同一 Compose 视图中未收到 Down 事件的按键,硬件按键 Up 事件将被忽略。(Ib37b4、b/305518328)
- 在 ArcLine中添加了对扫描渐变的渲染器支持。(I4d5bb)
- 为 PageSize.Fixed实现了等号和哈希代码。(Ie3ede、b/300134276)
- 修复了与窗口边衬区更改相关的二进制文件兼容性问题 (Iee695)
- 移除了 Material3 Chip/Button 的 Material 核心层,因为微基准测试表明,在没有该层的情况下,性能更好。(I55555)
- 作为 effectContext传递给 Compose 测试的TestDispatcher现在将用于创建测试和帧时钟。(Ia7178)
版本 1.6.0-alpha08
2023 年 10 月 18 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha08。版本 1.6.0-alpha08 中包含这些提交内容。
API 变更
- Modifier.dragAndDrawSource已将- onDrawDragShadowlambda 重命名为- drawDragDecoration,并且- DragAndDropInfo已将 size 参数重命名为- dragDecorationSize。(Id0e30、b/303904810)
- 引入 SemanticsNodeInteraction.isDisplayed()和SemanticsNodeInteraction.isNotDisplayed(),以检查匹配的节点是否可见,而无需对其进行断言。(I2c196、b/302100809)
- 为 ParagraphTextStyle的TextAlign、TextDirection、Hyphens和LineBreak字段引入了特殊的Unspecified值,以替换null。由于这些类是内联类,因此通过将可为 null 的类型替换为 Unspecified,我们可以避免对原始类型进行装箱。更新了TextStyle和段落样式中的构造函数、getter 和其他方法,以接受上述参数作为非 null 类型。(I4197e、b/299490814)
- 添加了用于从 XML 读取 GoogleFont的GoogleFont重载。(If8f59)
- 将 LoremIpsumPreviewParameterProvider设为开放类。(I41bf5、b/266918816、b/300116360)
bug 修复
- FontFamilyResolver现在使用- Dispatchers.Main来管理缓存协程。(Ie8dd9)
- AndroidViewBinding现在会通过使用- commitNow(而不是之前使用的- commit)同步移除通过在布局中包含- FragmentContainerView作为其- onRelease的一部分而扩充的- Fragment实例,从而修复了 Live Edit 的方法在发生更改时替换合成的问题。(I58fbf)
版本 1.6.0-alpha07
2023 年 10 月 4 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha07。版本 1.6.0-alpha07 中包含这些提交内容。
API 变更
- 引入了 PlatformTextInputMethodTestOverride,用于为自定义文本编辑器编写测试。(Id159b)
- 添加了 dragAndDropSource修饰符,用于启动拖放会话;添加了dragAndDropTarget修饰符,用于接收拖放会话中的数据。(Ib7828、b/286038936)
- 添加了可避免分配的 ColorList和ColorSet集合。(I744bd)
- 添加了 DisableNonLinearFontScalingInCompose临时标志,用于停用非线性字体缩放。如果您需要时间来清理测试,请在测试中设置DisableNonLinearFontScalingInCompose = true。此标志将在 Compose 1.6.0-beta01 中移除。(Ic9486)
bug 修复
- 优化了 XML 矢量可绘制对象解析。(Ibb015)
版本 1.6.0-alpha06
2023 年 9 月 20 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha06。版本 1.6.0-alpha06 中包含这些提交内容。
API 变更
- 对 Material 图标进行了其他优化。(I3e08d)
- 添加了向上/向下遍历修饰符树以查找相似节点的功能。(I2d234)
- 向 focusRestorer()修饰符添加了onRestoreFailed()回调 (Ie1d43)
- 为各种图形 API 添加了 androidx 注释,以指定 ColorInt、FloatRange、IntRange、Size等。(Id65c8、b/290950582)
- 向 PreviewScreenSizes定义添加了showSystemUi=true(Ib61d3)
行为变更
- Compose 现在使用非线性字体缩放,以提高可读性和无障碍功能。如果系统设置中的字体缩放比例大于 100%,小字号文本会正常增大,但原本就大的字号文本只会略微增大。此外,以 SP 为单位定义的行高会自动调整,以保持与 100% 缩放比例下的预期高度成比例。如需了解详情,请参阅字体缩放最佳实践。(I11518)
版本 1.6.0-alpha05
2023 年 9 月 6 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha05。版本 1.6.0-alpha05 中包含这些提交内容。
API 变更
- 在 AndroidComposeViewAccessibilityDelegateCompat中启用内容捕获。(Ib2969)
- 在 ScrollView和RecyclerView等 View 组件中,fling 速度上限为ViewConfiguration.ScaledMaximumFlingVelocity。Compose 现在包含自己的maximumFlingVelocity版本,该版本现在适用于Draggable。(Ibf974)
- 添加了初始框架,以支持平台拖放 API。(If84ce)
- 将 deviceId添加到了RotaryScrollEvent中 (Iba3bf)
- 更新了 ui-toolingDevices API,以纳入更新的设备 (Ib25b4)
版本 1.6.0-alpha04
2023 年 8 月 23 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha04。版本 1.6.0-alpha04 中包含这些提交内容。
API 变更
- 添加了用于停用 ReusableComposition的方法,该方法会移除观测对象,但会保留节点。可通过调用setContent再次激活已停用的组合。(Ib7f31)
- 添加了 ReusableComposition接口,用于管理子组合的生命周期和重复使用。(I812d1、b/252846775)
- Modifier.focusGroup已升级为稳定版 API。(I7ffa3)
- 为各种图形 API 添加了 androidx 注释,以指定 ColorInt、FloatRange、IntRange、Size等。(I70487、b/290950582)
- 更新了 ColorFilterAPI,使其具有具体的子类类型,以提高参数的可检查性。(I5fe29)
- 引入 wear-tooling-preview 库,以列出可用于界面预览的有效 Wear 设备 (Ib036e)
- 创建了 FontScalable接口来处理密度接口的字体缩放部分。(I2cf3f)
版本 1.6.0-alpha03
2023 年 8 月 9 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha03。版本 1.6.0-alpha03 中包含这些提交内容。
API 变更
- 一种新的进入/退出过渡效果,可在进入和退出动画期间根据动画容器的大小缩放内容。LookaheadScope可组合函数和接口现已稳定。(Ifb2ce)
- 添加了对配置 privateImeOptions的支持 (Idb772)
bug 修复
- 现在,当计算中读取的状态发生变化时,PopupPositionProvider.calculatePosition会自动更新弹出式窗口的位置。(I676a1、b/292257547)
- 修复了当 readOnly为 true 时文本字段显示键盘且可编辑的问题。还修复了以下问题:当焦点位于readOnly上时,如果将readOnly从 true 更改为 false,键盘不会显示。(I34a19、b/246909589)
- 在界面测试中更广泛地应用全局断言。(I1f90d)
版本 1.6.0-alpha02
2023 年 7 月 26 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha02。版本 1.6.0-alpha02 中包含这些提交内容。
API 变更
- 添加了一个服务定位器接口,该接口可由 Composition 的实现者实现,从而允许 Composition 的实现将对另一个组合委托服务的查找委托给原始 Composition。此方法不应直接调用,用于在运行时创建实验性 API,这些 API 可从封装版本的 Composer(例如界面模块)中找到。(I296b9)
- 完全重新设计了 PlatformTextInput*API。(I6c93a、b/274661182、b/267235947、b/277380808)
- SoftwareKeyboardController和- LocalSoftwareKeyboardController不再是实验性功能。- LocalSoftwareKeyboardController现在也是一个合适的- CompositionLocal。(I4c364)
- LookaheadLayout和- LookaheadLayoutScope已废弃几个版本,现已移除。替代 API 是- LookaheadScope,可与任何布局搭配使用。(I12ac3)
- 添加了 SemanticsNodeInteraction.requestFocus,以便更方便地在测试中请求焦点,并更容易发现。(Ie8722)
- 添加了用于注册全局断言的实验性 API,供未来的测试框架使用。(I12d77)
bug 修复
- AndroidView的- update回调的首次调用现在将延迟到视图附加时,而不是在应用引入- AndroidView的组合时运行。此修复修复了一个 bug,即如果效果立即更改了- update回调读取的状态,该回调不会失效。(Ie9438、b/291094055)
版本 1.6.0-alpha01
2023 年 6 月 21 日
发布了 androidx.compose.ui:ui-*:1.6.0-alpha01。版本 1.6.0-alpha01 中包含这些提交内容。
新功能
- 支持 LazyList中的预读。这样一来,先行传递中的LazyList就可以绕过任何动画(例如,商品放置动画、AnimatedVisibility等),并计算所有子级的先行尺寸和位置。在预先查看传递之后,LazyList的子级可以独立地动画化为预先查看传递中看到的现实。
行为变更:在 Compose 中,includeFontPadding 现在默认设为 false
在 Compose 中,includeFontPadding 现在默认设置为 false (21d806)。
includeFontPadding 是一个旧版属性,用于控制是否在文字的第一行和最后一行上方添加额外的内边距,以容纳可能延伸到文字基线上方或下方的任何字符。
更新此 Compose 版本后,系统会移除您显示的所有文本的首行和末行顶部的额外内边距,从而修改界面中所有文本的呈现方式。
根据您的界面要求和所使用的字体指标,这些更改应尽可能少。不过,您可能会遇到以下阻碍因素: - 屏幕截图测试失败。根据需要修复界面,然后重新生成标准图片。 - 文字略有错位。移除所有自定义负边衬区,或根据需要添加边衬区。
您可以使用以下代码为每段文字选择启用 includeFontPadding:PlatformTextStyle
Text(
 text = myText,
 style = TextStyle(
   lineHeight = 2.5.em,
   platformStyle = PlatformTextStyle(
     includeFontPadding = true/false
   )
   /* … */
  )
)
您可以通过配置 Material 样式,选择为所有文本启用 includeFontPadding。请注意,M2 和 M3 的参数名称会有所不同。
val Typography = Typography(
   body1 = TextStyle(
       fontFamily =    /* … */,
       fontSize =    /* … */,
       platformStyle = PlatformTextStyle(
           includeFontPadding = false
       )
   /* … */
   )
)
MaterialTheme(
   typography = Typography,
   /* … */
)
如需详细了解 Compose includeFontPadding,请参阅开发者文档和这篇博文。
如果您遇到与此变更相关的问题/bug,请使用问题跟踪器提交 bug。
API 变更
- 支持 InputConnection#requestCursorUpdates(I0c69b)
- 添加了 FocusRequester.saveFocusedChild和FocusRequester.restoreFocusedChild(Ic557e、b/272302679、b/275157318)
- 添加 ResourceResolutionException类型,以封装尝试加载位图资源时抛出的可抛出对象,并提供加载失败的资源路径说明。(I19f44、b/230166331、b/278424788)
- 针对性能和内存分配优化了无障碍功能。(Iede48)
- 添加了语义属性和操作,以支持文本翻译。(I4a6bc)
- IntrinsincMeasureScope中的新属性及其实现(例如- MeasureScope),用于指示当前测量传递是否为预先查看传递。(I7a812)
- 更新了 DrawScopeAPI,以引入将渲染重新定位到具有替代密度/布局方向和大小的不同画布的功能。
- 更新了 DrawContext,以支持配置密度和布局方向,并使画布可配置。(Ie1f9b、b/225408150)
- 添加了 Paragraph#fillBoundingBoxes以计算字符边界框。(If30ee)
- 添加了一组常见的 MultiPreviews(Ia5a27)
bug 修复
- 添加了 FocusTargetModifierNode接口,可用于创建自定义FocusTarget。(I9790e)
- 将 TextMeasurer构造函数中的fallback*参数重命名为default*。(I940a5)
- 将 SemanticsPropertyReceiver.performImeAction重命名为onImeAction,将SemanticsActions.PerformImeAction重命名为OnImeAction。(I8e841)
- 添加了 Wheel,以区分嵌套滚动(特别是 NestedScrollConnection中)的鼠标滚动和拖动。(Ie57e4)
- 添加了 asComposePaintAPI 以取代toComposePaint,因为返回的对象封装了原始android.graphics.Paint(I22b4c)
- 弃用了 SemanticsProperties.imeAction并将其替换为SemanticsActions.performImeAction的新参数。(I4a587)
- 添加了对使用鼠标进行选择的支持。基于触控的选择功能会按字词扩大选择范围,并按字符缩小选择范围。(Ic0c6c、b/180639271)
- 之前会针对超出范围的偏移量抛出 AssertionError的Paragraph方法现在会像MultiParagraph一样抛出IllegalArgumentException。(I549d3、b/243338896)
版本 1.5
版本 1.5.4
2023 年 10 月 18 日
发布了 androidx.compose.ui:ui-*:1.5.4。版本 1.5.4 中包含这些提交内容。
版本 1.5.3
2023 年 10 月 4 日
发布了 androidx.compose.ui:ui-*:1.5.3。版本 1.5.3 中包含这些提交内容。
bug 修复
- (b/301209788) TextField有时会在聚焦并输入韩语输入内容时错误地应用之前的命令,导致字符丢失。
版本 1.5.2
2023 年 9 月 27 日
发布了 androidx.compose.ui:ui-*:1.5.2。版本 1.5.2 中包含这些提交内容。
bug 修复
- 添加了在从后台线程访问无障碍功能滚动 API 时发生崩溃的解决方法。
- 修复了将未附加的节点添加到语义树的问题。
版本 1.5.1
2023 年 9 月 6 日
发布了 androidx.compose.ui:ui-*:1.5.1。版本 1.5.1 中包含这些提交内容。
bug 修复
- 修复了当 readOnly为 true 时文本字段显示键盘且可编辑的问题。还修复了以下问题:当焦点位于readOnly上时,如果将readOnly从 true 更改为 false,键盘不会显示。(I34a19、b/246909589)
版本 1.5.0
2023 年 8 月 9 日
发布了 androidx.compose.ui:ui-*:1.5.0。版本 1.5.0 中包含这些提交内容。
版本 1.5.0-rc01
2023 年 7 月 26 日
发布了 androidx.compose.ui:ui-*:1.5.0-rc01。版本 1.5.0-rc01 中包含这些提交内容。
bug 修复
- 修复了在 movableContentOf()内使用SubcomposeLayout时发生的崩溃问题。
版本 1.5.0-beta03
2023 年 6 月 28 日
发布了 androidx.compose.ui:ui-*:1.5.0-beta03。版本 1.5.0-beta03 中包含这些提交内容。
bug 修复
- 添加了 FocusTargetModifierNode 接口,可用于创建自定义 FocusTarget。(Ifb1d6)
- 修复了 Dialog 和 Popup 可组合项存在的问题,该问题可能会导致子窗口在 usePlatformDefaultWidth=true时无法按预期调整大小。(I112ee)
版本 1.5.0-beta02
2023 年 6 月 7 日
发布了 androidx.compose.ui:ui-*:1.5.0-beta02。版本 1.5.0-beta02 中包含这些提交内容。
API 变更
- 添加了 asComposePaintAPI,以支持在 Compose 中使用android.graphics.Paint实例
bug 修复
- 添加了 asComposePaintAPI 以取代toComposePaint,因为返回的对象封装了原始android.graphics.Paint(I22b4c)
版本 1.5.0-beta01
2023 年 5 月 24 日
发布了 androidx.compose.ui:ui-*:1.5.0-beta01。版本 1.5.0-beta01 中包含这些提交内容。
API 变更
- 移除了重组、颜色动画和 AndroidComposeView中的分配 (Ib2bfa)
- 添加了辅助函数 CacheDrawModifierNode()以允许委托 (Icf8f9)
- 引入了可从 MeasureScope访问的isLookingAhead属性,用于观察预读结果并在需要时影响主通道。(Ibf4c3)
- 新的语义属性 traversalIndex,一个用于在TalkBack遍历中重新排序节点的浮点数(值越小,节点越靠前)。(I9a81b、b/186443263)
- 将语义属性 isContainer重命名为isTraversalGroup(I121f6)
- ColorProducer现在具有- operator fun invoke而不是- produce(I4a9a2)
- 添加了 Path转换 API,以对路径对象应用平移/缩放/旋转转换。(I23434、b/233772232)
- ColorProducer的方法称为- produce。(I78bde)
- 将 toFrameworkColorSpace重命名为toAndroidColorSpace(I4f547)
- 已将 ColorLambda重命名为ColorProducer。(I73b1a)
- 引入了用于在 Android 和 Compose 颜色空间类型之间进行转换的 API。(Ie7db4、b/279979665)
- 向 BasicText添加了颜色参数,以支持高效地设置文本颜色或为文本颜色添加动画效果。(Iffd88、b/246961787)
- TextRange.constrain已重命名为- TextRange.coerceIn。(I31be2)
- 添加了经过优化的 TextStyle.merge(...),其中包含完整的参数列表。(Iad234、b/246961787)
- 稳定了许多文本 API,包括 Brush、DrawStyle、TextMotion、DrawScope.drawText、Paragraph.paint(Brush)、MultiParagraph.paint(Brush)。(I2f740、b/261581564、b/261581931、b/261561245)
- PlatformTextStyle.includeFontPadding已取消弃用。我们最初的意图是移除该字段,但反馈表明开发者需要此配置选项。因此,移除了相应字段的弃用标记(I98e96、b/277703184)
- 添加了公开的 TextRange.constrain方法。(I97912)
- 现在,可以通过 TalkBack等无障碍服务打开AnnotatedString中的UrlAnnotation。(If4d82、b/253292081)
- 为文本字段添加了 InsertTextAtCursor语义操作。(I11ed5)
- LineHeightStyle.Alignment(topRatio)构造函数已提升为稳定版 API。(I79c32、b/261565383)
- TextMeasurer和相关 API 不再处于实验阶段。(I74647、b/261581753)
- 添加了 PerformImeAction语义操作,用于在文本编辑器节点上调用 IME 操作。(Ic606f、b/269633506)
- PlatformTextInputAPI 不再处于 Android 实验阶段。(I668eb)
- 更改了 Enum.valueOf的值形参名称 (Ia9b89)
- enum valueOf 抛出的更多异常 (I818fe)
- 引入了新的低级别 PlatformTextInputAdapterAPI,用于构建直接与平台 API 通信的自定义文本输入实现。(I58df4)
- 向 DrawScope.drawText、Paragraph.paint和MultiParagraph.paint方法添加了BlendMode参数,以支持在画布上绘制文本时的不同混合算法。(I57508)
- 已将 Font.MaximumAsyncTimeout重命名为Font.MaximumAsyncTimeoutMillis。仅重命名。(I07af5)
- 更新了 @Preview参考设备的 DPI 值(Id6151、b/254528382)
- 向 BasicText添加了brush、alpha参数,以实现高效的文本画笔动画或设置。
- 在 :ui:ui-unit 中为 Float、Double、Long、Int、Short 定义了无装箱 lambda 类型 (I6f18d, b/246961787)
bug 修复
- 移除了指针速度跟踪中的多次分配 (I26bae)
- 减少了布局和指针输入管理中的内存分配 (I5333a)
- 优化了矢量内存用量和首帧渲染 (I2f3c6)
- 移除了使用 Canvas 绘制线条和点时的分配 (I9f535)
- 添加了有关 AndroidFont.fontVariationSettings的文档 (I7d9e2)
外部贡献
- 改进了 Vector API 中的性能并减少了分配 (I906cb)
版本 1.5.0-alpha04
2023 年 5 月 10 日
发布了 androidx.compose.ui:ui-*:1.5.0-alpha04。版本 1.5.0-alpha04 中包含这些提交内容。
新功能
- Modifier.Node改进了委托功能 增强了从- DelegatingNode委托给其他- Modifier.Node实例的功能。您可以使用- delegate和- undelegateAPI 来完成此操作。在此变更之前,委托节点中的每个 API 都需要明确委托给被委托节点。此更改生效后,除非- DelegatingNode明确替换节点接口,否则节点接口将隐式委托。(67352bc)
API 变更
- 引入了 NestedScrollModifierNode,一种可以委托的NestedScroll Modifier.Node。(I69513)
- 为 AndroidViewBinding可组合项添加了onReset和onRelease形参,与AndroidView可组合项保持一致,并支持通过ViewBinding重用 View。(I00b1e、b/276802519)
- 更新了 Compose Path API,以支持回放操作,从而支持频繁进行路径操作并更快地重复使用路径的用例。(I7b797)
- 添加了经过优化的 TextStyle.merge(...),其中包含完整的参数列表。(Iad234、b/246961787)
- 稳定了许多文本 API,包括 Brush、DrawStyle、TextMotion、DrawScope.drawText、Paragraph.paint(Brush)、MultiParagraph.paint(Brush)。(I2f740、b/261581564、b/261581931、b/261561245)
- PlatformTextStyle.includeFontPadding已取消弃用。我们最初的意图是移除该字段,但反馈表明开发者需要此配置选项。因此,移除了相应字段的弃用标记(I98e96、b/277703184)
bug 修复
- 修复了以下回归问题:对于并非由 Dialog可组合项创建的对话框中的文本字段,键盘不会显示。(I82551、b/262140644)
版本 1.5.0-alpha03
2023 年 4 月 19 日
发布了 androidx.compose.ui:ui-*:1.5.0-alpha03。版本 1.5.0-alpha03 中包含这些提交内容。
新功能
- LookaheadScope中- SubcomposeLayout的新默认行为:不含条件 slot(例如- TabRow、- Scaffold、- BoxWithConstraints等)的- SubcomposeLayouts现在可以与预读动画完美搭配。
API 变更
- 新的默认 intermediateMeasurePolicy可重用来自预先查看传递的衡量政策,从而允许没有条件 slot 的SubcomposeLayout子类型(例如Scaffold、TabRow和BoxWithConstraints)默认与预先查看搭配使用。(Id84c8)
- 现在,当为 Android 窗口创建的重组器收到 ON_STOP通知时,只会阻止对withFrameNanos的调用,而不是阻止所有组合。这意味着,与已停止的 activity 关联的窗口将继续因数据更改而重新组合,但动画或withFrameNanos的任何其他调用方都会被阻塞。(Id9e7f、b/240975572)
- 将 motionEventSpy更改为稳定版。(Ic5ec4、b/261560988)
- 添加了公开的 TextRange.constrain方法。(I97912)
- PlatformTextStyle.includeFontPadding不再被弃用,以鼓励开发者使用此兼容性 API 来切换并测试将设置- includeFontPadding设为 false。(I98e96、b/277703184)
版本 1.5.0-alpha02
2023 年 4 月 5 日
发布了 androidx.compose.ui:ui-*:1.5.0-alpha02。版本 1.5.0-alpha02 中包含这些提交内容。
API 变更
- 新的 SubcomposeLayoutAPI,可采用额外的中间测量政策来处理基于预读的动画期间的测量/布局逻辑。(I017d3)
- PointerInput 现在是延迟的,并使用 Modifier.Node 来提高性能(了解行为的细微变化)。(15dab9)
- 将实验性 API 更改为稳定版,并添加了关键事件。(I9c7d8、b/261566839、b/261567368)
- 在 PointerInputChange中将实验性 API 更改为稳定版。(I1b543、b/261560988、b/261565762、b/261565749)
- 添加了一种实例化 SuspendingPointerInputModifierNode的方法,以实现更复杂的Modifier.Node实现。(Ic4933)
- 现在,可以通过 TalkBack等无障碍服务打开AnnotatedString中的UrlAnnotation。(If4d82、b/253292081)
- 添加了一个 API,用于在硬件键发送到软键盘之前对其进行拦截(I4f4c6、b/186800395)
- 为文本字段添加了 InsertTextAtCursor语义操作。(I11ed5)
- 与文本相关的测试操作(例如 performTextInput)现在将直接使用语义操作请求焦点,而不是点击字段。(I6ed05)
bug 修复
- 文本测试操作现在要求启用文本字段。(Iab328)
版本 1.5.0-alpha01
2023 年 3 月 22 日
发布了 androidx.compose.ui:ui-*:1.5.0-alpha01。版本 1.5.0-alpha01 中包含这些提交内容。
API 变更
- Modifier.intermediateLayout 现在不需要显式的 LookaheadScope。intermediateLayout 中的 measure 块以 IntermediateMeasureScope 作为接收器,可提供便捷的 CoroutineScope、LookaheadScope 和 MeasureScope。(Ibe2e5)
- LookaheadLayout 已被 LookaheadScope 取代,后者不再是布局。这样,LookaheadScope 中的子内容就可以直接由父级的 MeasurePolicy 控制。(Ibe2e5)
- 添加了 Modifier.Node#coroutineScope,以允许 Modifier.Nodes 启动协程。(I76ef9)
- 通过实现 CompositionLocalConsumerModifierNode 接口,允许 Modifier.Nodes 读取 CompositionLocals。(Ib44df)
- 将 @Deprecated 类传播到属性。(I882d1)
版本 1.4
版本 1.4.3
2023 年 5 月 3 日
发布了 androidx.compose.ui:ui-*:1.4.3。版本 1.4.3 中包含这些提交内容。
bug 修复
- 修复了 AndroidView与某些修饰符搭配使用时可能无法正确布局的问题。(I4dc77、b/274797771)
- 修复了影响 DropDown菜单的 2D 焦点搜索中的 bug (b/276811828)
- 修复了自定义焦点进入/退出属性中的一个 bug,该 bug 导致仅在首次调用 lambda 时运行进入/退出块 (b/277234245)
- 修复了焦点系统中的回归问题,该问题会导致在读取 focusProperties时发生崩溃。(b/271324781、b/274897776)
版本 1.4.2
2023 年 4 月 19 日
发布了 androidx.compose.ui:ui-*:1.4.2。版本 1.4.2 中包含这些提交内容。
bug 修复
- 修复了 AndroidView无法正确重复使用其修饰符的问题,该问题可能会导致意外行为和崩溃。(Ib67ee、b/275919849)
- 修复了以下回归问题:对于并非由 Dialog可组合项创建的对话框内的文本字段,键盘不会显示(I82551、b/262140644)
版本 1.4.1
2023 年 4 月 5 日
发布了 androidx.compose.ui:ui-*:1.4.1。版本 1.4.1 中包含这些提交内容。
bug 修复
- 修复了 ParentDataModifier不影响AndroidView的问题 (b/274797771)
版本 1.4.0
2023 年 3 月 22 日
发布了 androidx.compose.ui:ui-*:1.4.0。版本 1.4.0 中包含这些提交内容。
自 1.3.0 以来的重要变更
- 添加了新的 PinnableContainerAPI 以允许固定延迟列表项,这样它们在滚出边界时不会被处置。例如,Modifier.focusable()使用此机制来固定当前聚焦的项。(Ib8881、b/259274257、b/195049010)
- 使用新的实验性 Modifier.NodeAPI 重写了聚焦系统。(I7F4D7、b/247708726、b/255352203、b/253043481、b/247716483、b/254529934、b/251840112、b/251859987、b/257141589)
- 在 Surface 上添加了 IsContainer语义属性。此属性将在稍后的更改中使用,它会根据 Surface 等元素的语义含义确定遍历顺序。(I63379)
- 新增了无障碍功能角色 DropdownList。这可用于在聚焦android.widget.Spinner时复制TalkBack的行为。(I177e5、b/236159001)
- 现在,您可通过使用 PlatformTextStyle(emojiSupportMatch)酌情为单个段落停用表情符号支持处理。(Ia7100、b/139326806)
- 现在,Android Compose 界面测试将在执行进入空闲状态的帧时(例如通过 waitForIdle)运行每一帧的布局传递。这可能会影响对各个布局动画帧进行的测试。(I8ea08、b/222093277)
- 向 TextStyle添加了实验性TextMotion,以将 Text 定义为Static(default)或 Animated。如果要通过动画缩放、平移或旋转文本,请使用TextMotion.Animated。(I24dd7)
版本 1.4.0-rc01
2023 年 3 月 8 日
发布了 androidx.compose.ui:ui-*:1.4.0-rc01。版本 1.4.0-rc01 中包含这些提交内容。
API 变更
- 添加了 AndroidView可组合函数的过载,该过载接受onReset实参。它允许在组合中的节点被舍弃并以兼容的方式重复使用时,重复使用 View 实例。这对于视图的LazyRows和LazyColumns尤其有用。(I3f10d、b/230099236)
- 引入了新的低级别 PlatformTextInputAdapterAPI,用于构建直接与平台 API 通信的自定义文本输入实现。(I58df4)
bug 修复
- BasicTextField的- SetText语义操作现在将使用与 IME 更新和测试函数(例如- performTextReplacement)相同的代码路径来更新文本缓冲区。
- 文本测试函数 performTextClearance、performTextReplacement和performTextSelection现在使用SemanticsActions。(I0807d、b/269633168、b/269624358)
版本 1.4.0-beta02
2023 年 2 月 22 日
发布了 androidx.compose.ui:ui-*:1.4.0-beta02。版本 1.4.0-beta02 中包含这些提交内容。
API 变更
- 移除了 modifierElementOf()API。请改为直接从ModifierNodeElement扩展。(I2256b)
- 添加了新的 Modifier.Node.onReset()回调,可让您重置一些本地状态,以便在重复使用Layout时正确处理相应情况(例如,作为LazyColumn的项)。修复了FocusTargetModifierNode以正确重置聚焦状态。(I65495、b/265201972)
- 向 DrawScope.drawText、Paragraph.paint和MultiParagraph.paint方法添加了BlendMode参数,以支持在画布上绘制文本时的不同混合算法。(I57508)
bug 修复
- 改进了无障碍功能焦点顺序算法,例如,顶部/底部栏的读/写频率都会提高 (74e9c5)
版本 1.4.0-beta01
2023 年 2 月 8 日
发布了 androidx.compose.ui:ui-*:1.4.0-beta01。版本 1.4.0-beta01 中包含这些提交内容。
API 变更
- PinnableContainer.PinnedHandle.unpin()已重命名为- release()(I4667a)
- 向 ComposeTestRule添加了waitUntilNodeCount、waitUntilAtLeastOneExists、waitUntilExactlyOneExists和waitUntilDoesNotExist作为实验性 API,从而扩展waitUntilAPI 以接受任何匹配器和任意数量的节点。如需查看更多文档,请参阅ComposeTestRule。(Ifa1b9、b/226934294)
- 已将 Font.MaximumAsyncTimeout重命名为Font.MaximumAsyncTimeoutMillis。(I07af5)
- 移除了 GoogleFont.Provider.AllFontsListUri,改为在 ktdoc 中进行关联。(I16f29)
bug 修复
- 添加了有关 AndroidFont.fontVariationSettings的文档 (I7d9e2)
版本 1.4.0-alpha05
2023 年 1 月 25 日
发布了 androidx.compose.ui:ui-*:1.4.0-alpha05。版本 1.4.0-alpha05 中包含这些提交内容。
API 变更
- 为接受 CoroutineContext参数的runComposeUiTest函数和create*ComposeRule函数引入了新的实验性过载。上下文将用于测试组合以及其中的LaunchedEffect和rememberCoroutineScope()调用。(I10614、b/265177763)
- 添加了用于跟踪一维速度的新 API (If5a82)
- FocusRequester现在标记为- @Stable。(I580ee)
- 从接受 usePlatformDefaultWidth参数的DialogProperties构造函数中移除了一个实验性注解。(Ic4048)
- 在路径上一定距离的计算位置和切线上新增了函数 - 使用 PathMeasure.getPosition()和PathMeasure.getTangent()(I3b47c)
- 移除了 PlatformParagraphStyle上意外公开的公开 setter。(I07f47)
- 内联/已废弃的隐藏函数的更多类型/可为 null 性 (I24f91)
- 添加了 AnnotatedString.hasStringAnnotations以查询没有分配资源的注解。(I94dfe、b/246960758)
- 添加了适用于 TextMeasurer.measure函数的新过载,它接受String作为文本。(I47b2d、b/242705342)
- TextStyle 中的 LineBreak和HyphensAPI 已升级为稳定版。(Ic1e1d)
外部贡献
- TextInputSession和- TextInputService中的- notifyFocusedRect方法不会再次废弃。(I23a04、b/262648050)
版本 1.4.0-alpha04
2023 年 1 月 11 日
发布了 androidx.compose.ui:ui-*:1.4.0-alpha04。版本 1.4.0-alpha04 中包含这些提交内容。
新功能
- 添加了新的 PinnableContainerAPI 以允许固定延迟列表项,这样它们在滚出边界时不会被处置。例如,Modifier.focusable()使用此机制来固定当前聚焦的项。(Ib8881、b/259274257、b/195049010)
- 使用新的实验性 Modifier.NodeAPI 重写了聚焦系统。(I7F4D7、b/247708726、b/255352203、b/253043481、b/247716483、b/254529934、b/251840112、b/251859987、b/257141589)
- 在 Surface 上添加了 IsContainer语义属性。此属性将在稍后的更改中使用,它会根据 Surface 等元素的语义含义确定遍历顺序。(I63379)
- 新增了无障碍功能角色 DropdownList。这可用于在聚焦android.widget.Spinner时复制TalkBack's行为。(I177e5、b/236159001)
- 现在,您可通过使用 PlatformTextStyle(emojiSupportMatch)酌情为单个段落停用表情符号支持处理。(Ia7100、b/139326806)
- 现在,Android Compose 界面测试将在执行进入空闲状态的帧时(例如通过 waitForIdle)运行每一帧的布局传递。这可能会影响对各个布局动画帧进行的测试。(I8ea08、b/222093277)
- 向 TextStyle添加了实验性TextMotion,以将 Text 定义为Static(default)或 Animated。如果要通过动画缩放、平移或旋转文本,请使用TextMotion.Animated。(I24dd7)
API 变更
- 将 drawText中的maxSize: IntSize参数替换为size: Size,以便内嵌于其他DrawScope函数。size默认设为Size.Unspecified,这应该不会更改之前的默认行为。(Icd27d)
- 移除了已废弃的实验性字体构造函数。(I8a724、b/261435386)
- 界面工具数据类 Group现在具有isInline字段,可指明群组是否用于调用内嵌可组合函数。如果isInline是true,则会调用内嵌可组合函数。不过,如果调用对象是来自模块的内嵌可组合函数,而且相应模块是由不会生成内嵌函数信息的 Compose 编译器插件版本编译的,则该值可能是 false。(Idb846)
- 将之前的一些实验性 API 升级到了稳定版
- Rotary Scroll Event API 现已稳定(I42ad3、b/261561229)
- FontVariationAPI 现已稳定(I8779f、b/241016309)
- 所有 Font()构造函数现在都是稳定版 API(I5948b、b/261435386)
- DeviceFontFamilyName现已稳定(I8b640、b/261435386)
- 包含 variationSettings的AndroidFont构造函数现在是稳定版 API,可用于创建新型字体描述符。(I5adcc、b/261565807)
- createFontFamilyResolverAPI 现已稳定。这可用于捕获异步字体加载期间未捕获到的异常。(Ibb481、b/261435386)
- Font.loadingStrategyAPI 现已稳定。(I5937c、b/261435386)
- GoogleFontAPI 现已稳定。(Ic90b0、b/261435386)
- TextUnit(float, TextUnitType)现在是稳定版 API。(I90c84、b/261561612)
- pluralStringResource现在是稳定版 API。(I09849、b/261439703)
版本 1.4.0-alpha03
2022 年 12 月 7 日
发布了 androidx.compose.ui:ui-*:1.4.0-alpha03。版本 1.4.0-alpha03 中包含这些提交内容。
API 变更
- 从 PointerIcon中移除了ExperimentalComposeUiApi(I23af8)
- 引入了页面无障碍操作:PageUp、PageDown、PageLeft、PageRight。请注意,只有 API 29 及更高级别才支持这些操作。(Ida4ab)
- 将 rememberNestedScrollConnection参数视图从根视图更新为托管视图。(Ia5200)
- 添加了 Modifier API,用于查询祖先实体滚动信息。(I2ba9d、b/203141462)
- 在手势可以变为滚动事件时,用于在 Clickable中正确延迟按下互动。
- 修复了在 Scrollable ViewGroup内使用时Clickables无法正确延迟涟漪效果的问题。
- 更新了抽屉式导航栏和表格,以便在手势可变为滚动事件时正确延迟按下操作。
- 将 CompositingStrategy.Always重命名为了Offscreen,以表明graphicsLayer将始终渲染到中间缓冲区 (I47dc1)
- 具有多个内容槽时布局过载的问题现已稳定(I10566、b/248294649)
- 在测试中添加了新的实验性 API PerfettoTrace.record {}和PerfettoTraceRule,用于捕获 Perfetto 跟踪记录(也称为 System Tracing),以检查测试行为和性能。(I3ba16)
- 在使用 Compose 规则的界面测试中,在所有帧回调运行完毕后,系统才会分派在 withFrameNanos回调期间恢复的连续作业。这与在正常运行时 Compose 的行为一致。不过,依赖旧行为的测试可能会失败。这应该只会影响直接调用withFrameNanos或withFrameMillis的代码,并会将回调之外的逻辑传递给可能需要在回调内部移动的那些函数。如需查看相关示例,请参阅此 CL 中的动画测试变更。
- 向 TestMonotonicFrameClock构造函数和工厂函数添加了可选的onPerformTraversals: (Long) -> Unit参数,以便在执行withFrameNanos回调之后、恢复调用方的协程之前运行代码。(Idb413、b/254115946、b/222093277、b/255802670)
- 向 Compose 添加了 EmojiCompat(Ibf6f9、b/139326806)
- 向 @Preview添加了新的壁纸参数,以支持动态配色 (I9f512)
bug 修复
- 现在,系统会在 Recomposer应用更改完成后发送快照应用通知。(Iad6c0、b/222093277)
- 在 captureToImage中引入了更改,以允许捕获多窗口屏幕截图。这对于使用 Compose PopUp 的屏幕截图测试很有用。(I169c5)
依赖项更新
- 现在,Compose UI 和 Compose Material 依赖于 Lifecycle 2.5.1。(I05ab0、b/258038814)
版本 1.4.0-alpha02
2022 年 11 月 9 日
发布了 androidx.compose.ui:ui-*:1.4.0-alpha02。版本 1.4.0-alpha02 中包含这些提交内容。
API 变更
- 更新了 GraphicsLayerScope,以显示graphicsLayer的当前大小。这有助于计算graphicsLayer转换作为可组合项尺寸的函数。(If8c43、b/181387080)
- 引入了 CompositingStrategy,以判断何时利用屏幕外合成层渲染graphicsLayer内容。如果应用了 alpha 或RenderEffect/Overscroll,Auto 会保留在内部使用某个层的默认行为。Always 会始终引入一个屏幕外缓冲区,其中ModulateAlpha会避免使用屏幕外缓冲区,并改为逐一调节graphicsLayer中记录的绘图指令。使用ModulateAlpha时,系统仍会利用RenderEffect/Overscroll所用的屏幕外缓冲区(I25e82、b/256382834)
- 向 Modifier.Node添加了invalidateSubtree(),以允许使布局和绘图的整个层次结构失效。(I4bd90)
- 将 rememberNestedScrollInteropConnection升级为稳定版。引入了将根视图传递给rememberNestedScrollInteropConnection的功能。这有助于自定义视图更好地响应滚动限制条件,尤其是在非标准视图(例如ModalBottomSheetDialog)中。(I9e107)
- 添加了 ObserverNode接口,可供Modifier.Node实现用于在先前读取的值发生更改时接收通知(I5728B、b/247716483)
- 向 Paint添加了一个可接受原生android.graphics.Paint的构造函数。此外,还添加了一个扩展函数toComposePaint(),可将现有的原生 Paint 对象转换为 Compose Paint。(Ica91b)
- 添加了适用于 Android 的 FontFamily.Resolver.resolveAsTypeface。(I8950b)
- 添加了 ToolingState,以允许工具更改可组合项的内部状态 (Ie6614)
- 重构工具,以更好地支持新增的动画 (I8677b)
- 在 Material 和 Material3 Text、TextField和OutlinedTextField中添加了minLines参数,从而能够根据行数设置组件的最小高度 (I4af1d)
版本 1.4.0-alpha01
2022 年 10 月 24 日
发布了 androidx.compose.ui:ui-*:1.4.0-alpha01。版本 1.4.0-alpha01 中包含这些提交内容。
API 变更
- 为手势检测器添加了新方法 awaitEachGesture()。其运行方式与forEachGesture()类似,但手势循环完全在AwaitPointerEventScope内运行,因此在迭代之间不会丢失事件。
- 废弃了 forEachGesture()(因为它无法避免在手势的间隔期间丢失事件),取而代之的是awaitEachGesture()。(Iffc3f、b/251260206)
- 废弃了 androidx 中对无障碍对象的回收。我们发现,即使在最早的受支持版本中,性能变化也微不足道。(I0a961)
- 向 TextStyle和SpanStyle添加了DrawStyle作为实验性属性,以支持绘制框状文本。(If24b8、b/155421273)
- AnnotatedString.Builder现在实现了- kotlin.text.Appendable。(I1a061、b/231030444)
- AnnotatedString.Builder现在提供了- append(AnnotatedString, start: Int, end: Int)方法,用于附加- AnnotatedString的子字符串和相交样式。
- 向 Paragraph和MultiParagraph绘制函数添加了DrawStyle参数,以支持绘制框状文本。(Ic8102、b/155421273)
外部贡献
- 感谢 vighnesh将 TV 设备添加到预览版 (Ie15cd)
版本 1.3
版本 1.3.3
2023 年 1 月 11 日
发布了 androidx.compose.ui:ui-*:1.3.3。版本 1.3.3 中包含这些提交内容。
bug 修复
- 修复了以下问题:在 Android 9 上,当 Activity 保存 Compose View 状态时,系统间或会发生崩溃。(I0b755、b/260322832)
版本 1.3.2
2022 年 12 月 7 日
发布了 androidx.compose.ui:ui-*:1.3.2。版本 1.3.2 中包含这些提交内容。
bug 修复
- 更新为了使用 Profobuf 3.21.8,这样可避免 protobuf-javalite:3.19.4中出现安全提醒 (CVE-2022-3171) (b/255545055)
版本 1.3.1
2022 年 11 月 9 日
发布了 androidx.compose.ui:ui-*:1.3.1。版本 1.3.1 中包含这些提交内容。
版本 1.3.0
2022 年 10 月 24 日
发布了 androidx.compose.ui:ui-*:1.3.0。版本 1.3.0 中包含这些提交内容。
自 1.2.0 以来的重要变更
- 新的实验性 API 套件 LookaheadLayout(实现了先前无法实现的动画行为)
- 新的实验性 API 套件 Modifier.Node(以替代Modifier.composed的更高性能 API 套件)
- 改进了窗口边衬区支持。
- 为 LazyList 中的方向键和硬件键盘提供了焦点支持。
- 对话框和弹出式窗口支持的最大高度已降低至 8dp(针对某些自定义设计系统的行为破坏性变更 – 理由请参阅 beta01 版本说明)
- 多项次要的、非破坏性 API 改进
- 修复了许多 bug 并提升了性能
版本 1.3.0-rc01
2022 年 10 月 5 日
发布了 androidx.compose.ui:ui-*:1.3.0-rc01。版本 1.3.0-rc01 中包含这些提交内容。
API 变更
- 新增了实验性 API Hyphens,以支持在文本中自动断字 (Iaa869)
bug 修复
- 默认情况下,DeviceFontFamilyName字体不会配置wght和ital变体设置,而是为已加载的Typeface使用平台设置。(Ia7a6d、b/246989332)
- 修复了 LazyColumn内存泄漏问题 - 在重复使用修饰符时未使用默认值调用onModifierLocalsUpdated(b/230168389)
版本 1.3.0-beta03
2022 年 9 月 21 日
发布了 androidx.compose.ui:ui-*:1.3.0-beta03。版本 1.3.0-beta03 中包含这些提交内容。
API 变更
- 添加了用于自定义文本换行的选项。(I86907)
- 将 TextMeasurer.measure方法中的size:IntSize参数更改为constraints: Constraints,以符合最小宽度限制。(I37530、b/242707525)
bug 修复
- AndroidX Activity 的 BackHandlerAPI 现在已可在Dialog可组合项中运行。(I35342)
版本 1.3.0-beta02
2022 年 9 月 7 日
发布了 androidx.compose.ui:ui-*:1.3.0-beta02。版本 1.3.0-beta02 中包含这些提交内容。
API 变更
- 为 Layout 添加了实验性过载,它接受包含多个可组合内容 lambda 的列表,从而能够以不同的方式处理放入不同内容 lambda 的可测量项 (Ic1b4e)
实验性 Focus API 的变化:
- 废弃了 FocusDirection.In和FocusDirection.Out,取而代之的是FocusDirection.Enter和FocusDirection.Exit。(Ia4262、b/183746982)
- 添加了两个新的焦点属性 enter 和 exit,用于为 FocusManager.moveFocus(Enter)和FocusManager.moveFocus(Exit)指定自定义行为。(I5f3f9、b/183746982)
- 您现在可以使用 FocusRequester.Cancel取消焦点移动。FocusRequester.Cancel可用于以下任何焦点属性:up、down、left、right、next、previous、start、end、enter 和 exit。(Ib300f)
版本 1.3.0-beta01
2022 年 8 月 24 日
发布了 androidx.compose.ui:ui-*:1.3.0-beta01。版本 1.3.0-beta01 中包含这些提交内容。
修饰符节点重构
已大幅度重构处理 Modifier/Modifier.Element 实例并协调其在 LayoutNodes 上的行为的层。实际上,这次重构不影响 Compose 中任何修饰符的公共 API,因此可以视为仅针对实现的变更。尽管如此,由于多方面原因,这仍是一次重大变更。(Ie4313)
更改摘要
添加的实验性 Modifier.Node API 提供了一个抽象,允许在布局节点的整个生命周期内保持的实例上保留状态,而且根据生成该抽象的 Modifier.Element 的布局节点和用途进行分配。
从广义上讲,这种抽象提供了一种生成有状态修饰符的替代方法,而无需依赖 Modifier.composed API 的机制。
风险
此变更与以前的版本严格保持二进制兼容,以便在可观察行为方面尽可能实用、合理地向后兼容。虽然如此,此次重构触及了绝大多数 Compose 子系统,而且有可能行为变更的方式不在测试范围内,因此没有被发现和修复。
请谨慎考虑是否升级到此版本。如果您认为这对您造成了不利影响,请告知我们。
实验性 API
添加了各种实验性 API,这些 API 都与“修饰符节点”的新概念相关。创建 Modifier.Node 的原因是:
- fun modifierElementOf(…): Modifier
- abstract class ModifierNodeElement
- abstract class Modifier.Node
- abstract class DelegatingNode
- interface LayoutModifierNode
- interface DrawModifierNode
- interface SemanticsNode
- interface PointerInputNode
- interface ModifierLocalNode
- interface ParentDataModifierNode
- interface LayoutAwareModifierNode
- interface GlobalPositionAwareModifierNode
- interface IntermediateLayoutModifierNode
行为破坏性变更
对话框和弹出式窗口中支持的最大高度已降低至 8dp。
Compose 对话框和弹出式窗口支持的最大高度已从 30dp 降低至 8dp。此变更会影响 Material 和界面自定义对话框以及弹出式窗口。此变更是为了缓解低于 Android S 的版本中存在的无障碍功能 bug,以及确保这些窗口中的无障碍服务能够与对话框或弹出式窗口中的内容互动。
只有当您要创建的自定义对话框或弹出式窗口实现的高度设置为高于 8dp 的水平时,您才会受此变更的影响。请考虑降低对话框或弹出式窗口的高度。如果您需要选择停用此新行为,可以考虑使用所需的高度设置创建您自己的对话框或弹出式窗口分支。不建议这样做,因为无障碍功能可能会受到负面影响,并且开发者需要确保无障碍服务可以对相应对话框或弹出式窗口的底部进行互动和读取。
API 变更
- 修复了配置更改时 painterResource无法更新的问题(I58e73、b/228862715)
- rememberTextMeasurer不再接受- FontFamily.Resolver、- Density或- LayoutDirection参数。请使用- TextMeasurer构造函数为这些参数提供自定义值。(Ia1da3)
- 添加了 DialogProperties.decorFitsSystemWindows属性,以允许 Dialog 支持WindowInsets。(I57742、b/229378542)
- 将字体构造函数移回原来的 Kotlin 文件,以保持二进制兼容性。与上一个稳定版相比没有变化。(Ieb2f3)
- 从多个 equals 定义中移除了不必要的运算符 - 这不会产生任何影响。(I6c309)
- FontVariation.Setting是一个允许限制未来 API 取值的封装接口。(I11021、b/143703328)
- 在 SlotTree.kt中添加了CompositionGroup.findParameters。这允许工具无需解析整个槽表即可检索CompositionGroup的参数。(I124fe)
版本 1.3.0-alpha03
2022 年 8 月 10 日
发布了 androidx.compose.ui:ui-*:1.3.0-alpha03。版本 1.3.0-alpha03 中包含这些提交内容。
API 变更
- LayoutCoordinates.findRootCoordinates()现已公开(I7fa37、b/204723384)
- 添加了实验性 API,用以在 PlacementScope中获取LayoutCoordinates。这可让开发者知道当前布局要相对于子项位置放置该子项的位置。(I5482b、b/238632578)
- 添加了 LayoutCoordinates.transformFrom,用于获取从一个LayoutCoordinates到另一个 LayoutCoordinates 的矩阵变换。(Ic5ab1、b/238632578)
- 废弃了 SemanticsModifier.id并将语义 ID 移到了LayoutInfo.semanticsId。(Iac808、b/203559524)
- 资源字体现在支持设置字体变体设置(API 26 及以上级别)。(I900dd、b/143703328)
- DeviceFontFamilyNameFont中支持可变字体(Ic1279、b/143703328)
- 字体构造函数现在接受 FontVariation.Setting列表,用于在搭载 Android O 及更高版本的设备上配置可变字体。(I11a9d、b/143703328)
- 添加了用于定义和使用可变字体的 FontVariationAPI。(I3c40c、b/143703328)
- LineHeightStyle.Alignment构造函数现已公开(实验性)(I4bbbe、b/235876330)
- Paragraph 现在是 expect|actual 并且针对 Android 和桌面设备进行了定义。(Id387e、b/239962983)
- Paragraph 接口现在为密封的 Paragraph 接口。没有展示如何将段落子类化的用例,建议您进行咨询,了解此项变更是否会对您造成影响。(If5247、b/239962983)
- 从 PlatformTextStyle和LineHeightStyle中移除了实验性注解。(I64bef)
- 废弃了 TextInputService.show|hideSoftwareKeyboard。请改为在应用代码中使用SoftwareKeyboardController,并在 IME 管理代码中使用TextInputSession。(I14e4c、b/183448615)
- 为现有动画类型添加了新的 API (I26179)
bug 修复
- 向在 SDK 33 及更高版本中需要授予 POST_NOTIFICATIONS权限的 API 添加了@RequiresPermission。(Ie542e、b/238790278)
版本 1.3.0-alpha02
2022 年 7 月 27 日
发布了 androidx.compose.ui:ui-*:1.3.0-alpha02。版本 1.3.0-alpha02 中包含这些提交内容。
API 变更
- 添加了一个新属性 PointerInputChange#pressure,以检索压力。(I45a5e、b/205164819)
- 添加了 rememberTextMeasurer,以便在组合中轻松创建并记住TextMeasurer实例。(I8d66e)
- Rect、- RoundRect和- MutableRect现在支持使用 Kotlin- in语法调用- contains函数。(Ie42b0、b/238642990)
- 从 KeyInjectionScope中移除了不必要的函数,因为这些函数可通过 API 中较为简单的部分轻松实现。已移除的函数包括pressKeys、keysDown和keysUp。(I81d77)
- 重构了 KeyInjectionScope中的常量和参数名称,以便在前述常量和参数的单位为毫秒时添加后缀“Millis”。(Iabef5)
- 向 EditCommand中添加了toStringForLog()方法,以帮助排查文本编辑问题。(I53354、b/228862731)
- 在 DrawScope中添加了drawText扩展函数,以便在DrawScope上运行的可组合项和修饰符(如Canvas和drawBehind)中绘制多样式文本。(I16a62、b/190787898)
- 引入了一个名为 TextMeasurer的新实验性 API,该 API 可实现任意文本布局计算,从而创建与BasicText相同的结果(独立于 Compose 运行时)。(I17101)
- 在 SlotTree.kt中添加了mapTree。这样,工具就可以像 asTree 一样检查SlotTree,而不需先制作内存副本。对于布局检查器而言,这会使性能提升约 10 倍。(I5e113)
- Compose 预览改成了存储在二进制输出文件中,以允许开发者编写和重复使用来自库的 MultiPreview注解。(I85699、b/233511976)
bug 修复
- 在向 VelocityTracker 添加InputEventChange事件时,我们将考虑增量而不使用位置,这将确保在所有情况下都能正确计算速度,即使目标元素移动也是如此(Icea9d、b/216582726、b/223440806、b/227709803)
- 修复了存在注解时因 AnnotatedString.toUpperCase而导致的 NPE。(I0aca2、b/210899140)
版本 1.3.0-alpha01
2022 年 6 月 29 日
发布了 androidx.compose.ui:ui-*:1.3.0-alpha01。版本 1.3.0-alpha01 中包含这些提交内容。
API 变更
- 新增了 LookaheadLayout,支持在实际测量/布局之前进行先行传递。这样,就可以在布局变化时预先计算布局,同时允许先行传递之后的测量/布局使用预计算的尺寸/位置为朝向目标移动的尺寸和位置添加动画效果。尚不支持SubcomposeLayouts,不过会在未来版本中提供支持。(I477f5)
- 向 TextStyle和SpanStyle的 Brush 变种添加了可选 Alpha 参数,以修改整个Text的不透明度。(Ic2fac、b/234117635)
- 引入了 UrlAnnotation注解类型及相关方法,以支持AnnotatedString中的TalkBack链接。(I1c754、b/231495122)
- 将实用功能移至运行时 (I4f729)
bug 修复
- TextLayoutResult.getLineForOffset不会抛出。(Idc5d6、b/235876324)
外部贡献
- 新增了一个 API WindowInfo.keyboardModifiers,用于在可组合函数中或通过 snapshotFlow 观察其状态 (Icdb8a)
版本 1.2
版本 1.2.1
2022 年 8 月 10 日
发布了 androidx.compose.ui:ui-*:1.2.1。版本 1.2.1 中包含这些提交内容。
bug 修复
- 修复了检查器中的 nullpointer (b/237987764)
- 修复了在检查器中使用 remember 时出现的类转换异常 (b/235526153)
版本 1.2.0
2022 年 7 月 27 日
发布了 androidx.compose.ui:ui-*:1.2.0。版本 1.2.0 中包含这些提交内容。
自 1.1.0 以来的重要变更
- 焦点遍历方面的改进: - 使用新的 BeyondBoundsLayout核心 API,现在 Lazy 列表的焦点驱动滚动可正常起作用
- FocusOrder和- FocusProperties中的新行为自定义 API
- 改进了实体键盘或电视遥控器的相关行为
 
- 使用新的 
- 添加了适用于以下项的新 API: - 窗口边衬区
- 手势驱动型动画、无限动画和布局动画的核心基元
- GraphicsLayer功能,包括- RenderEffect
 
- 修复了许多 bug 并提升了性能 
版本 1.2.0-rc03
2022 年 6 月 29 日
发布了 androidx.compose.ui:ui-*:1.2.0-rc03。版本 1.2.0-rc03 中包含这些提交内容。
- 自 1.2.0-rc02 以来没有任何变化。
版本 1.2.0-rc02
2022 年 6 月 22 日
发布了 androidx.compose.ui:ui-*:1.2.0-rc02。版本 1.2.0-rc02 中包含这些提交内容。
版本 1.2.0-rc01
2022 年 6 月 15 日
发布了 androidx.compose.ui:ui-*:1.2.0-rc01。版本 1.2.0-rc01 中包含这些提交内容。
API 变更
- Compose 库中的接口现在使用 jdk8 默认接口方法构建 (I5bcf1)
- 向 KeyInjectionScope添加了高阶函数,用于在其他按键被按下或切换为开启状态时注入按键事件。这些函数包括withKeysDown、withKeysToggled等。此外,还添加了用于检查特定元键是否按下的属性,例如,isCtrlDown可用于检查是否按下了任一控制键。如需查看有关每个函数的文档,请参阅KeyInjectionScope。(I9f6cd、b/229831515)
- 引入了实验性 OverscrollEffect,以允许实现自定义滚动效果,以及接受它的Modifier.scrollable过载。
- 实验性 LocalOverScrollConfiguration已从foundation.gesture移至 foundation 软件包,并重命名为LocalOverscrollConfiguration(If19fb、b/204650733)
- 已将 runComposeUiTestWithoutActivity {}重命名为runEmptyComposeUiTest {},以与createEmptyComposeRule()保持一致 (I6fed7)
版本 1.2.0-beta03
2022 年 6 月 1 日
发布了 androidx.compose.ui:ui-*:1.2.0-beta03。版本 1.2.0-beta03 中包含这些提交内容。
API 变更
- 向 KeyInjectionScope添加了pressKeyTimes和isCapsLockOn以及相关代码。此外,该 API 现在支持鼠标和键盘组合注入模式,例如在按下元键的同时点击鼠标按钮。(I4c8da、b/229831515)
- 添加了对注入按键事件的实验性支持。在通过 performMultiModalInput执行多模式输入手势时,使用performKeyInput发送按键事件,或通过MultiModalInjectionScope的key属性发送这些事件。如需查看相应 API 的文档,请参阅KeyInjectionScope。(Ic5000、b/229831515)
- 添加了新的 GoogleFont.Provider.AllFontsListUri,用于检索 Android 支持的 Google Fonts 的规范互联网源代码。
- 改进了当在 Compose 中无法加载 GoogleFonts 时重新抛出的错误消息。(I0416c)
bug 修复
- 在向 Velocity Tracker 添加 InputEventChange事件时,我们将考虑增量而不使用位置,这将确保在所有情况下都能正确计算疾速,即使目标元素移动也是如此(I51ec3、b/216582726、b/223440806、b/227709803)
- 现在,从“快捷设置”图块切换后,系统会立即对可组合项应用 Show Layout Bounds设置,而无需离开并重新进入 activity。(I843d5、b/225937688)
- 无障碍字符串查询不会触发字体加载。以前,它会尝试加载 StyleSpans的字体,如果FontFamily.Resolver被覆盖,会导致崩溃。(I4609d)
- 当光标位于文本字段末尾时,按向前删除键将不再崩溃。
- DeleteSurroundingTextCommand和- DeleteSurroundingTextInCodePointsCommand现在要求其构造函数参数为非负数。(Ica8e6、b/199919707)
版本 1.2.0-beta02
2022 年 5 月 18 日
发布了 androidx.compose.ui:ui-*:1.2.0-beta02。版本 1.2.0-beta02 中包含这些提交内容。
API 变更
- 在其他预览类型中重用功能 (I19f39)
bug 修复
- ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer已重命名为- DisposeOnDetachedFromWindowOrReleasedFromPool,以更好地反映何时发生了处理操作,而不只是反映何时未发生处理操作。(If15ca)
版本 1.2.0-beta01
2022 年 5 月 11 日
发布了 androidx.compose.ui:ui-*:1.2.0-beta01。版本 1.2.0-beta01 中包含这些提交内容。
新功能
- 这是 1.2 的第一个 Beta 版!
API 变更
- 添加了实验性 BeyondBoundsInterval,可供LazyList的自定义实现在为超出可见边界的项布局时使用(Ifabfb、b/184670295)
- 现在,Modifier.composed的键控版本已改为稳定版 API(Ie65e4、b/229988420)
- 简化了 rememberNestedScrollConnectionAPI,以使用 CompositionLocal 获取当前视图信息 (I67ca7)
- 现在可以使用 @file前缀在文件范围内使用@ComposableTarget注解和标有@ComposableTargetMarker的注解。在文件范围内使用目标注解将使编译器假定文件中的所有可组合函数都要以关联的 Applier 为目标。例如,使用@file:UiComposable即会声明所有@Composable函数均以 Compose 界面 Applier 为目标。如果某个函数需要以其他 Applier 为目标,则必须为所需 Applier 明确提供目标标记注解。(I40804)
- 引入了新的独立于平台的实验性测试 API( - interface ComposeUiTest和- fun runComposeUiTest(block: ComposeUiTest.() -> Unit)),可用于运行 Compose 界面测试,而无需使用- TestRule。如需在没有- ComposeTestRule的情况下运行测试,请将测试作为 lambda 传递到- runComposeUiTest,并使用接收器范围- ComposeUiTest中的方法和成员(与- ComposeContentTestRule中相同)。- 添加了 Android 专用的 - interface AndroidComposeUiTest和- fun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit),以提供对底层 Activity 的访问权限,类似于- AndroidComposeTestRule。如需使用更多控制功能,您可以自行实例化- class AndroidComposeUiTestEnvironment。- 桌面实现为 - class DesktopComposeUiTest,但目前未提供桌面专用的运行函数。- 您可以按如下方式将测试从 - ComposeTestRule迁移到- ComposeUiTest(Android 示例)。迁移前:- @RunWith(AndroidJUnit4::class) class MyTest { @get:Rule val rule = createComposeRule() @Test fun test() { rule.setContent { Text("Hello Compose!") } rule.onNodeWithText("Hello Compose!").assertExists() } }- 迁移后: - @RunWith(AndroidJUnit4::class) class MyTest { @Test @OptIn(ExperimentalTestApi::class) fun test() = runComposeUiTest { setContent { Text("Hello Compose!") } onNodeWithText("Hello Compose!").assertExists() } }
- 目前, - ComposeContentTestRule和- ComposeTestRule并非从- ComposeUiTest扩展,这意味着- ComposeUiTest中的扩展函数目前无法在- TestRule接口上调用。当- ComposeUiTest升级为稳定版 API 后,- ComposeContentTestRule和- ComposeTestRule将改为从- ComposeUiTest扩展。(Ib4e90)
- LineHeightBehavior已重命名为- LineHeightStyle
- LineVerticalAlignment已重命名为- LineHeightStyle.Alignment
- LineHeightTrim已重命名为- LineHeightStyle.Trim
- 移除了 - LineHeightStyle中的默认构造函数值(I582bf、b/181155707)
- 向 - TextStyle和- SpanStyle添加了- Brush,以提供使用渐变颜色绘制文本的方法。(I53869、b/187839528)
- LineHeightBehavior的- trimFirstLineTop和- trimLastLineBottom属性已更改为单个枚举:- LineHeightTrim。- LineHeightTrim具有由 2 个布尔值定义的 4 个状态值:- FirstLineTop、- LastLineBottom、Both 和 None(Ifc6a5、b/181155707)
- 向 - TextStyle和- ParagraphStyle添加了- LineHeightBehavior。- LineHeightBehavior控制行高是应用于第一行的顶部还是最后一行的底部。它还定义了- TextStyle(lineHeight)提供的空间中的行对齐方式。- 例如,产生的行为可能类似于 CSS 通过 - LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)定义的行为。
- 仅当 - includeFontPadding为 false 时,- trimFirstLineTop和- trimLastLineBottom配置才能正常运行。(I97332、b/181155707)
- PlatformParagraphStyle.lerp和- PlatformSpanStyle.lerp函数已更改为顶级函数 (I9a268)
bug 修复
- 现在,PointerInputChange::copy文档会正确声明自身为浅层副本。(I182f5)
- 在高度有限且无法容纳所有文本行时支持省略号(Ie528c、b/168720622)
- includeFontPadding默认处于开启状态。您可以使用- TextStyle.platformTextStyle属性关闭- includeFontPadding。不久之后,我们将更改默认行为,但在此之前,这样使我们能够更好地集成行高改进 (aosp/2058653) 并解决- TextField的裁剪问题。(I01423、b/171394808)
外部贡献
- 现在,如果我们垂直滚动,在 Android 上 MouseInjectionScope.scroll(delta = someDelta)与之前相反(如果 someDelta 是正值,它将向下滚动)(Ifb697、b/224992993)
版本 1.2.0-alpha08
2022 年 4 月 20 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha08。版本 1.2.0-alpha08 中包含这些提交内容。
API 变更
- 已将 pluralStringResource函数标记为实验性,以允许演变,从而支持未来更好地国际化。(If24e4)
- Paragraph 和 MultiParagraph 现在接受 Constraints 参数。目前传递 Constraints.maxHeight是空操作,但以后允许进行一些计算,例如根据高度进行省略。(I6afee、b/168720622)
- SubcomposeSlotReusePolicy.getSlotsToRetain()现在接受类似 MutableSet 的自定义类,该类不允许在其中添加新项。(Icd314)
- PointerIcon 现在是一个 @Stable接口 (I9dafe)
- PointerInputChange中已废弃部分使用操作(down OR 位置)。您可以借助- consume()完全使用此更改。您可以使用- isConsumed来确定其他人之前是否使用过此更改。
- PointerInputChange::copy()现在始终会创建浅层副本。这意味着,在使用完其中一个副本后,将会使用- PointerInputChange的副本。如需创建未绑定的- PointerInputChange,请改用构造函数。(Ie6be4、b/225669674)
- 按 Compose > View 的方向启用 Compose 和 View 之间的嵌套滚动互操作功能。这样,Compose 父级将能够从嵌套滚动视图接收嵌套滚动增量。(If7949、b/174348612)
- 新增了 SemanticsProperty testTagsAsResourceId,可用于让 Compose 符合为 View 系统设计的 UIAutomator 测试的要求。(I39c20)
- 使用 FontFamily.SansSerif时,会显示 Android 中所有可用的系统字体粗细选项。在 API 21-28 上,会在内部使用后备字体名称,例如 sans-serif-medium。这是一项行为变更,因为之前 API 21-28 仅支持粗细选项 400 和 700。(I380fe、b/156048036、b/226441992)
- Paragraph 和 Multiparagraph 指令将位置参数重新排序为在可选参数前面。(Idafaa)
- AndroidFont现在将 typefaceLoader 作为构造函数参数。(I2c971)
版本 1.2.0-alpha07
2022 年 4 月 6 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha07。版本 1.2.0-alpha07 中包含这些提交内容。
API 变更
- 添加了新函数 Snapshot.withoutReadObservation { ... }。用户可以通过该函数运行所传递的 lambda,而无需订阅在此块中读取的状态值的更改。如果您既想从基于快照的线程安全写入/读取中受益,又希望能够在不造成非必要重组或重新测量的情况下读取值,这会对您很有帮助。(I9f365、b/214054486)
- ComposeView的- consumeWindowInsets扩展属性可让开发者停用 Android- WindowInsets。这样一来,层次结构中的各个- ComposeViews可分别应用- WindowInsets,而不会彼此干扰。(I0ef08、b/220943142)
- 添加了 KeyboardType.Decimal作为Keyboard.Number的替代方案,以便在 IME 中明确包含十进制分隔符。(Iec4c8、b/209835363)
- PointerEventType.Scroll和- PointerEvent.scrollDelta现在是稳定版 API(I574c5、b/225669674)
- 针对合作 View 类启用 View 和 Compose 之间的嵌套滚动互操作功能。这意味着 Compose 现在能够将滚动增量分派给(合作)View 父级。(I5d1ac、b/174348612)
- 更新了 FontFamily.Resolver,以集成系统级粗体文字无障碍设置 (I6c1e7)
- Font(AssetManager, String, ...)已废弃,取而代之的是- Font(String, AssetManager, ...)。这是一个实验性 API。(I1c7a4)
- 新增了字体描述符 Font(DeviceFontFamilyName),可以选择在字体回退链执行期间查找系统安装的字体。(I30468、b/219754572)
- 在 TextStyle/ParagraphStyle 中添加了 includeFontPadding的临时兼容性配置。可通过TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))更改includeFontPadding。这是一个用来实现迁移的临时配置选项,即将被移除。(If47be、b/171394808)
- 添加了 GoogleFont.Provider.isAvailableOnDevice扩展项以获得调试帮助。(I64e31)
- 添加了 GoogleFont.Provider构造函数,以便与@ArrayRes配合使用(Ic5ee1、b/225984280)
- Compose GoogleFont现在称为- Font(GoogleFont),在其他情况下 API 会保持稳定。(I125f2)
bug 修复
- 向 Material/Scaffold 添加了 lint 检查,以确保使用了内部内边距 (Ifb111)
版本 1.2.0-alpha06
2022 年 3 月 23 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha06。版本 1.2.0-alpha06 中包含这些提交内容。
API 变更
- 添加了 RequestFocus语义操作,用于请求将焦点置于可聚焦的目标。(I17b71)
- 更新了矢量可绘制对象解析,以支持自动镜像,从而在当前布局方向为 RTL 时翻转 VectorPainter的内容。(I79cd9、b/185760237)
- 将阴影/环境颜色更新为 - Modifier.graphicsLayer的尾随参数,以保证 API 兼容性(I3f864、b/160665122)
- 在 - GraphicsLayerScope上添加了阴影/环境颜色的默认实现,以确保非破坏性 API 更改
- 在 RSB 事件中添加了事件时间 (Ief8ae) 
- FocusOrder现已合并到- FocusProperties,- focusProperties()现已拥有- focusOrder()的所有功能。- FocusOrder和- focusOrder()已废弃。接受- focusRequester的- focusOrder()应与- focusProperties()一起替换为- focusRequester()修饰符。这样一来,修饰符可以更好地分离关注点。(I601b7)
- 现在,同时升级 - RecyclerView和- Compose可以提升以 Compose 视图作为子级的 RecyclerView 的滚动性能。
- 添加了 - ViewCompositionStrategy.Default作为检索内置默认策略的方法
- 添加了 - ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer,这是新的默认策略,可以正确处理池容器(例如 RecyclerView)。(If7282)
- 添加了对使用 @Preview 为注解类添加注解的支持,这是添加 Multipreview 功能的第一步。此类注解可用于为可组合方法或其他注解类添加注解,这些类随后可能会被视为用给定 @Preview 间接注解。(I12eff) 
- 向 @Preview 的设备列表添加了参照设备 (I071c9) 
bug 修复
- 更新了矢量图形 API,以使用正确的可组合注解 @VectorComposable 而不是 @UiComposable (I942bc)
- 从 AnnotatedString.Builder.withStyle中移除了 crossinline (If84d5)
外部贡献
- compose-ui:将 ambientShadowColor和spotShadowColor属性添加到了GraphicsLayerScope(I1ba1a、b/160665122)
- 现通过 pluralStringResource函数支持复数资源。(Ib2f23、b/191375123)
版本 1.2.0-alpha05
2022 年 3 月 9 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha05。版本 1.2.0-alpha05 中包含这些提交内容。
API 变更
- TextToolbar现在接受 lambda 参数,而非- ActionCallback。(Ib2eb9、b/197950089)
- 更新了 core 和 appcompat 中的可为 null 性,以匹配 Tiramisu DP2 (I0cbb7)
- 测量后的接口现在公开了 parentData 属性 (I3313f)
- Modifier.onPlaced和- OnPlacedModifier接口现已稳定。(Ib5482)
- 太棒了!现在 Compose Animation 支持开发者选项中的“Animator 时长缩放”设置了。(I5a4fc、b/161675988)
- 添加了一个 BeyondBoundsLayoutlocal 修饰符(If8b51、b/184670295)
- 文本:includeFontPadding 现在默认处于关闭状态。因 includeFontPadding=false导致的字体裁剪问题已得到解决,应该不会发生高大型文字被裁剪的情况。(I31c84、b/171394808)
bug 修复
- 现在,如果您尝试在已有内容的情况下设置内容,ComposeContentTestRule.setContent将抛出一个IllegalStateException。(I888a5、b/199631334)
- 修复了在 Android 上从剪贴板读取内容时剪贴板内容导致的崩溃问题。(I06020、b/197769306)
- 改进了 RSB 滚动示例。(I6a596)
外部贡献
- 已更新为使用 Kotlinx 协程 1.6.0 (I3366d)
版本 1.2.0-alpha04
2022 年 2 月 23 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha04。版本 1.2.0-alpha04 中包含这些提交内容。
API 变更
- 添加了 - ComposableTarget、- ComposableTargetMarker和- ComposableOpenTarget,以便系统在编译时报告何时以预期使用范围外的 Applier 为目标而调用了某个可组合函数。- 在大多数情况下,注解可以由 Compose 编译器插件推断出来,因此直接使用这些注解的情况应该很少。无法推断的情况包括创建和使用自定义 applier、抽象可组合函数(例如接口方法)、可组合 lambda 性质的字段或全局变量(推断出局部变量和参数),或者使用 - ComposeNode或相关可组合函数的情况。- 对于自定义 Applier,调用 - ComposeNode或- ReusableComposeNode的可组合函数需要为该函数和任何可组合 lambda 的参数类型添加- ComposableTarget注解。不过,建议您创建一个带有- ComposableTargetMarker的注解,然后使用带标记的注解,而不是直接使用- ComposableTarget。标有- ComposableTargetMarker的可组合注解等同于用属性类的完全限定名称作为 applier 参数的- ComposbleTarget。如需查看- ComposableTargetMarker使用示例,请参阅- anroidx.compose.ui.UiComposable。(I38f11)
- Font(resId, ...)目前在稳定版 API 上可接受 loadingStrategy。(Ief3d2)
- FontLoadingStrategy现在是稳定版 API 了。(I1ee35、b/174162090)
- 支持在文本中加载异步字体(I77057、b/214587005) 
- 添加了用于将自定义 - Font.ResourceLoader转换为- FontFamily.Resolver的桥接 API。(Ia0060)
bug 修复
- 提供的 FontFamily.Resolver会传递给 Popup 等子组合。
- 提供的 Font.ResourceLoader会传递给 Popup 等子组合。(I48fa5)
版本 1.2.0-alpha03
2022 年 2 月 9 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha03。版本 1.2.0-alpha03 中包含这些提交内容。
API 变更
- TextInputSession和- TextInputService中的- notifyFocusedRect方法现已废弃,系统将不会调用该方法。请改用- BringIntoViewRequester。(Ia4302、b/192043120、b/216842427、b/178211874)
- 对 RenderNode桩类引入了destroyDisplayListData方法(I1e659、b/216660268)
- 新增了一个 API,可用于预先衡量您预组合的 SubcomposeLayout的子项。(I857ea)
- 添加了 - movableContentOf,用于将可组合的 lambda 转换另一种 lambda,它会将其状态及相应节点移至其被调用的任何新位置。当上一个调用退出组合时,相应状态会暂时保留,如果对 lambda 的新调用进入组合,状态和关联的节点会移至新调用的位置。如果没有新调用加入,系统会永久移除相应状态;请注意,观察器会收到通知。- 如果在同一个组合中多次调用 - movableContentOflambda,系统会为每个调用创建新的状态和节点,随着调用退出组合和新调用进入组合,系统会按调用顺序将相应状态从第一个退出的调用移至后续进入的调用。新调用未声明的所有状态都会永久移除。(Ib4850)
- 现在可通过 - LocalFontFamilyResolver.current使用- FontFamilyResolver
- 添加了 - createFontFamilyResolver(context)和- createFontFamilyResolver(context, coroutineScope),以便在 Compose 使用情况之外创建新的 FontFamily 解析器。
- Paragraph 和 MultiParagraph 现在接受 - FontFamily.Resolver
- TextLayoutResult.layoutInput.fontFamilyResolver现在包含用于此布局的解析器,废弃了- TextLayoutResult.layoutInput.resourceLoader,因为系统已不再使用它。(Id5a45、b/174162090)
- 支持异步和可选字体加载,且具有回退行为。此路径由 Text 和 TextField 使用,并通过 FontFamilyResolver 公开 
- 支持通过 - FontFamilyResolver.preload预加载字体
- FontFamilyResolver.setAsyncLoadContext允许设置用于加载异步字体的全局协程上下文。(I87fe8、b/174162090)
- 添加了 - AndroidFont,这是一种新的低级别 API,用于在 Android 上提供新类型的字体资源描述符。例如,从应用专用后端加载字体,选择性地定位到设备上的预安装字体,或者从当前字体工厂未提供的资源加载字体。
- 扩展了 - Font.ResourceLoadedAPI,以支持可选和异步字体加载。建议应用开发者不要直接使用此 API。如需添加新类型的字体,请参阅- AndroidFont。
- Font.AndroidResourceLoader扩展函数允许在组合之外构建- Font.ResourceLoader。
- 为基于资源的字体添加了 - loadingStrategy参数,以便在资源字体引用可下载字体 XML 时允许异步加载。(Ie5aea、b/174162090)
- 废弃了 - Typeface(FontFamily)构造函数。它之前用于预加载字体,最多可能需要 10 秒才能预加载可下载的字体。预加载可下载的字体时,此调用可能会阻塞 10 秒。请改用- FontFamilyResolver.preload。
- 废弃了 - fontResource(FontFamily): Typeface。它之前用于预加载字体,最多可能需要 10 秒才能预加载可下载的字体。请改用- FontFamilyResolver.preload(If8e7c、b/174162090)
- 接受 - maxSlotsToRetainForReuse的- SubcomposeLayoutState构造函数现已废弃。取而代之的是一个接受- SubcomposeSlotReusePolicy的新构造函数;这是一个新的接口,可用于更精细地控制应保留哪些槽以便将来重复使用。(I52c4d)
- 将 - Color中的 HSV 和 HSL 函数作为非实验性 API 公开。Oklab 颜色空间现在是公共 API。(I08fb6、b/180731008)
- 废弃了 - AndroidComposeTestRule.AndroidComposeStatement,它不应在公共 API 中,并且并未以任何方式为您执行任何操作。(Ibc46b)
- 重命名内部生成的 kt 类(Ia0b9e、b/174162090) 
- 移除了 - FontLoadingStrategy.values(I42a9d、b/174162090)
- 全局字体加载器现在称为 - FontFamilyResolver。(I4f773、b/174162090)
- 对桌面设备使用新的字体加载系统。(I9ce5c、b/174162090) 
- FontFamily.Resolver.resolve返回- State<Any>(I4406c、b/174162090)
bug 修复
- 现在,当软输入模式为 ADJUST_PAN时,如果 TextField 获得焦点并且键盘处于显示状态,TextField 会一直位于键盘上方。(I8eaeb、b/190539358、b/192043120)
- 桌面设备对 FontFamily.Resolver使用本地组合
- 废弃了桌面设备 FontLoader
- 在桌面设备上新增了 createFontFamilyResolver工厂(I6bbbb、b/174162090)
- 在文本字段之间切换焦点时,软键盘输入类型不再闪烁。(I1bf50、b/187746439)
版本 1.2.0-alpha02
2022 年 1 月 26 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha02。版本 1.2.0-alpha02 中包含这些提交内容。
API 变更
- 为具有旋转侧面按钮的 Wear 设备添加了 Modifier.onRotaryScrollEvent()和Modifier.onPreRotaryScrollEvent()(I18bf5、b/210748686)
- 添加了实验性 View.createLifecycleAwareRecomposer扩展程序 (I0cde6)
外部贡献
- 现在,在 Android 上 PointerEvent.scrollDelta.y与之前相反(现在,如果将鼠标滚轮向右倾斜,该参数会返回 1,而不是 -1)(Ia9811)
版本 1.2.0-alpha01
2022 年 1 月 12 日
发布了 androidx.compose.ui:ui-*:1.2.0-alpha01。版本 1.2.0-alpha01 中包含这些提交内容。
API 变更
- 废弃了 FontFamily.canLoadSynchronously。此属性没有语义含义。(Ica5ef)
- 在 CompositionData中添加了 identity 字段,用于在布局检查器中生成不可变的 ID。(Ic116e)
- 向”Preview devices”列表中添加了 Wear OS 设备 ID (I93232)
依赖项更新
- 现在依赖于 Kotlin 1.6.10。
版本 1.1
版本 1.1.1
2022 年 2 月 23 日
发布了 androidx.compose.ui:ui-*:1.1.1。版本 1.1.1 中包含这些提交内容。
bug 修复
- 修复了 androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList中的NullPointerException(aosp/1947059、b/206677462)
- 修复了在 Android 上从剪贴板读取内容时剪贴板内容导致的崩溃问题。(I06020、b/197769306)
- 修复了 LazyVerticalGrid中的 RTL(aosp/1931080、b/207510535)
版本 1.1.0
2022 年 2 月 9 日
发布了 androidx.compose.ui:ui-*:1.1.0。版本 1.1.0 中包含这些提交内容。
自 1.0.0 以来的重要变更
版本 1.1.0-rc03
2022 年 1 月 26 日
发布了 androidx.compose.ui:ui-*:1.1.0-rc03。版本 1.1.0-rc03 中包含这些提交内容。
bug 修复
- 已更新为支持 Compose Material 1.1.0-rc03
版本 1.1.0-rc01
2021 年 12 月 15 日
发布了 androidx.compose.ui:ui-*:1.1.0-rc01。版本 1.1.0-rc01 中包含这些提交内容。
bug 修复
- 修复了导致无障碍滚动操作缺失的 bug (I7cbfb)
- 现在,如果 HardwareRenderer.isDrawingEnabled()为false,那么通过在调用期间对其进行启用,SemanticsNodeInteraction.captureToImage()也可以正常运行 (Idf3d0)
版本 1.1.0-beta04
2021 年 12 月 1 日
发布了 androidx.compose.ui:ui-*:1.1.0-beta04。版本 1.1.0-beta04 中包含这些提交内容。
新功能
- 完成更新,现与 Kotlin 1.6.0兼容
API 变更
- 清除了 androidx.core.view中的可为 null 性(I7078a、b/204917439)
- 添加了实验性 API,让用户可以将 PointerInputchange 作为一个整体使用,或检查是否已使用 PointerInputchange。(I2e59d)
- 在界面层中添加了对鼠标滚轮事件的支持。(Ia14eb、b/198214718)
- 添加了实验性 Modifier.composed重载,可接受用于比较相等性以及符合跳过优化条件的键。(Ice799、b/205851704)
- ComposeNotIdleException现在可从- Exception扩展,而不是直接从- Throwable扩展。请注意,这意味着捕获- Exception的 catch 子句现在可能会捕获- ComposeNotIdleException,而之前的 catch 子句并不会这样做。(I9c217)
bug 修复
- 修复了 IME 可见性发生变化时文本手柄不移动的问题。(I25f2e)
版本 1.1.0-beta03
2021 年 11 月 17 日
发布了 androidx.compose.ui:ui-*:1.1.0-beta03。版本 1.1.0-beta03 中包含这些提交内容。
API 变更
- 新添加了 Modifier.onPlaced 修饰符,允许观察展示位置更改。因此,可以根据观察到的展示位置变化对子修饰符的偏移量进行进一步更改。(I558fd)
- 移除了 InjectionScope.flush()和InjectionScope.dispose()。现在,系统会像以前一样在已调用的 perform*Input() 方法结束时刷新所有事件并对作用域进行处理。(I2bed8)
- 移除了 MultiModalInjectionScope.Touch和MultiModalInjectionScope.Mouse。要为多模态手势注入触摸和鼠标事件,现在可以使用MultiModalInjectionScope.touch()和MultiModalInjectionScope.mouse(),这两者都接受具有该模态的接收器作用域的 lambda。(Idde18)
bug 修复
- 现在会计算 TouchInjectionScope.swipeWithVelocity中durationMillis的默认值,以使滑动可行。(I19deb)
版本 1.1.0-beta02
2021 年 11 月 3 日
发布了 androidx.compose.ui:ui-*:1.1.0-beta02。版本 1.1.0-beta02 中包含这些提交内容。
API 变更
- 添加了实验性 BringIntoView API,可让您向父级发送请求,以便父级可以滚动将项目呈现到视图中(Ib918d、b/195353459)
- 新增了用于支持工具的动画 API。具体而言,工具可以使用这些 API 检查 Transition 中的动画及其配置。(I4116e)
外部贡献
- 添加了 Modifier.pointerHoverIcon (I95f01)
版本 1.1.0-beta01
2021 年 10 月 27 日
发布了 androidx.compose.ui:ui-*:1.1.0-beta01。版本 1.1.0-beta01 中包含这些提交内容。
API 变更
- 添加了实验性 BringIntoViewAPI,可让您向父级发送请求,以便父级可以滚动将项目呈现到视图中(Ib918d、b/195353459)
- 新增了用于支持工具的动画 API。具体而言,工具可以使用这些 API 检查 Transition 中的动画及其配置。(I4116e)
版本 1.1.0-alpha06
2021 年 10 月 13 日
发布了 androidx.compose.ui:ui-*:1.1.0-alpha06。版本 1.1.0-alpha06 中包含这些提交内容。
API 变更
- 从 ViewRootForInspector和LayoutInfo.ownerViewId中移除了ExperimentalComposeUiApi(I5c2e3)
- 为布局添加了无子项过载,提高了效率 (Ib0d9a)
- 从需要跨模块调用的 Composer 方法中移除了 InternalCompilerApi(I1aa0b)
- SemanticsNodeInteraction.performSemanticsAction现在会返回调用函数的- SemanticsNodeInteraction。(I9e5db)
- 添加了 LocalInputModeManager CompositionLocal,以检测 TouchMode/NonTouchMode。(I6a83c、b/175899786)
- 向 LayoutInfo添加了viewConfiguration: ViewConfiguration,以便使用者获取长按超时等指标的正确值。(I76ca6)- 向 InjectionScope添加了viewConfiguration: ViewConfiguration,以允许测试根据长按超时或触摸溢出等指标调整输入注入。
- 针对触摸输入和鼠标输入,将长按和点按两次的默认时长更改为基于 InjectionScope.viewConfiguration中的值。
 
- 向 
- 根据包含 TextField 和 DropdownMenu 的 ExposedDropdownMenuBox 实现了 ExposedDropdownMenu (If60b2)
- 将 dismissOnOutsideClick 添加到了 PopupProperties 中,以取代已废弃的 dismissOnClickOutside。新属性会接收点击位置和锚点边界,从而更精细地控制是否应调用 onDismissRequest。例如,这有助于防止在轻触锚点时锚点关闭。- 将 updateAndroidWindowManagerFlags 添加到了 PopupProperties 中,从而提供对弹出式窗口传递给 Android WindowManager 的标志的低级控制。Lambda 的参数将是根据产生 WindowManager 标记的 PopupProperties 值计算出的标记:例如 focusable。Lambda 的结果将是最终传递给 Android WindowManager 的标志。默认情况下,updateAndroidWindowManagerFlags 会使根据参数计算出的标志保持不变。仅当弹出式窗口具有非常具体的行为要求时,才应谨慎使用此 API。(I6e9f9)
 
- 废弃了 Recomposer.state,取而代之的是Recomposer.currentState,以将其类型更改为 StateFlow(Ic2ab3、b/197773820)
- 将 flush()和dispose()添加到了InjectionScope中。当您想立即清空所有已加入队列的事件时,以及当您想处置作用域时,可以分别使用这两个函数。(Ifb73a)
- 添加了 performScrollToNode(matcher: SemanticsMatcher),可将可滚动容器滚动到与给定匹配器所匹配的内容。(Ic1cb8)
- InjectionScope现在实现了- Density,让您在使用- performTouchInput等方法时能够在 px 和 dp 之间轻松转换。(I8fe1f)
bug 修复
- AndroidView 现在通过 ViewTreeLifecycleOwner 和 ViewTreeSavedStateRegistryOwner 将 LocalLifecycleOwner 和 LocalSavedStateRegistryOwner 传播到其视图中。(I38f96、b/179708470)
- 修复了 WearOS SwipeToDismissBox 有时不处理滑动的问题。(I9387e)
- 注入输入事件之间的默认时长已从 10 毫秒更改为 16 毫秒。这可能会改变执行输入手势(如特定滑动)的测试的结果。(I829fd)
版本 1.1.0-alpha05
2021 年 9 月 29 日
发布了 androidx.compose.ui:ui-*:1.1.0-alpha05。版本 1.1.0-alpha05 中包含这些提交内容。
API 变更
- 添加了对修饰符间通信的支持(Id5467、b/198826874)
- 为 PointerEventChange 添加了实验性历史指针。(Ic1fd8、b/197553056、b/199921305)
- 将 density: Density和layoutDirection: LayoutDirection添加到了LayoutInfo中。这样,LayoutInfo的使用者就可以正确解析LayoutInfo中公开的尺寸和位置。(I002f1)
- 添加了对注入鼠标事件的实验性支持。在通过 performMultiModalInput执行多模式输入手势的过程中,使用performMouseInput开始发送鼠标事件,或通过MultiModalInjectionScope的Mouse属性发送鼠标事件。如需查看可用 API 的文档,请参阅MouseInjectionScope。(Iaa4a8、b/190493367)
bug 修复
- 修复了可滚动组合项(无论是延迟还是非延迟)在滚动方面的可访问性支持 (I6cdb0)
- 改进了 TouchInjectionScope.swipeWithVelocity。它现在接受更广泛的输入变量,并会在无法创建滑动时建议对输入进行更改(I40fbe、b/182477143)
版本 1.1.0-alpha04
2021 年 9 月 15 日
发布了 androidx.compose.ui:ui-*:1.1.0-alpha04。版本 1.1.0-alpha04 中包含这些提交内容。
API 变更
- PointerEvent现在具有支持悬停事件的- PointerEventType。(I091fa)
- 允许子级接受父级的指针输入范围之外的指针输入。父级可以使用属性 PointerInputScope.alwaysInterceptChildEvents 拦截这些调用(I9eae3、b/192479655)
- 废弃了 performGesture和GestureScope,它们已被performTouchInput和TouchInjectionScope取代。(Ia5f3f、b/190493367)
- 向 SemanticsNode中添加了包含最小触摸目标尺寸的touchBoundsInRoot,以便开发者能够确保触摸目标满足无障碍功能最低要求。(I2e14b、b/197751214)
- 重新实现了 inspectable(I927bc、b/191017532)
- 更改了 inspectable 的参数名称,以匹配组合项(I3a482、b/191017532)
- 引入了 - performTouchInput和- TouchInjectionScope来替代- performTouchInput和- TouchInjectionScope,为其他模式(如鼠标)铺平了道路。- TouchInjectionScope的方法与- GestureScope相同,但- movePointerTo和- movePointerBy除外,它们已重命名为- updatePointerTo和- updatePointerBy。其他所有方法都相同。- TouchInjectionScope的行为与- GestureScope的行为几乎相同,但有以下两个细小差异:- 如果不发送移动事件就移动指针,然后发送按下事件(换言之,使用了 updatePointerTo(),但未使用move(),然后调用down()),以前的实现会使相应事件时间提前,并在发送按下事件之前发送移动事件。新的实现仍会发送移动事件,但在此具体情形下不会使该事件时间提前。
- 如果不发送移动事件就移动指针,然后发送释放事件(类似于上述操作),以前的实现会使相应事件时间提前,并在发送释放事件之前发送移动事件。新的实现不会执行这两种操作:指针的新位置只能通过释放事件来体现。
 - 最后, - TouchInjectionScope引入了新方法- currentPosition(pointerId: Int),以获取给定指针的当前位置。(If1191、b/190493367)
- 如果不发送移动事件就移动指针,然后发送按下事件(换言之,使用了 
bug 修复
- 在裁剪时允许将触摸目标边界扩展到裁剪区域之外,以适用最小的触摸目标。(I43e10、b/171509422)
- 在 Android 12 设备上添加了对拉伸滚动的支持。(Iccf3c、b/171682480)
版本 1.1.0-alpha03
2021 年 9 月 1 日
发布了 androidx.compose.ui:ui-*:1.1.0-alpha03。版本 1.1.0-alpha03 中包含这些提交内容。
新功能
- 更新了 Compose 1.1.0-alpha03,使其依赖于 Kotlin1.5.30。(I74545)
API 变更
- 添加了用于封装其他修饰符的 Modifier.inspectable。(I1909b、b/191017532)
- 添加了 BlurredEdgeTreatmentAPI,用以将模糊处理用例简化为更常用的“裁剪标志-TileMode”组合。大多数用例都包括:让经过模糊处理的内容在原始内容边界之外呈现,并使用透明黑色对这些边界之外的区域进行模糊处理,或者将内容裁剪到内容边界,以对超出内容边界的模糊内核的最近边缘进行采样。(I6b4b7、b/166927547)
- 添加了对 Compose 桌面中 RenderEffect 的支持。引入了 OffsetEffect 和模糊处理修饰符,作为一种向部分组合层次结构引入模糊处理视觉效果的简单方法。(I0f6aa、b/166927547)
- 引入了 RenderEffect API,可以选择在 Modifier.graphicsLayer上对其进行配置以更改层本身的内容。这可用于对组合层次结构中的可组合项和可组合子项的内容进行模糊处理。(I47c4d、b/166927547)
- AwaitPointerEventScope 现在具有 withTimeout() 和 withTimeoutOrNull()(I507f0、b/179239764、b/182397793)
- 向 ViewConfiguration 添加了最小触摸目标尺寸,用于在语义和指针输入中确保无障碍性。(Ie861c)
- 添加了 TileMode.Decal 支持,用于为基于模糊处理的 RenderEffect 定义边缘行为。(I7e8ed、b/166927547)
- performScrollToIndex、- performScrollToKey、- hasScrollToIndexAction和- hasScrollToKeyAction现在是稳定的 API(I142ae、b/178483889)
- 添加了用于获取裁剪边界的测试方法。(I6b28e)
bug 修复
- 从 BlurredEdgeTreatment 中移除了 isBounded 方法,从而明确检查形状参数是否为 null。(I85d68)
版本 1.1.0-alpha02
2021 年 8 月 18 日
发布了 androidx.compose.ui:ui-*:1.1.0-alpha02。版本 1.1.0-alpha02 中包含这些提交内容。
API 变更
- PointerEvent 现在支持读取鼠标按钮状态和键盘修饰符状态。(I6310c、b/180075467)
- 注入的手势现在使用 MainTestClock 的时间作为时间的可信来源。performGesture中注入事件的当前时间将初始化为 MainTestClock 的当前时间。(Ifb364、b/192064452)
- 添加了 DpRect(DpOffset, DpSize)构造函数(I2cf16、b/194219828)
- 添加了 DpSize 类(I7abb1、b/194219828)
bug 修复
- 更新了矢量图形 XML 解析,以支持将 ColorStateList 用作 VectorDrawables 中的根颜色着色属性。(I86915、b/195668138)
版本 1.1.0-alpha01
2021 年 8 月 4 日
发布了 androidx.compose.ui:ui-*:1.1.0-alpha01。版本 1.1.0-alpha01 中包含这些提交内容。
API 变更
- 现在,RelocationRequester.bringIntoView可以接受矩形作为参数,这让我们可以将可组合项的一部分呈现在视图中。(Ice2c5、b/194330245)
- AnimatedImageVector和相关 API 现在位于新的- androidx.compose.animation:animation-graphics模块中。(I60873)
- 添加了实验性修饰符来处理重定位请求。(I65a97、b/178211874)
- 引入了 BrushPainter API,以便支持在 Painter 中绘制任意 Brush(类似于 ColorPainter)。 - 更新了 Brush API,以使其具有一个在 BrushPainter 中查询的固有尺寸参数(Ia2752、b/189466433) 
- 已将消耗来源和目标 rect 的 DrawScope#drawImage 方法更新为消耗可选的 FilterQuality 参数。对于想要在针对基于像素的艺术作品扩大时呈现像素化风格的像素艺术作品而言,此变更非常有用。已将 BitmapPainter + Image 可组合项更新为还可以消耗可选的 FilterQuality 参数(Ie4fb0、b/180311607) 
- 添加了 - GestureScope.advanceEventTime方法,以便更好地控制手势中的事件时间 (Ibf3e2)
bug 修复
- 为了更好地支持链接绘制修饰符,请确保 Modifier.paint 实现会调用 drawsContent。以前,Modifier.paint 需要是修饰符链的叶节点,但是这样做会妨碍在可组合容器(如方框)上对其进行配置,或在其上添加其他装饰(如 Modifier.paint().border())。通过让 Modifier.paint 在绘制指定 Painter 的内容后调用 drawContent,我们可以在具有修饰符格式的行为中实现更好的行为一致性。(Ibb2a7、b/178201337、b/186213275)
- 对话框现在根据平台大小调整行为进行调整。将 usePlatformDefaultWidth设为 false 可替换此行为。(Iffaed、b/192682388)
- 将 InfiniteAnimationPolicy移到了 :compose:ui(I5eb09、b/160602714)
- 现在,通过延迟列表和常规滚动组件的语义操作执行滚动已具有动画效果(Id9066、b/190742024)
版本 1.0
版本 1.0.5
2021 年 11 月 3 日
发布了 androidx.compose.ui:ui-*:1.0.5。版本 1.0.5 中包含这些提交内容。
bug 修复
- 修复了跟踪 derivedStateOf 实例时出现的崩溃问题。(aosp/1792247)
版本 1.0.4
2021 年 10 月 13 日
发布了 androidx.compose.ui:ui-*:1.0.4。版本 1.0.4 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin 1.5.31
版本 1.0.3
2021 年 9 月 29 日
发布了 androidx.compose.ui:ui-*:1.0.3。版本 1.0.3 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin 1.5.30
版本 1.0.2
2021 年 9 月 1 日
发布了 androidx.compose.ui:ui-*:1.0.2。版本 1.0.2 中包含这些提交内容。
已更新,可支持 Compose 1.0.2 版本。Compose 1.0.2 仍与 Kotlin 1.5.21 兼容。
版本 1.0.1
2021 年 8 月 4 日
发布了 androidx.compose.ui:ui-*:1.0.1。版本 1.0.1 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin 1.5.21。
版本 1.0.0
2021 年 7 月 28 日
发布了 androidx.compose.ui:ui-*:1.0.0。版本 1.0.0 中包含这些提交内容。
1.0.0 的主要功能
这是 Compose 的第一个稳定版本。如需了解详情,请参阅官方 Compose 版本发布博客!
已知问题
- 如果您使用的是 Android Studio Bumblebee Canary 4 或 AGP - 7.1.0-alpha04/- 7.1.0-alpha05,可能会遇到以下崩溃问题:- java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"- 如需修复此崩溃问题,请暂时将 - build.gradle文件中的 minSdkVersion 提高到 24 及以上。此问题将在下一个版本的 Android Studio Bumblebee 和 AGP- 7.1中修复。(b/194289155)
版本 1.0.0-rc02
2021 年 7 月 14 日
发布了 androidx.compose.ui:ui-*:1.0.0-rc02。版本 1.0.0-rc02 中包含这些提交内容。
bug 修复
- 对话框现在根据平台大小调整行为进行调整。将 usePlatformDefaultWidth设为 false 可替换此行为。(Iffaed、b/192682388)
版本 1.0.0-rc01
2021 年 7 月 1 日
发布了 androidx.compose.ui:ui-*:1.0.0-rc01。版本 1.0.0-rc01 中包含这些提交内容。
新功能
- 将 ui-tooling 模块拆分为 ui-tooling和ui-tooling-preview(Iefa28、b/190649014)
API 变更
- 移除了已废弃的实验性 FocusManager#moveFocusIn和FocusManager#moveFocusOut(I227d7、b/170154986、b/186567354、b/168510304)
- Canvas 现在支持使用 contentDescription 参数来实现无障碍功能。(Ib547c)
- PopupProperties中的- useDefaultMaxWidth已重命名为- usePlatformDefaultWidth。(I05710)
- 对话框现在可以使用整个屏幕宽度。(I83929、b/190810877)
- 现在可以出于实验性目的使用 HSV 和 HSL 颜色表示法。(Id7cf8、b/180731008)
行为变更
- Compose @Preview现在提供了一个LocalActivityResultRegistryOwner,可让您预览使用rememberLauncherForActivityResult()等 API(其依赖于该现有所有者)的可组合项。(Ib13d1、b/185693006)
- Compose @Preview现在提供了一个LocalOnBackPressedDispatcherOwner,可让您预览使用BackHandler等 API(其依赖于该现有所有者)的可组合项。(Ia1c05、b/185693006)
bug 修复
- 将 InfiniteAnimationPolicy移到了androidx.compose.ui:ui(I5eb09、b/160602714)
- 为了更改模块结构,暂时移除了 AnimatedImageVector。(I41906、b/160602714)
版本 1.0.0-beta09
2021 年 6 月 16 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta09。版本 1.0.0-beta09 中包含这些提交内容。
API 变更
- 将枚举 Role 和 LiveRegionMode 更改为具有私有构造函数的内联类 (Id1890)
- KeyboardCapitalization 已转换为内联类。(Id5a1c)
- 将 HapticFeedbackType 更改为内联类。(I255ec)
- Modifier.pointerInteropFilter 现为 @ExperimentalComposeUiApi。(Iede6c)
- TextAlign、FontSynthesis 和 TextDirection 现已成为内联类。(I212fe)
- TextOverflow 已更改为内联类。(I433af)
- FontStyle 现已成为内联类。(I9e48b)
bug 修复
- 目前,键常量为 @ExperimentalComposeUiApi。在稳定阶段之前,消耗型代码可声明私有常量。(Ia5d48)
- 现在,Compose 测试可在 Robolectric 上运行。截至目前为止,已发现以下局限性:- 没有原生位图,因此 ImageBitmap()会引发 NullPointerException。
- 没有绘图操作,因此 captureToImage()会无限期地等待下一次绘图传递(即发生死锁)。
- 不会加载任何字体,因此无法正确测量任何文本。所有字符均具有 20 像素左右的固定高度和 1 像素的固定宽度。
- ComposeTestRule.waitUntil {}在等待时不运行主线程,因此它实际上与- ComposeTestRule.mainClock.advanceTimeUntil {}相同。预计今后还会发现更多局限性。(I284fa)
 
- 没有原生位图,因此 
添加了配置文件规则
此版本向以下 Compose 模块添加了配置文件规则 (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
什么是配置文件规则?
- 库的配置文件规则是在位于 - src/main或等效目录内的文本文件- baseline-prof.txt中指定的。该文件会每行指定一个规则,在此情况下,规则是指用于与库中的方法或类匹配的格式。这些规则的语法是使用- adb shell profman --dump-classes-and-methods ...时所用的便于用户看懂的 ART 配置文件格式的超集。这些规则采用两种形式,一种用于方法,一种用于类。
- 方法规则采用以下格式: - <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
- 类规则采用以下格式: - <CLASS_DESCRIPTOR>
- 其中, - <FLAGS>是- H、- S和- P中的一个或多个字符,用于指示相应方法应标记为“Hot”“Startup”还是“Post Startup”。
- <CLASS_DESCRIPTOR>是目标方法所属类的描述符。例如,类- androidx.compose.runtime.SlotTable的描述符为- Landroidx/compose/runtime/SlotTable;。
- <METHOD_SIGNATURE>是方法的签名,其中包含方法的名称、参数类型和返回值类型。例如,- LayoutNode中的- fun isPlaced(): Boolean方法具有签名- isPlaced()Z。
- 这些格式可以包含通配符( - **、- *和- ?),以便让单个规则能够涵盖多个方法或类。
规则的作用是什么?
- 如果某个方法具有 - H标志,则表示该方法为“hot”方法,应提前进行编译。
- 如果某个方法具有 - S标志,则表示系统会在启动时调用该方法,应提前进行编译,以避免在启动时耗费资源进行编译以及解析该方法。
- 如果某个方法具有 - P标志,则表示系统会在启动后调用该方法。
- 如果某个类出现在此文件中,则表示系统会在启动过程中使用该类,应在堆中预先分配该类,以避免耗费资源来加载它。 
运作方式
- 库可以定义要打包到 AAR 制品中的那些规则。如果事后构建了某个应用,并且其中包含这些制品,系统会将这些规则合并在一起,并使用合并后的规则来构建特定于该应用的紧凑二进制 ART 配置文件。然后,当设备安装该应用后,ART 就可以利用此配置文件来预先编译应用的特定部分,从而提升应用性能,特别是首次运行时的性能。请注意,这对可调试应用没有任何影响。
版本 1.0.0-beta08
2021 年 6 月 2 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta08。版本 1.0.0-beta08 中包含这些提交内容。
API 变更
- NestedScrollSource枚举已替换为内联类。(Ie321b、b/187055290)
- FocusManager.clearFocus(forcedClear = true)重命名为- FocusManager.clearFocus(force = true)(Ia0c41)
- 将一些枚举使用情况重构成了内联类,以免在添加新枚举值时 when 语句出现穷举语问题。(I2b5eb)
- 从 PopupProperties中移除了@ExperimentalComposeUiApi。(I01fa6)
- PointerType已从枚举更改为内联类 (If5058)
- ContentDescription 和 Text 语义属性不再是单个值,而是列表。这样一来,它们便可原样合并而无需串联。还提供了更好的测试 API 来支持这些更改(Ica6bf、b/184825850)
- 废弃了 Modifier.focusModifier(),由Modifier.focusTarget()取代 (I6c860)
- Modifier.onSizeChanged()和- Modifier.onGloballyPositioned()不再是内联函数(I727f6、b/186109675)
- KeyboardType枚举已替换为内联类。(I73045、b/187055290)
- 将 FocusState枚举替换成了FocusState接口(Iccc1a、b/187055290)
- 将 ImeAction 枚举替换成了内联类。(I18be5、b/187055290)
- PlaceholderVerticalAlign已转换为内联类。(If6290)
- TextUnitType 现在为内联类。(I4cba9)
- AnnotatedString.withAnnotation函数现为 ExperimentalTextApi,而非 ExperimentalComposeApi。(I0cd0a)- 包含 TextUnitType 的 TextUnit 构造函数现为 ExperimentalTextApi,而非 ExperimentalComposeApi。
 
bug 修复
- 我们已修复 beta07 中的 bug,即滚动浏览后 LazyColumn/Row 项显示不完整(I8c9ac、b/188566058)
- 现在,detectDragGesures、detectVerticalGestures和detectHorizontalGestures将自动执行位置更改,无需在 onDrag 回调中调用 change.consumePositionChange(I42fc4、b/185096350、b/187320697)
- LayoutModifiers 的对齐行问题已经修复。更改子级的对齐行时,父级不会重新测量的 bug 已得到修复。(I4401f、b/174315652)
- 更改了 Modifier.onGloballyPositioned();更改后,系统会报告此修饰符在修饰符链中的坐标,而不会报告在应用所有修饰符后的布局坐标。这意味着,修饰符的顺序现在会影响系统报告什么坐标。(Ieb67d、b/177926591)
版本 1.0.0-beta07
2021 年 5 月 18 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta07。版本 1.0.0-beta07 中包含这些提交内容。
API 变更
- 添加了可在检查器中使用的 ViewRootForInspector接口 (Ib70df)
- SubcomposeLayoutState现在支持设置可重复使用的槽数。布局会使多达此数量的槽保持活跃状态,而不是处置它们,以便在下一次我们需要新槽时可以重复使用 (Ieb981)
- KeyEventType 枚举已替换为内联类。(Id670a、b/187055290)
- FocusDirection枚举已替换为内联类。(Ib6d03、b/187055290、b/184086802)
- 引入了提升 SubcomposeLayout 状态的功能,让您可以将内容预先合成为需要的 slotId,这将加快下一次度量遍历的速度,因为下次我们尝试使用给定 slotId 进行子合成时,将无需进行合成。(I42580、b/184940225)
- 添加了裁剪选择手柄(Iff80d、b/183408447)
- 移除了与 LayoutInspector 支持相关的未使用 API。(I2ac78)
bug 修复
- LazyColumn/Row 现在最多会使 2 个之前可见的项保持活跃状态(不予处置),即使它们已滚动出边界也是如此。这样一来,当我们需要合成新项时,该组件便可重复使用活跃的子组合,从而改善滚动性能。(Ie5555)
- 将按给定方式应用 AnnotatedString上的TextGeomerticTransform和TextDecoration。(I61900、b/184760917)
版本 1.0.0-beta06
2021 年 5 月 5 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta06。版本 1.0.0-beta06 中包含这些提交内容。
API 变更
- 解决了与导航手势冲突的问题 (I1145e)
- @ComposeCompilerApi不再- @RequiresOptIn(Iab690)
- 添加了 CollectionInfo 和 CollectionItemInfo 无障碍功能 API,用于针对无障碍服务标记集合及其项(Id54ef、b/180479017)
- 添加了 SemanticsActions.ScrollToIndex,用于将包含已编入索引的项的列表滚动到包含具有特定索引的项;还添加了SemanticsProperties.IndexForKey,用于获取包含键控项的列表中的某个项的索引。这两项操作都通过 LazyList 实现。- 添加了 SemanticsNodeInteraction.performScrollToIndex,用于将列表滚动到指定的索引;还添加了SemanticsNodeInteraction.performScrollToKey,用于将列表滚动到具有指定键的项。(I4fe63、b/178483889、b/161584524)
 
- 添加了 
- 向 GraphicLayerInfo 添加了 ownerViewId (I19f62)
- 添加了 Font() 过载,以便从资源、File 和 FileDescriptor 加载字体 (I5d382)
- 添加了无障碍功能 API error,用于标记包含无效输入的节点(I12997、b/180584804、b/182142737)
- 添加了 Font()过载,用于从资源、File 和 FileDescriptor 加载字体 (I43007)
- 支持向 TextFieldValue.Saver保存 AnnotatedString。向AnnotatedString.Builder添加了addTtsAnnotation和 withAnnotation 实用函数(I8cbdc、b/178446304)
- 添加了 TextUnit 构造函数 TextUnit(value: Float, type: TextUnitType)(I7ecce、b/178446304)
版本 1.0.0-beta05
2021 年 4 月 21 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta05。版本 1.0.0-beta05 中包含这些提交内容。
API 变更
- 添加了实验性 FocusManager.moveFocus(In)和FocusManager.moveFocus(Out)(Ic5534、b/183746743)
- 添加了实验性 performTextInputSelectionAPI(I2dcbb、b/178510628)
- 公开了 InputEventCallback接口。任何公共 API 中均无法使用该接口;并且,在代码中也用不到该接口。(I34a02、b/184003208)
- 废弃了 TextLayoutResult/createTextLayoutResult函数。这是一个未使用的公共函数,添加此函数只是为了测试使用,对 Compose 文本 API 而言毫无用处。该函数现已废弃,日后将被移除。(I80413)
bug 修复
- 修复了 ACTION_SCROLL_FORWARD、ACTION_SCROLL_BACKWARD、accessibilityActionScrollLeft、accessibilityActionScrollUp、accessibilityActionScrollRight和accessibilityActionScrollDown无障碍滚动操作。现在,系统会在一个接一个的屏幕上沿指定方向滚动,而不是滚动到可滚动范围的末尾。(Ieccb0)
- ui-test-manifest 和 ui-tooling-data 中的 AndroidManifest 文件现在与 Android 12 兼容(I6f9de、b/184718994)
版本 1.0.0-beta04
2021 年 4 月 7 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta04。版本 1.0.0-beta04 中包含这些提交内容。
API 变更
- 将 SoftwareKeyboardController上的hideSoftwareKeyboard和showSoftwareKeyboard分别重命名为了hide()和show()。- 为 LocalSoftwareKeyboardController 提供了完整的 CompositionLocal 接口,以便对其进行设置(这在测试中尤其有用)(I579a6)
 
- 添加了 LiveRegion 无障碍 API。 如果节点被标记为动态区域,无障碍服务将自动通知用户相应变更(Idcf6f、b/172590946)
- 引入了 TextOverflow.Visible。(Ic8f89)
bug 修复
- 修复了边缘上的 LazyColumn/LazyRow项在快速滑动后位置不正确的问题(Ie4d13、b/183877420)
- 现在,从 Compose 层次结构中移除 AndroidViewBinding后,AndroidViewBinding可以正确移除通过FragmentContainerView膨胀的 fragment。(Ib0248、b/179915946)
- 现在,当您的 ComposeView位于Fragment内时,AndroidViewBinding会正确嵌套通过FragmentContainerView膨胀的 fragment,从而修复了保存并恢复这些 fragment 的状态时出现的问题。(I70eb0、b/179915946)
- Compose ViewBinding 现在依赖于 Fragment 1.3.2,在配置更改后能够保持一致地显示通过FragmentContainerView膨胀的 fragment。(I0743d、b/179915946)
版本 1.0.0-beta03
2021 年 3 月 24 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta03。版本 1.0.0-beta03 中包含这些提交内容。
API 变更
- 延迟检查 ComposeView 的 ViewTree 依赖项(I8dbbf、b/182466548)
- 在 GestureScope中的swipeUp/swipeDown/swipeLeft/swipeRight函数中添加了startX/endX和startY/endY参数。(I49e2d、b/182063305)
版本 1.0.0-beta02
2021 年 3 月 10 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta02。版本 1.0.0-beta02 中包含这些提交内容。
API 变更
- 添加了新的 LocalSoftwareKeyboardController本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I5951e、b/168778053)
- 添加了新的 LocalSoftwareKeyboardController本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I84472、b/168778053)
- 移除了以下 SemanticsMatcher:- hasWidth(width, tolerance)
- hasHeight(height, tolerance)
- hasLeftPosition(left, tolerance)
- hasTopPosition(top, tolerance)
- hasRightPosition(right, tolerance)
- hasBottomPosition(bottom, tolerance)(If16bd)
 
- 将以下 SemanticsMatchers标记为 @ExperimentalTestApi:- hasWidth(width, tolerance)
- hasHeight(height, tolerance)
- hasLeftPosition(left, tolerance)
- hasTopPosition(top, tolerance)
- hasRightPosition(right, tolerance)
- hasBottomPosition(bottom, tolerance)(Ia600c)
 
- 添加了以下 SemanticsMatcher:- hasWidth(width, tolerance)
- hasHeight(height, tolerance)
- hasLeftPosition(left, tolerance)
- hasTopPosition(top, tolerance)
- hasRightPosition(right, tolerance)
- hasBottomPosition(bottom, tolerance)(I2f502)
 
bug 修复
- 对实验性 API 的公开使用施加了限制(I6aa29、b/174531520)
- androidx.compose.ui:ui不再依赖于 AppCompat 或 fragment。如果您在应用中使用 ComposeView,并且使用 Fragment 和/或 AppCompat,请确保您使用的是 AppCompat 1.3+/Fragment 1.3+。必须使用这些版本才能正确设置 ComposeView 所需的生命周期和已保存状态所有者。(I1d6fa、b/161814404)
- 修复了 rememberSaveable { mutableStateOf(0) }在 navigation-compose 的目标内使用时损坏的问题。(I1312b、b/180042685、b/180701630)
- 添加了新的 LocalSoftwareKeyboardController本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I658b6、b/168778053)
- 修复了 ComposeRootRegistry的tearDownRegistry()中很罕见的 NoSuchElementException (Iddce1)
版本 1.0.0-beta01
2021 年 2 月 24 日
发布了 androidx.compose.ui:ui-*:1.0.0-beta01。版本 1.0.0-beta01 中包含这些提交内容。
这是 Compose 1.0.0 Beta 版的第一个版本。
API 变更
- 向 detectDragGestures添加了 onStart 回调(I67269、b/179995594)
- 用于调整为固有尺寸的修饰符不再处于实验阶段。(I15744)
- MeasureBlocks 已重命名为 MeasurePolicy,并成为一个函数接口。更新/简化了 Layout API,以便使用 MeasurePolicy。(Icab48、b/167662468、b/156751158)
- InteractionState已替换为- [Mutable]InteractionSource- 接口负责发出/收集 Interaction 事件。
- 应使用 interactionSource = remember { MutableInteractionSource() },而不是将interactionState = remember { InteractionState() }传递给Button和Modifier.clickable()等组件。
- 应改用 InteractionSource 的扩展函数,比如 InteractionSource.collectIsPressedAsState(),而不是使用 Interaction.Pressed in interactionState。
- 对于复杂用例,您可以使用 InteractionSource.interactions 来观察互动流。如需了解详细信息,请参阅 InteractionSource 文档和示例。
- (I85965、b/152525426、b/171913923、b/171710801、b/174852378)
 
- 在 CompositionLocals 中添加了 AccessibilityMananger 接口和 LocalAccessibilityMananger (I53520)
- 移除了已废弃的 LayoutCoordinates 方法,使用函数代替 positionInParent 和 boundsInParent 的属性(I580ed、b/169874631、b/175142755)
- 已使用基础类型替换类型别名:
- ColorStop现在为- Pair<Float, Color>
- SpanStyleRange现在为 `AnnotatedString.Range
- ParagraphStyleRange现在为- AnnotatedString.Range<ParagraphStyle>
- StringAnnotation现在为- AnnotatedString.Range<String>
- (I8dd1a)
 
- 为低级别文本组件(例如 CoreTextField)的输入会话创建了新的 TextInputSession。(I8817f、b/177662148)
- Placeable 现在公开了 measuredSize,表示实际测量的子布局的大小。该大小可能不遵循测量约束。(Ib2729、b/172560206、b/172338608)
- 添加了 selectionGroup 修饰符,允许为提供无障碍功能而标记 Tab 或 RadioButton 的集合 (Ie5c29)
- compositionLocalOf和- staticCompositionLocalOf的- defaultFactory现在是必需项,而非可选项。- 这项变更消除了不可为 null 的类型(不提供默认出厂设置)可能存在的类型错误。之前,此操作会为不可为 null 的类型提供 null 引用值。 - 对于可为 null 的类型,请考虑提供 - { null }作为默认出厂设置。- 除非可提供合理的默认设置,否则我们不建议使用具有不可为 null 的类型的本地设置。如果不存在合理的默认设置,则 - defaultFactorylambda 应抛出异常。不过,抛出异常意味着本地设置的使用者将隐式依赖于相关设置是以类型系统不强制执行该设置为前提的。(Ifbd2a)
- 从 ui 模块中移除了已废弃的方法 (I646f6) 
- 重命名了尺寸修饰符。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。(I5b414) 
- 移除了 - Modifier.tapGestureFilter。现改用- Modifier.pointerInput { detectTapGestures(...) }。(I266ed、b/175294473)
- 已从指针输入系统中移除了部分消耗。协调部分消耗的推荐方法是使用 Modifier.nestedScroll。(Ie9c9b) 
- Orientation 已移至 foundation 软件包。VelocirtTracker 已从 ui.gesture 移至 ui.input.pointer。(Iff4a8、b/175294473) 
- imageResource 和 vectorResource 现在分别是 ImageBitmap 和 ImageVector 伴生函数的扩展函数。已删除 - load{Image,Vector,Font}Resource函数。(I89130)
- 已移除 AnimationClockObservable 和子类。已移除 AnimatedFloat。(Icde52、b/177457083) 
- 已将 Provider 重命名为 CompositionLocalProvider - Composition 构造函数不再接受键参数,并已废弃。
- currentCompositeKeyHash 已变为可组合的顶级属性,而不是可组合的顶级函数。
- CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空间
- ComposableLambda 已成为接口,而不再是具体的类,也不再包含类型参数。
- ComposableLambdaN 已成为接口,而不再是具体的类,也不再包含类型参数。
- snapshotFlow 函数已移至 androidx.compose.runtime 命名空间
- SnapshotMutationPolicy 的合并方法不再是实验性方法
- 移除了 @TestOnly 顶级 clearRoots 函数。不再需要此函数。
- 移除了 keySourceInfoOf 和 resetSourceInfo 函数。不再需要这些方法。
- 移除了 Composer.collectKeySourceInformation。不再需要此函数。
- 移除了 isJoinedKey、joinedKeyLeft 和 joinedKeyRight 方法。不再需要这些方法。
- 各种顶级 API 均已移至不同的文件中并进行了重新整理。由于 Kotlin 的文件类语义,这会破坏二进制文件兼容性,但不会破坏源代码兼容性,因此对大多数用户来说这不会成为一个问题。
- (I99b7d、b/177245490)
 
- 从 compose:ui 中移除了 - ComponentActivity.setContent()。请使用- androidx.activity:activity-compose:1.3.0-alpha01中的相应函数。从 compose:ui 中移除了- viewModel()和- LocalViewModelStoreOwner。请使用- androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01中的相应函数 (I6f36b)
- 重新设计了 Modifier.scrollable。现在它使用 Scrollable 接口,而不是 ScrollableController 类(I4f5a5、b/174485541、b/175294473) 
- 现在 PointerInputModifier 不再支持 CustomEvens(I02707、b/175294473) 
- SnapshotStateObserver 不再处于实验阶段 (Id2e6a) 
- 删除了一些先前已废弃的 API(Ice5da、b/178633932) 
- 移除了 longPressGestureFilter 和 doubleClickGestureFilter。将 Modifier.pointerInput 与辅助函数(例如,detectTapGestures)配合使用(I2fedf、b/175294473) 
- 移除了各种 toString 方法中 String.format API 重构的用例,以便不在内部利用 String.format。(Id1290) 
- 移除了 dp 断言 (I798d2) 
- 移除了 androidx.compose.runtime:runtime-dispatch (I55feb) 
- 文本操作现在会自动检查焦点(I13777、b/179648629) 
- 移除了 - runBlockingWithManualClock(I15cdc、b/179664814)
- Modifier.verticalScroll()/horizontalScroll() 中的滚动位置现在通过 Int 表示 (I81298) 
- FlingConfig 已重命名为 FlingBehavior,现在允许自定义挂起动画,而不是预定义 Decay。(I02b86、b/175294473) 
- 添加了一个辅助函数,有助于为所有 ImeAction 回调设置相同的操作(I63447、b/179226323) 
- 从所有文本字段中移除了 SoftwareKeyboardController 回调,很快将被新的 API 替代。(Iae869、b/168778053) 
- 不再使用并移除了 FontSpan 和 FontWeigthStyleSpan。(Ie5b56、b/177423444) 
- 进行了以下 Material API 方面的更改: - 向 Top/BottomAppBar 添加了 contentPadding 参数,以允许自定义默认内边距。
- 对 BackdropScaffold 中的参数进行了重新排序,以便遵循 API 指南中关于将必需参数排在可选参数前面的要求。
- 将 BottomNavigationItem 中的 icon参数移到了selected和onClick后面。
- 将 BottomNavigationItem 中的 alwaysShowLabels参数重命名为了alwaysShowLabel。
- 将几个组件中的 bodyContent参数重命名为了content。
- 对 ButtonDefaults.buttonColors()中的参数进行了重新排序。请注意,由于参数的类型并未更改,因此这不会导致您的代码出现错误。请确保您使用的是命名参数或手动更新相关排序,否则您的代码将无法像以前一样运行。
- 向 darkColors()添加了secondaryVariant参数。此颜色通常与深色主题中的secondary相同,添加此参数是为了保持一致性和便于进行进一步的自定义。
- 从公共 API Surface 中移除了 ElevationDefaults 和 animateElevation(),因为它们不常用/不实用。
- 将 Slider中的onValueChangeEnd重命名为了onValueChangeFinished,并使其可为 null。
- 将 Snackbar中的text参数重命名为了content以确保一致性。
- 向 DropdownMenuItem添加了contentPadding参数,以允许自定义默认内边距,并将content设为了RowScope上的扩展。
- 将 ModalDrawerLayout重命名为了ModalDrawer。
- 将 BottomDrawerLayout重命名为了BottomDrawer。
- (I1cc66)
 
bug 修复
- 添加了用于在 Compose 中使用 AnimatedVectorDrawable 资源的 API。使用 animatedVectorResource 将 <animated-vector>XML 作为 AnimatedImageVector 加载,并通过 painterFor 为其添加动画效果 (I8ea91)
- 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以替换 TextField 上的旧 SoftwareKeyboardController 接口。(I658b6、b/168778053)
版本 1.0.0-alpha12
2021 年 2 月 10 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha12。版本 1.0.0-alpha12 中包含这些提交内容。
API 变更
- 从 UiApplier 移除了对 ViewGroup 的支持。移除了废弃的 emitView 可组合项。(Ifb214)
- Modifier.pointerInput 现在需要 remember 键来指示指针输入检测协程何时应重启以建立新的依赖项。(I849cd)
- CompositionReference 已重命名为 CompositionContext (I53fcb)
- Bounds 已重命名为 DpRect (I4b32a)
- 测试更新:hasText() 将检查文本字段中的输入和标签/提示/占位符文本 (Iab803)
- viewModel() 可组合项和 LocalViewModelStoreOwner 已移至 androidx.lifecycle.viewmodel.compose。现在,您需要添加一个独立依赖项 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 才能使用它。(I7a374)
- 允许在 AccessibilityAction 中执行可为 null 的操作,并将 AccessibilityAction 和 CustomAccessibilityAction 中的操作标签从 CharSequence 更改为 String (I0dc82)
- 为了更好地匹配 ImageBitmap 和 ImageVector 的命名惯例,ImagePainter 已重命名为 BitmapPainter,以并行使用 VectorPaperer。(Iba381、b/174565889)
- 现在使用 substring 作为参数,改进了 substring 测试 API (Icbe78)
- 添加了 Modifier.focusOrder(),它接受 FocusRequester,而无需为自定义焦点顺序指定 lambda。如果您只需要为可组合项指定引用,而无需为其指定自定义焦点顺序,这会非常有用(I4f52a、b/179180978)
- ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(Icf416)
- 解构声明和 copy() 方法在多个类中已很少用到,已将其从这些类中移除。(I26702、b/178659281)
- 已将 Popup 移为平台专用。AndroidPopupProperties 已重命名为 PopupProperties,isFocusable已移至PopupProperties中的focusable参数 (Ieeea5)
- 已将 Dialog 移为平台专用。AndroidDialogProperties 已重命名为 DialogProperties。(I4ef69、b/179138130)
- 已将 LayoutNode 变为内部类(I8a7b1、b/175103944)
- Constraints.enforce 已替换为 Constraints.constrain。(I8b8ea)
- 废弃了 loadFontResource,请改用 fontResource。废弃了 imageResource、loadImageResource、vectorResource 和 loadVectorResource,请改用 painterResource。(I6b809)
- 出于性能方面的原因,ScrollAxisRange 语义现在接受返回浮点数的 lambda,而不是直接使用浮点值。(If4a35、b/178657186)
- 添加了 EditableText 语义,用于标记文本字段的可修改输入文本,以提供无障碍服务,同时提供相应测试方法用于检查语义 (I8e07a)
- 已将 OwnerLayer/OwnerScope/OwnerSnapshotObserver 变为内部函数(I4ffaf、b/175103944)
- toIntPx() 已重命名为 roundToPx()。(I9b7e4、b/173502290)
- IntBounds 已重命名为 IntRect,相应 API 也得以改进。(I1f6ff)
- 更新了 Snapshot API 以使其更加符合 API 指南,并在公共 API 中隐藏了内部实现类。(Id9e32)
- 添加了展开和收起语义操作。在 ModalBottomSheetState 中添加了 expand 和 halfExpand (Ib5064)
- 已废弃 Modifier.dragGestureFilter,请改用 Modifier.pointerInput { detectDragGestures (...)}。或者,针对单轴拖动使用 Modifier.draggable(I0ba93、b/175294473)
- 已重命名 Ambient,以与 Ambient 重命名为 CompositionLocal 匹配。Ambient 过去被命名为 AmbientFoo,现在 CompositionLocal 被命名为 LocalFoo。(I2d55d)
- 现已移除已废弃的 BaseTextField,请改用 BasicTextField。(I71368)
- 将 Selection 移到了 foundation 中。(I7892b)
- 现在提倡 remember { mutableStateOf(0) }这样的用法,我们将移除savedInstanceState { 0 }可组合项,与之前移除state { 0 }可组合项的方式类似。您应改用rememberSaveable { mutableStateOf(0) },如果 MutableState 中使用的类型可以存储在 Bundle 中,它将会自动保存和恢复。如果您以前传递的是自定义 Saver 对象,那么您现在需要使用 rememberSaveable 的新重载,该新重载具有stateSaver参数。用法将如下所示:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }(Ib4c26、b/177338004)
- 添加了密码语义,以提供无障碍服务 (I231ce)
- 添加了 ProgressBarRangeInfo.Indeterminate,用于标记针对无障碍服务的不确定进度条 (I6fe05)
- 已废弃 emptyContent()和(@Composable () -> Unit).orEmpty()实用程序,因为它们不再具有任何积极的性能影响或价值 (I0484d)
- snapshotFlow和- withMutableSnapshot不再是实验性方法 (I6a45f)
- 现在可以关闭 Recomposer。关闭的 Recomposer 会继续重组,直至组合子协程完成。Recomposer.shutDown 已重命名为 cancel,与 close 形成对比。(Ib6d76)
- UiSavedStateRegistry 已重命名为 SaveableStateRegistry,AmbientUiSavedStateRegistry 已重命名为 AmbientSaveableStateRegistry,并且两者都已移至 androidx.compose.runtime.saveable 软件包。(I30224)
- Artefact androidx:compose:runtime:runtime-saved-instance-state 已重命名为 androidx:compose:runtime:runtime-saveable (I6dcac)
- 删除了 ui 软件包中很多长期废弃的 API。(I2f2dc)
- 现已废弃 compose:runtime-dispatch 制品。现在,MonotonicFrameClock 位于 compose:runtime 中,AndroidUiDispatcher 位于 compose:ui 中。(Ib5c36)
- Outline.* 类不再是数据类(I4879e、b/178001427)
- 移除了 view.captureToImage(),且未提供任何替换项。(I7fcd2)
- 引入了 ColorMatrix API,用于修改源内容的 RGB 值。将 ColorFilter API 重构为一个接口,并与 PathEffect 的实现匹配。(Ica1e8)
- 已将 layoutDirection 参数添加到 Shape 的 createOutline 中。这样便可支持创建布局方向感知形状。(I57c20、b/152756983)
- 已废弃 onImeActionPerformed,请改用 KeyboardActions(If0bbd、b/179071523)
- 引入了将应用于无限动画的 InfiniteAnimationPolicy协程上下文元素。默认情况下,除非使用ComposeTestRule运行测试,否则系统不会安装任何政策。(I50ec4、b/151940543)
- canDrag 已从 Modifier.scrollable 中移除。(Id66e7、b/175294473)
- 已将 LayoutCoordinates.parentCoordinates 重命名为 LayoutCoordinates.parentLayoutCoordinates,以允许使用新属性 parentCoordinates。parentCoordinates 属性现在提供父级修饰符的 LayoutCoordintes。这可以为 onSizeChanged() 和 onGloballyPositioned() 提供更完整的用例(Idfbfd、b/177926591)
- 废弃了 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicationGestureFilter。改为将 Modifier.clickable 或 Modifier.pointerInput 与 detectTapGestures 函数一起使用。(I6baf9、b/175294473)
- 已移除 SaveableStateRegistry 的 unregisterProvider。现在,registerProvider() 会改为返回 SaveableStateRegistry.Entry 对象,您可以使用该对象取消注册(Ic4274、b/178583739)
- rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 软件包。(I1366e、b/177338004)
- 从公共 API 中移除了 CoreText 和 CoreTextField
- 移除了已废弃的 SelectionContainer 重载
- (I99c19)
 
- 在直接添加到 WindowManager 或直接从中移除的层次结构中使用 Compose 的测试现在更加稳定。(Ie81ed、b/175765614)
- 移除了 Recomposer.current()。[Abstract]ComposeView 现在默认设置为延迟创建的、作用域为窗口的 Recomposer(由窗口的 ViewTreeLifecycleOwner 驱动)。在主机生命周期结束时,系统会暂停重组和基于 withFrameNanos 的动画 tick 操作。(I38e11)
- Recomposer.runningRecomposers 现在提供只读 RecomposerInfo 的一个全局 StateFlow,用于观察进程中正在进行的组合状态。请首选此 API 而不是 Recomposer.current(),后者现在已废弃。(If8ebe)
- Saver、listSaver()、mapSaver()、autoSaver 已从 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6)
- EditCommands 接受 AnnotatedString。但是,这是只针对 API 的更改,尚未实现多样式文本编辑。(I4c3ea)
- 移除了 Uptime 和 Duration。(Ib9bf4、b/177420019)
- 已将 CompositionData.asTree() 及相关 API 移至单独的 ui-tooling-data 模块,并标记为实验性 (Ic95b8)
- RounderCornerShape、CutCornerShape 和 CornerBasedShape 中的参数已从 left/right 重命名为 start/end,以支持 Shape 在 RTL 方向的自动镜像。对于不需要自动镜像的情况,引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape。(I61040、b/152756983)
- 已重构 Compose 编译器插件面向的 API,旨在使用接口而不是具体类。接口也不再使用类型参数。 - 这种内部更改不会影响源代码兼容性,但这是一项重大的二进制文件更改。(I3b922、b/169406779) 
- 移除了无意中公开的 StringBuilder.deleteAt 函数 (Id6ed9) 
bug 修复
- 现在,放置在视图层次结构中的 ComposeView 是另一个组合项的子级,现在会托管其祖先的子级组合项 (I92883)
- 更新了 Compose 的 imageFromResource API,以便在加载 ImageBitmap 对象时重复使用资源可绘制对象缓存。(If3627、b/178751994)
版本 1.0.0-alpha11
2021 年 1 月 28 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha11。版本 1.0.0-alpha11 中包含这些提交内容。
API 变更
- 已将 WithConstraints 重新设计为 BoxWithConstraints 并移至 foundation.layout。(I9420b、b/173387208)
- 废弃了 Key.DPadUp,并改用 Key.DirectionUp。(Iab335、b/177954892)
- 从现在起所有者界面仅供内部使用。(If8e35)
- 添加了 FocusManager.moveFocus() API,用于通过编程方式移动焦点。(I045cb、b/177681839)
- 将 PopupPositionProvider 更改为使用窗口相对坐标,而不是全局坐标。将 parentGlobalBounds 重命名为 anchorBounds,并将 windowGlobalBounds 更改为 windowSize:IntSize (I2994a)
- Duration 和 Uptime 将替换为 Long 毫秒值,此步骤消除了指针输入对这些类的依赖。(Ia33b2、b/175142755、b/177420019)
- 添加了 AmbientSavedStateRegistryOwner,添加方式与现有的 AmbientLifecycleOwner 和 AmbientViewModelStoreOwner 类似(I9a3e8、b/176756365)
- 更新了 Vector Graphics API,以支持解析对矢量图形根应用的色调调节。(Id9d53、b/177210509)
- 向 PointerInputChange 添加了 toolType,以区分设备(Iac787、b/175142755)
- 已将 AmbientWindowManager 重命名为 AmbientWindowInfo(I2686a、b/177084714、b/177084983)
- 废弃了全局坐标方法,并新增了基于窗口的坐标方法。(Iee284)
- 添加了 Modifier.toolingGraphicsLayer,用于在开启检查时添加图形层修饰符。(I315df)
- FocusRequester.createRefs 现在被标记为实验性,因为它可能会发生变化。(I2d898、b/177000821)
- 已将 SemanticsPropertyReceiver.hidden 重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。已将 AccessibilityRangeInfo 重命名为 ProgressBarRangeInfo。已将 stateDescriptionRange 重命名为 progressBarRangeInfo。已将 AccessibilityScrollState 重命名为 ScrollAxisRange。已将 horizontalAccessibilityScrollState 重命名为 horizontalScrollAxisRange。已将 verticalAccessibilityScrollState 重命名为 verticalScrollAxisRange。(Id3148)
- 移除了 PointerInputData 并修改了 PointerInputChange,以为其指定 PointerInputData 的所有字段。已将 PointerInputEvent 和 PointerInputEventData 变成内部类,因为它们不会在任何公共 API 中使用。(Ifff97、b/175142755)
- 更新了 GraphicsLayerScope 实现密度,以支持将 dp 转换为原始像素。(Ied528、b/176819695)
- 更新了 Matrix API,以遵循行主要排序,并提供索引常量,以帮助在不同的矩阵表示法之间转换,从而在内部匹配 SkMatrix 和 Matrix4 之间的框架转换逻辑。(I432e6)
- 移除了实验性 monotonicFrameAnimationClockOf 方法(Ib753f、b/170708374)
- 将 String.fintPrecedingBreak 和 String.fingFollowingBreak 移至 InternalTextApi。(I657c4)
- 从公共 API 中移除了 androidx.compose.ui.util.isSurrogatePair。(Ia9494)
- 已将 TransformedText.transformedText 重命名为 TransformedText.text- TransformedText 不再是数据类 (Ie672a)
 
- 从以下类中移除了 data class:- InlineTextContent
- LocaleList (I605c7)
 
- 以下类不再是数据类:
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
 
- 已将 VisualTransformation 变为功能接口 (I3bba4)
- 添加了函数引用参数类型 (I5e1bd)
- 将转换后的边界添加到 InspectorNode (Ice42f)
bug 修复
- onCommit、onDispose 和 onActive 已废弃,取而代之的是 SideEffect API 和 DisposableEffect API (If760e)
- 对 Font/FontFamily/Typeface 的工厂函数的更改 - 添加了以大写字母开头的工厂函数
- 废弃了以前使用小写字母开头的工厂函数
- 新的工厂函数会返回 FontFamily,而非子类
- 隐藏了子类的构造函数,以便只能通过工厂函数构造子类。
- 已将 Font.asFontFamily 重命名为 Font.toFontFamily (I42aa7)
 
- 引入了 - ComposeContentTestRule,用于扩展- ComposeTestRule并定义- setContent(已从- ComposeTestRule中移除)。添加了工厂方法- createEmptyComposeRule()。该方法会返回- ComposeTestRule,且不会为您启动 activity。如果您想在测试期间启动您的 activity(例如使用- ActivityScenario.launch),请使用此方法(I9d782、b/174472899)
- animateAsState 现为 animateFooAsState,其中 Foo 是添加动画效果的变量的类型。例如 Float、Dp、Offset 等 (Ie7e25) 
- 向 Image 和 Icon 添加了内容说明参数,用于提供对无障碍服务的说明 (I2ac4c) 
- 移除了 displaySize,以免使用此大小。通常,最好使用 onRoot() 的大小,或者至少使用窗口大小。(I62db4) 
- OnSizeChanged 之前报告布局内容的大小,现在则报告其在修饰符链中所在位置的大小。(I36b78、b/177562900) 
- emit() API 和所有重载均已废弃并重命名为 ComposeNode。这些 API 是一样的,只不过为了遵循 Compose 的命名惯例而采用了不同的名称 (I4137b) 
- TextFieldValue 接受 AnnotatedString。但是,这是只针对 API 的更改,尚未实现多样式文本编辑。 - 从 EditingBuffer 构造函数参数中移除了 initial。(I326d5)
 
- 从 EditingBuffer 构造函数参数中移除了 
- invalidate 和 compositionReference() 现已废弃,取而代之的分别是 currentRecomposeScope 和 rememberCompositionReference。(I583a8) 
- 更改了 AnnotatedString,以从 kotlin.CharSequence 进行扩展。因此,length 和 subSequence 现在是实例函数,并且已移除扩展函数。(Iaf429) 
- CompositionLifecycleObserver 现已废弃,取而代之的是 RememberObserver。 - RememberObserver已替代- CompositionLifecycleObserver,且语义和方法名称也已改变。始终推荐的做法是,对那些只记住一次的对象,可以机械地更改为新的 API。不过,如果引用在组合中被记住不止一次,那么对于只调用- onRemembered一次的每个引用,都会调用- onEnter。如果将- onEnter用于- WithConstraints和- Scaffold等子组合,则会多次调用该对象,从而打破单次调用- onEnter的保证,而对于- RememberObserver已将该对象移除。- RememberObserver添加了在以下情况下会被调用的- onAbandoned:如果从传递到- remember的回调中返回- RememberObserver实例,但该实例在组合状态下不被记住,并因此永远不会调用- onRemembered。当异常导致组合在完成前终止,或者组合因以下两种原因而遭到舍弃时就会发生上述情况:组合因不再是最新的而处于正在生成状态或者组合不再被需要。如果遵循上述单一引用建议的- RememberObserver实例跟踪的是外部资源,那么- onForgotten和- onAbandoned都会表示不再需要该资源。如果该对象跟踪的是- onRemembered中已开始的工作或已分配的资源,则可以忽略- onAbandoned,因为如果调用- onRemembered,就不会调用 onAbandoned。(I02c36)
- 废弃了 2 个或多个 TextUnit 之间的算术运算。废弃了 TextUnit.Sp 和 TextUnit.Em 函数,而优先使用 Int.sp 和 Int.em 等扩展函数。(I48369) 
- 如果库中没有明确声明的公开资源(例如,通过 public.xml 进行声明),那么库中的资源现在默认为私有资源。(Ia1dcc、b/170882230) 
- 废弃了 ScrollableColumn/Row。当滚动内容较大时,使用 ScrollableColumn 的效率不如使用 LazyColumn 高,因为使用 LazyColumn 时,我们可以只组合/测量/绘制可见元素。为防止用户采用低效方式,我们决定废弃 ScrollableColumn 和 ScrollableRow,转而提倡使用 LazyColumn 和 LazyRow。用户仍可决定不需要 lazy 行为,而直接像这样使用修饰符:Column(Modifier.verticalScroll(rememberScrollState()))(Ib976b、b/170468083) 
- 为 LazyColumn/LazyRow/LazyVerticalGrid 的作用域新增了 - items(count: Int)工厂方法。- items(items: List)和- itemsIndexed(items: List)现在是扩展函数,因此您必须在使用时将其手动导入。为 Array 新增了扩展函数重载:- items(items: Array)和- itemsIndexed(Array)(I803fc、b/175562574)
- 请使用 ImeAction.None 来代替 ImeAction.NoAction - 请使用 ImeAction.Default 来代替 ImeAction.Unspecified (Ie1bcc)
 
- 在测试中使用 TestCoroutineDispatcher (I532b6) 
- 已将 TextInputService.onStateUpdated 重命名为 updateState (Id4853) 
- 废弃了基于 TransitionDefinition 的 Transition (I0ac57) 
- 移除了 TextUnitType.Inherit。请改用 TextUnitType.Unspecified。(I9ff64) 
版本 1.0.0-alpha10
2021 年 1 月 13 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha10。版本 1.0.0-alpha10 中包含这些提交内容。
重大变更
- 重构内部编译器 API 时,允许在所有 - @Composable函数均已完成后,对因为进入“应用更改”组合阶段而生成的节点进行批量更改。- 这是一项可能会影响应用代码的重大行为变更,因为在应用完更改之前,无法再通过内部 API 和实验性 API 提供节点。通常可如下解决此问题:将具有此类依赖项的代码封装在 - SideEffect可组合项中,从而将代码的执行推迟到节点创建和初始化之后。(I018da)
API 变更
- 添加了 Modifier.focusOrder(),用于指定自定义焦点遍历顺序(I90cf5、b/175899543、b/170155556、b/170155429)
- 移除了已废弃的 FocusObserver,改为使用 onFocusChanged 或 onFocusEvent(I3ecb9、b/175156387)
- EditOperations API 变更
- EditOperation 已重命名为 EditCommand
- 为 EditOperation 的具体实现添加了 Command 后缀
- EditCommand 不再是数据类
- EditOperation.process 函数已重命名为 applyTo
- InputEventListener 已重命名为 InputEventCallback
- (I0a366)
 
- 移除了未使用的 PxSquared、PxCubed 和 PxInverse。 已将 Size.center() 变为属性。(I973f7)
- ui-test 模块现在可以对被测界面的 Recomposer 创建进行配置 (Ibebd8)
- 修改了 Velocity,现在包含分量部分和数学运算。(Ib0447)
- @ExperimentalTesting已重命名为- @ExperimentalTestApi,以便与类似的实验性 API 注解保持一致(Ia4502、b/171464963)
- Color.useOrElse() 已重命名为 Color.takeOrElse() (Ifdcf5)
- 移除了未使用的 DpInverse、DpSquared 和 DpCubed 类。(I4d62b)
- Constraints#satisfiedBy 已重命名为 isSatisfiedBy。(I9cf5c)
- 添加回调,以便在 LayoutNode 边界发生更改时通知 Owner。(I72fd1)
- 针对具有未指定的常量的内联类添加了 isSpecified、isUnspecified 和 useOrElse。(I93f7b、b/174310811)
- 扩展了 [Abstract]ComposeView API 以允许回收基于 Compose 的视图,处理其组合以便日后重新创建。添加了用于安装和发现作用域为窗口的 Recomposer 的 API 和用于创建子组合的 CompositionReference。 - 添加了 ViewCompositionStrategy,用于配置 [Abstract]ComposeView 的组合处理策略;默认行为是在窗口分离时进行处理。(I860ab) 
- 移除了 Any.identityHashCode() 公共 API (I025d7) 
- 移除了 toStringAsFixed API,改为直接使用 String.format。(Iaba6b) 
- 向 Foundation Strings.kt 添加了 Toggle(I4a5b7、b/172366489) 
- 将 nativeClass 移到了 ui 模块并将其变为内部 API。 更新了 nativeClass 在 equals 实现中的用法,以便改用“is MyClass”。(I4f734) 
- 废弃了 Modifier.focus() 和 Modifier.focusRequester(),改为使用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48、b/175160751、b/175160532、b/175077829) 
- 引入了 SelectionRegistrar.notifySelectableChange,用于向 SelectionManager 通知 Selectable 更新。(I6ff30、b/173215242) 
- 引入了 Outline.bounds 属性,以获取用于各种 Outline 实现的边界矩形。(I16e74、b/175093504) 
- 废弃了 TestUiDispatcher,改为使用 Dispatchers.Main(Ic171f、b/175385255) 
- ImeOptions 和 KeyboardOptions 不再是数据类(I3c898、b/168684531) 
- VisualTransformation API 变更 - OffsetMap 已重命名为 OffsetMapping
- OffsetMapping.identityOffsetMap 已重命名为 OffsetMapping.Identity
- PasswordTransformation 不再是数据类
- OffsetMapping 已移至其自己的文件中
- (I0bdf3)
 
- Position 已重命名为 DpOffset,并移除了 getDistance() (Ib2dfd) 
- fun Dp.isFinite() 已更改为 val Dp.isFinite (I50e00) 
bug 修复
- Recomposer 现在提供其当前状态的 Flow,因此可监控其 activity 和相关效果的 activity。(Ifb2b9)
- 现在可通过 keyEvent.nativeKeyEvent 访问原生 keyEvent(I87c57、b/173086397)
- animate()现已替换为- animateAsState(),后者会返回- State<T>而不是- T。这样可以提高性能,因为失效范围可缩小到读取 State 值的位置。(Ib179e)
- 添加了语义角色 API 并将 Role 作为参数添加到可点击、可选择和可切换的 SemanticsModifier。更改了 Modifier.progressSemantics,使其也可供 Slider 使用。(I216cd)
- 新增了基于协程的 API Animatable,用于确保其动画间的互斥性。- 新增了 DecayAnimationSpec,用于支持多维衰减动画
- (I820f2、b/168014930)
 
版本 1.0.0-alpha09
2020 年 12 月 16 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha09。版本 1.0.0-alpha09 中包含这些提交内容。
API 变更
- 现在移除了已废弃的 KeyEvent.Alt,改为使用 KeyEvent.isAltPressed。(Idd695)
- 废弃了 Modifier.keyInputFilter 和 Modifier.previewKeyInputFilter,改为使用 Modifier.onKeyEvent 和 Modifier.onPreviewKeyEvent(Idbf1b、b/175156384)
- 废弃了 Modifier.focusObserver,改为使用 Modifier.onFocusChanged 或 Modifier.onFocusEvent(I30f17、b/168511863、b/168511484)
- 针对挂起指针输入 API,已将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。(Idf0a1、b/175142755)
- 现在,Autofill API 为实验性 API,需要选择启用 (I0a1ec)
- 添加了解构声明,用于创建 FocuSRequester 实例(I35d84、b/174817008)
- 已将 accessibilityLabel 重命名为 contentDescription。将 accessibilityValue 重命名为 stateDescription。(I250f2)
- 从挂起指针输入 API 中移除了自定义事件(Ia54d5、b/175142755)
- 在 SelectionRegistrar 中引入了多个新函数,并且已将 onPositionChange 重命名为 notifyPositionChange。(Ifbaf7)
- 已将更多 LayoutNode 成员标记为内部函数 (I443c6)
- 引入了 ToolsInfo 以供工具和测试使用 (I9b190)
- 已将 AndroidOwner 变为内部函数(Ibcad0、b/170296980)
- 移除了 ExperimentalPointerInput 注解 (Ia7a24)
- 添加了嵌套滚动系统。如需了解详情,请参阅 Modifier.nestedScroll(I36e15 和 b/162408885)
- 已将 subcomposeInto(LayoutNode) 变为内部函数 (Id724a)
- 更改了 - Applier接口,简化了将树的构建方式从自上而下改为自下而上的过程。- insert()方法已重命名为- insertTopDown()。- 添加了新方法 - insertBottomUp()。- applier 可以使用 - insertTopDown()或- insertBottomUp()向正修改的树中插入节点,具体取决于哪个方法的效果更好。- 在构建某些树(例如 - LayoutNode和- View)时,自下而上构建会比自上而下构建效率更高。在做出此变更之前,若想实现自下而上构建,要进行很多插入操作,并需将插入内容复制到需借助自下而上的构建方式来提高性能的每个 applier。通过此变更,- Applier替换- insertBottomUp()即可实现自下而上构建树,替换- insertTopDown()即可实现自上而下构建树。(Icbdc2)
- 向 AndroidDialogProperties 添加了 dismissionOnBackPress 和 dismissionOnClickOutside 属性。通过这些属性可以配置在何时调用对话框的 onDismissRequest lambda。(If5e17) 
- 添加了 painterResource API,以处理光栅化资源格式(例如 PNG)或 VectorDrawables 中的不透明加载 Painter 对象。使用方无需再预先确定资源类型,并可调用此方法来获取 Painter 对象,以便在 Image 可组合项或 Painter 修饰符中使用。(I2c703、b/173818471) 
- 添加了 Modifier.clearAndSetSemantics,用于清除后代的语义以及设置新语义。(I277ca) 
- 将 ContentDrawScope 移到了 ui-graphics 模块,以便与 DrawScope 位于同一模块内。(Iee043、b/173832789) 
- 引入了 PathEffect 图形 API,以便为已描边的形状提供不同的图案。 废弃了 NativePathEffect,取而代之的是 PathEffect 的 expect/actual 实现。(I5e976、b/171072166) 
- 向 Compose 添加了 IdlingResource 接口,作为 Compose 支持的 Espresso 空闲资源变体。此类接口可通过 ComposeTestRule 注册和取消注册 (I433f3) 
- 移除了对 ComposeIdlingResource 的全局注册(取消注册),以及到 ComposeIdlingResource 的时钟的全局注册(取消注册)(I32660) 
bug 修复
- 现在,offset 修饰符中的 lambda 会返回 IntOffset(而非 Float)。(Ic9ee5、b/174137212、b/174146755)
- 从公共 API 中移除了 SlotTable、SlotReader 和 SlotWriter。这些 API 以前被标记为 InternalComposeAPI,现已变成 Compose 模块的内部 API。 - 添加了 CompositionData 和 CompositionGroup,用于替代 ui-tooling API 来提取组合信息。CompositionData 和 CompositionGroup 是公开的,但不能在 ui-tooling API 之外使用,因为它们会提供 ui-tooling API 解译的原生信息 (I31a9c) 
- 重构了 ShaderBrush,以便在绘制环境的大小信息可用时延迟创建着色器实例。如需定义在组合时可占满可组合项的整个绘制边界的渐变,而无需实现自定义 DrawModifier 实现,这非常有用。 - 废弃了渐变函数构造函数 API,取而代之的是 Gradient 对象中的工厂方法。(I511fc、b/173066799) 
- 废弃了 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed,改为使用 LazyColumn 和 LazyRow (I5b48c) 
- 废弃了 BuildCompat.isAtLeastR (Idb37e) 
- 添加了 buildAnnotatedString 工厂函数,以便构建 AnnotatedString。废弃了 annotatedString 构建器函数。(Idfe0b) 
- 移除了 Float 和 Double 的扩展方法,以便将值转换为弧度。已转为 PathParser 实现中的私有函数,这是唯一一处用到此函数的地方 (I25f52) 
版本 1.0.0-alpha08
2020 年 12 月 2 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha08。版本 1.0.0-alpha08 中包含这些提交内容。
API 变更
- 添加了语义操作 Dismiss (I2b706)
- 将 DrawModifier API 从 androidx.compose.ui 软件包移到了 androidx.compose.ui.draw 软件包。创建了 DrawModifierDeprecated.kt 文件以包含 typealiases/helper 方法,用于协助从已废弃的 API 迁移到当前所用的 API。(Id6044、b/173834241)
- 已将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer。此外,还根据 API 反馈将相关类更新为了 GraphicsLayer。(I0bd29、b/173834241)
- 添加了新方法 placeable.placeWithLayer() 和 placeable.placeRelativeWithLayer(),允许自定义布局和布局修饰符添加子级,以针对其绘制引入图形层。这样做的好处是:首先,我们可以优化重新绘制,因此当我们需要移动子级时,便无需重新绘制相应子级的内容;其次,我们可以针对子级应用绘制转换(Ibd8f6、b/170296989、b/171493718、b/173030831)
- 从 SubcomposeLayout 声明中移除了 <T>。现在,您无需指定类型即可使用它。(Ib60c8)
- 添加了 Modifier.scale/rotate API 以便 drawLayer 使用。
- 已将 Modifier.drawOpacity重命名为Modifier.alpha。
- 已将 Modifier.drawShadow重命名为Modifier.shadow(I264ca、b/173208140)
 
- 已将 
- 将 PointerInputData 的 uptime 字段和 position 字段设为了不可为 null。(Id468a)
- 现在,MaterialTheme 可为选择句柄和选择背景设置正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColor 自定义对所选文字使用的颜色。(I1e6f4、b/139320372、b/139320907)
- 添加了用于检查托管窗口是否已获得焦点的 WindowManager.isWindowFocused,并且添加了提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2a、b/170932874)
- 更新了 TransformOrigin API 以具备所需的解构语法,从而返回 pivotFractionX和pivotFractionY作为component1和component2(If43c4、b/173586560)
- 添加了针对可组合 lambda 参数命名和位置的 lint 检查,旨在检查其命名和位置是否符合 Compose 准则。此外,根据 lint 检查结果和指南,还将一些尾随 lambda 名为 children的 API 迁移到了content。(Iec48e)
- 添加了 API,用于检查在调度 Keyevent 时 Alt、Ctrl、Meta 或 Shift 辅助键是否已按下。(I50ed9)
- 添加了新的 Modifier.drawLayer()重载。您需要在新的 GraphicsLayerScope 上添加 lambda 块,并在其中定义图层参数,定义方式应允许在状态变化发生时跳过重组和重新布局。现在,DrawLayerModifier 为内部函数,我们准备将其逻辑迁移到 LayoutModifier 的 placeable.placeWithLayer() 方法中(I15e9f、b/173030831)
- 废弃了名称后缀为 Ambient的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 Compose API 准则)。(I33440)
- 将 androidx.compose.ui.text.Typeface移到了androidx.compose.ui.text.font.Typeface(Ic2b81)
- 已将语义参数 mergeAllDescendants 重命名为 mergeDescendants。(Ib6250)
- 新增拖动手势检测器挂起指针输入 API,包括屏幕方向锁定。(Icef25)
- 已将 VectorAsset 重命名为 ImageVector。根据 API 准则将 VectorAsset 移到了 Builder 并进行了重命名,使其成为 ImageVector 的内部类。添加了 VectorAssetBuilder 的类型别名,用于关联到 compat 的 ImageVector.Builder。(Icfdc8)
- 已将 ImageAsset 及相关方法重命名为 ImageBitmap。(Ia2d99)
- 为 PlacementScope 的 place() 添加了 zIndex 参数,因此 Modifier.zIndex() 现在可用作 LayoutModifier,并且任何自定义布局均可直接在放置位置块中为其子布局设置 zIndex(I711f7、b/171493718)
- 将 foundation 语义属性移到了 ui (I6f05c)
- 废弃了 place(Offset) 和 placeRelative(Offset),改为使用具有 int 偏移的重载 (I4c5e7)
- 移除了之前废弃的 API:移除了 Modifier.onPositioned,改为使用 Modifier.onGloballyPositioned。移除了 Modifier.onDraw,改为使用 Modifier.onDrawBehind。移除了 Modifier.plus,改为使用 Modifier.then。移除了 Color.Unset,改为使用 Color.Unspecified。移除了 PxBounds 类,改为使用 Rect。(Ie9d02、b/172562222)
- Alignment 接口经过了更新,可正常工作。(I46a07、b/172311734)
- 使用新的挂起指针输入添加了针对点按、点按两次、长按和按下指示信号的手势检测器。此外,还添加了几个实用程序,让开发者可以更轻松地编写自己的手势检测器。(I00807)
- 已针对 LayoutIdParentData将id重命名为layoutId。已将Measurable.id重命名为Measurable.layoutId。(Iadbcb、b/172449643)
- 添加了新的多点触控手势检测器,包括用于检测旋转、缩放和平移的辅助程序。(Ic459d)
- 引入了 SweepGradientShader API 和 SweepGradientBrush API。(Ia22c1)
- 现在,测试中的时间控件(TestAnimationClock 及其用例)处于实验阶段(I6ef86、b/171378521)
- 添加了基于协程的滚动 API: - 添加了 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及针对滚动控件的级别较低的 API。这些 API 可提供挂起接口;在返回前,此接口会一直等待,直到滚动完成为止。(Ie5642) 
- 在 foundation 中添加了 Modifier.focusable。可使用它向组件添加可聚焦的行为(具有正确的语义和无障碍功能)。(I41eb9、b/152525426、b/162865824) 
- 在 AnimationClockTestRule 中提供可委托给其 - clock的方法和属性的默认实现(I7ea3d、b/173399709)
- 现在,AndroidComposeTestRule 可以接受自定义 activity 启动器(Ib8288、b/153623653、b/154135019) 
- 废弃了 TextLayoutResult.getLineVisibleEnd。作为替代方案,TextLayoutResult.getLineEnd 现在具有新参数 visibleEnd。(I73282) 
- 更新了 TextFieldValue API - 将 TextFieldValue.composition 变为了只读
- 消除了因选择范围无效而抛出的异常(I4a675、b/172239032)
 
- 支持将 TtsAnnotation 用于文字转语音引擎。(I54cc6) 
- 添加了用于在协程中运行动画的新 API (Ied662) 
bug 修复
- 已将 Box 的 alignment 参数重命名为 contentAlignment。(I2c957)
- 已将 offsetPx 修饰符重命名为 offset。现在,它们采用 lambda 参数(而非 State)。(Ic3021、b/173594846)
- 向 TextInputService#onStateUpdated 添加了 resetInput 参数(I3e8f5、b/172239032、b/171860947)
- 针对可组合函数中的 Modifier 参数添加了 lint 检查。此 lint 检查会检查参数的名称、返回值类型、默认值和顺序是否符合 Compose 准则。(If493b)
- 暂时添加了相应选项,让 TestAnimationClock 可由 MonotonicFrameClock 驱动(I1403b、b/173402197)
- 添加了 Android Typeface 封装容器。您可以通过 typeface函数(即typeface(Typeface.DEFAULT))加载 Android Typeface。并且,typefaceFromFontFamily()已重命名为typeface()(I52ab7)
- 添加了 lint 检查,用于检查 Modifier 工厂函数是否已定义为针对 Modifier 的扩展,以便其能够顺利地链接到一起。(I07981)
- 移除了旧的 ui-test 模块及其桩 (I3a7cb)
- Recomposer 不再接受 EmbeddingContext;系统会从 effectCoroutineContext 中获取所需的调度依赖项。废弃了 FrameManager;平台在进行集成时应初始化其自己的全局快照处理操作。(I02369)
- 向无障碍功能节点传递样式信息。(If5e8d)
- TextUnit.Inherit 已重命名为 TextUnit.Unspecified,以便其与其他单位保持一致。(Ifce19)
Compose UI 版本 1.0.0-alpha07
2020 年 11 月 11 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha07。版本 1.0.0-alpha07 中包含这些提交内容。
API 变更
- 引入了 ScaleFactor 内联类来表示彼此独立的水平轴缩放比例和垂直轴缩放比例,以便支持非统一缩放用例。
- 向 ContentScale 添加了 computeScaleFactor 方法
- 添加了 ContentScale.FillBounds,用于执行非统一缩放,以便拉伸源边界来占满目标布局。
- 添加了使用 Size 参数计算 ScaleFactor 参数的运算符方法。
- (Ic96a6、b/172291582)
 
- 添加了用于创建 Alignment 的 BiasAlignment 和 BiasAbsoluteAlignment 工厂。(Iac836、b/169406772)
- 允许开发者强制清除焦点。(I90372)
- 修复了导致无法在 Compose 内为视图绘制高度的 bug。(If7782)
- 在 ContentDrawScope 内创建了 onDrawBehind API,以与 Modifier.drawBehind 的命名惯例相符。(I4fc3a、b/171955269)
- 添加了对相机距离的支持,用于补充 Layer API 中的 3D 转换 rotationX/rotationY。(I40213、b/171492100)
- 添加了不含回调的 SelectionContainer (Ibfadb)
- 移除了 ExperimentalSubcomposeLayoutApi 注解。现在,无需添加 @OptIn 即可使用 SubcomposeLayout (I708ad)
- FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 软件包 (Ied2e7)
- 从 drawShadow() 修饰符移除了 opacity。(I82c62、b/171624638)
- 已将 MeasureResult 从 MeasureScope 中移出。(Ibf96d、b/171184002)
- 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98、b/170475424)
- 移除了已废弃的 FocusState2(I686cb、b/168686446)
- ZIndexModifier 现在为内部接口(I1808b、b/171493718)
- 更新了 lerp 方法中 Size 参数的返回值类型,现在返回非 null Size,以免除进行不必要的装箱操作。(Ib0044)
- 添加了 TestMonotonicFrameClock,用于通过 kotlinx-coroutines-test 的 runBlockingTest 来测试依赖于 Compose 的 MonoonicFrameClock 来等待组合帧事件的代码 (I4402f)
- 移除了 GestureScope.localToGlobal(I15299、b/171462785)
- 添加了 onAllNodesWithSubstring查找器(I81dd7、b/171462889)
- androidx.ui.test 模块已废弃。请迁移到 androidx.compose.ui.test 和 androidx.compose.ui.test.junit4 (I452e8)
bug 修复
- captureToBitmap 已移至 captureToImage。(I86385)
- 废弃了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
- TextField 已更新为接受 KeyboardOptions (Ida7f3)
- 已将 KeyboardOptions 重命名为 ImeOptions (I82f36)
- KeyboardType 和 ImeAction 已移至 KeyboardOptions (I910ce)
- 添加了 provideDefault,用作提供上下文环境的替代方案,可用于指定只会在尚未提供上下文环境值时设置的上下文环境值。(Id6635、b/171024925)
- 废弃了 BaseTextField,请改用 BasicTextField。(I896eb)
- 引入了 ui-test-junit4 模块 (Ib91f8)
- relativePaddingFrom已重命名为- paddingFrom。为方便指定从布局边界到文本基线的距离,添加了- paddingFromBaseline修饰符。(I0440a、b/170633813)
- LaunchedTask 已重命名为 LaunchedEffect,以与 SideEffect 和 DisposableEffect API 保持一致。为了鼓励采用最佳实践,不允许使用不含主题参数的 LaunchedEffect。(Ifd3d4)
- 引入了可在更新配置时重组的 Resources 可组合项。(I6387c、b/167352819)
- 现在,Recomposer 在构造时需要使用 CoroutineContext (Ic4610)
- 应用多个 Modifier.zIndex()时,对zIndex的值求和。以前是取第一个值。(Ic514c、b/170623936)
- 对不应影响公共 API 的内部 SlotTable 实现进行了更改。(If9828)
- 添加了键盘自动更正 IME 选项 (I57b8d)
- androidx.ui.test 已移至 androidx.compose.ui.test (I9ffdb)
- 从公共 API 中移除了 KeyboardOptions.toImeOptions。(Ic2e45)
外部贡献
- 停用了内部工件 androidx.compose.ui:ui-text-android 的发布代码 (Ib93fa)
版本 1.0.0-alpha06
2020 年 10 月 28 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha06。版本 1.0.0-alpha06 中包含这些提交内容。
API 变更
- Recomposer 现在既是一个 CompositionReference,又是一个有效的组合父项。现在,需要使用显式 Recomposer 的情况比以前少。(I4036f)
- 废弃了 VectorPainter,转为使用 rememberVectorPainter,现在更明确地表明可组合项 API 可在内部利用“remember”跨组合保留数据。(Ifda43)
- 更新了 Modifier.drawWithCache API,将 ContentDrawScope(而非 DrawScope)公开为接收器作用域,这样处理是为了让实现能够对绘图命令进行重新排序。这对于色彩混合/色调调节用例非常有用,因为在此类用例中,必须先渲染内容像素,才能正确应用相应的混合模式算法。(Ie7ec8)
- SimpleContainer 已移至 PopupTestUtils.kt 中 (I78c57)
- ConsumedData 不再是一个数据类。如需了解详情,请参阅 https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219 (I1737f)
- 修复了 Rtl 布局中的句柄位置。(I6e1e0)
- 已将 DrawScope 和 ContentDrawScope 重构为接口而非抽象类
- 创建了 DrawScope 的 CanvasDrawScope 实现
- 重构了 DrawScope 的实现,现改用 CanvasScope
- 创建了 DrawContext,用于封装 DrawScope 的依赖项
- 移除了 DrawScope 中已废弃的方法 (I56f5e)
 
- 破坏性更改:考虑到指针事件中能够更改的值只能是使用情况数据,我们移除了来自 PointerInputFilter.onPointerEvent(...)的返回值。 现在,您只需改变传入的 PointerEvents 的使用情况数据即可,无需从PointerInputFilter.onPointerEvent(...)返回数据。(I6acd0)
- MeasureScope 和 IntrinsicMeasureScope 已成为接口。(I1a087、b/170461665)
- 已隐藏 AlignmentLine 的 merge 函数。(I9da1a、b/170612900、b/170611568)
- 添加了在组合修饰符中指定检查器信息的功能(Idee08、b/163494569)
- 在选项菜单中添加了 SelectAll 选项 (Ief02b)
- DrawTransform.rotate 已更新为接受 center 的一个默认 pivot 参数,以与文档相符。
- DrawScope.rotateRad 已更新为使用轴心点的 Offset,以与其他转换方法相符。
- 对轴心的 x 坐标和 y 坐标使用浮点数的 DrawScope.rotateRad 重载已废弃。
- (Iffcbb、b/170434992)
 
bug 修复
- 针对 androidx 启用了 MissingGetterMatchingBuilder 的 API lint 检查(I4bbea、b/138602561)
- 添加了测试。(I6b8ae)
- 在 ComposeTestRule 中启用了过渡;从 ComposeTestRule 中移除了用于启用闪烁光标的选项。(If0de3)
- 添加了 KeyboardCapitalization IME 选项 (I8ac38)
- 向 CoreTextField 添加了单行键盘选项 (I72e6d)
- SimpleContainer 已移至 PopupTestUtils.kt 中 (I65c3e)
- Radius API 已重命名为 CornerRadius,更清楚地表明它在整个 Compose 中的使用方式。更新了文档,指出负的圆角半径值被限制为零。(I130c7、b/168762961)
- 如果子 Android 视图在调用 onTouchEvent 时对除 ACTION_DOWN外的所有操作都返回 false,那么系统会继续向这些子视图发送 MotionEvent,这提高了 Android 互操作性(I94c5a、b/170320973)
- Box 已成为内联函数。(Ibce0c、b/155056091)
外部贡献
- AnnotatedString.capitalize和- AnnotatedString.decapitalize支持不同的语言区域 (I4aa7f)
版本 1.0.0-alpha05
2020 年 10 月 14 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha05。版本 1.0.0-alpha05 中包含这些提交内容。
API 变更
- 添加了一个用于指定检查器信息的 DSL (Ic9a22)
- 将 LongPress 移至 Text。(Iff2bc)
- 实验性 Modifier.pointerInput 挂起输入辅助键 (Ia77d2)
- 添加了复制/粘贴/剪切无障碍操作 (I6db4f)
- 移除了 AndroidOwner 的公共构造函数 (Iacaef)
- 弹出式窗口和对话框现在从父窗口继承 FLAG_SECURE。还添加了用于明确配置此行为的选项(I64966、b/143778148、b/143778149)
- 现在可更改使用情况数据。此外,对使用了更改的扩展函数的调用不会再返回新的 PointerInputChange,而是更改所提供的 PointerInputChange。 - 使 PointerEvent 数据可更改以便用户代码无法修改其他指针数据的流程一共分为两步,这是第一步。第二步是从 - PointerInputFilter.onPointerEvent(...)中移除- List<PointerInputChange>返回值类型。(Id067e)
- 在 Text 和一个 Demo 中停用了 Selection。(Ie7e97) 
- 使 onGloballyPositioned 成为内联函数 (I15830) 
- 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8、b/169083903) 
- 向 Owner 添加了 hasPendingMeasureOrLayout 属性,以指明 Owner 是否有任何待处理的布局工作。(I3d9f8、b/169038599) 
- 添加了能够以编程方式清除焦点的 API(Ie1dc2、b/161487952) 
- 移除了 - PointerInputFilter.onPointerInput(...)。应改为使用- PointerInputFilter.onPointerEvent(...)。(I6f04a)
- Size 的变更 - 移除了 Size.getFlipped
- 移除了 Size.rem
- 移除了 Size.truncDiv(Ief44d、b/169790720)
 
- 在对内联类的标记值进行标准化的过程中,将 Color.Unset 重命名为 Color.Unspecified,以与其他内联类保持一致(I97611、b/169797763) 
- 引入了 TextOverflow.None。当溢出为 None 时,Text 将不再处理溢出,而是向 LayoutNode 报告其实际大小。(I175c9、b/158830170) 
- AnnotatedString.Builder.addStringAnnotation 中的 scope 参数已重命名为 tag,以在各 API 间保持一致。(I7c8cb) 
bug 修复
- 通过减少每次滚动时 subcomposition 中的工作量,改善了 LazyColumn/Row 的滚动性能。为 Composition 类添加了新的 hasInvalidations() 方法。将 Recomposer 中的 hasPendingChanges() 方法重命名为 hasInvalidations()(Ib2f32、b/168293643、b/167972292、b/165028371)
- 将 Size.Unspecified 的参数从 Float.POSITIVE_INFINITY 更新为 Float.NaN。更新了 Painter 实现,以针对 Size.Unspecified 以及是非有限大小进行检查。(I95a7e)
- 自定义布局中 place() 调用的顺序现在可定义子级的绘制顺序 (Ibc9f6)
- 支持将 AnnotatedString 转换为SpannableString,以确保可访问性。(Ief907)
- 针对旧版平台上的 Android 类添加了桩,以尽可能避免使用反射。(Ia1790)
- 修复了以下 bug:如果显示软件键盘会导致应用平移,那么指针输入坐标会变得不正确。(Ic4cec、b/163077821)
版本 1.0.0-alpha04
2020 年 10 月 1 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha04。版本 1.0.0-alpha04 中包含这些提交内容。
API 变更
- 添加了 OwnerScope,以允许收集失效的布局和绘制观察范围。(Ic4cf8)
- 添加了 OnRemeasuredModifier 和 onSizeChanged(),分别用于在内容布局已经过重新测量和尺寸发生变化时接收回调。(I657cf、b/154108792)
- 添加了长按语义操作(I6281b、b/156468846)
- 已将 FocusManager 设为不公开。(I7872f)
- 更新了实现,以创建专用的 DrawCacheModifier 实现,而不是在 DrawModifier 中添加可选属性。 - 更新了各种方法的文档 (Ibd166) 
- 将 TextRange 变为内联类,以避免创建对象。(Id034b) 
- 无法再从自定义布局的放置位置块中读取 PlacementScope#parentWidth 和 PlacementScope#parentLayoutDirection。(Icc1ae、b/168295623) 
- 向语义属性添加了 AccessibilityScrollState。(Ifeda9) 
- 引入了 Modifier.drawWithCache,以支持创建相应绘制对象,使其根据大小/状态信息酌情重新创建依赖项 (I376dc) 
- 移除了 ParagraphConstraints。现在,Width 会直接传递给 Paragraph。(Ica712) 
bug 修复
- 更新了多个图形 API
- 更新了缩放和旋转的转换 API,现在使用单个 Offset 参数来表示数据透视坐标,不再对 DrawScope 和 DrawTransform 中的 x/y 坐标使用单独的浮点数参数
- 移除了 Rect.expandToInclude 和 Rect.join 方法
- 更新了 Radius 文档,除了介绍 elliptical(椭圆形)之外,还介绍了 oval(卵形)
- 添加了相关文档,指明不能直接调用内联 Radius 类的公共构造函数,而应通过对应的函数构造函数对 Radius 对象进行实例化
- 移除了用于查询 topRight、bottomRight、bottomCenter 等的 RoundRect API
- 废弃了 Rect.shift,取而代之的是 Rect.translate
- 移除了 RoundRect.grow API 和 Rect.shrink API
- RoundRect.outerRect 已重命名为 Rect.boundingRect
- 移除了 RoundRect.middleRect/tallMiddleRect/wideMiddleRect 和 Rect.isStadium 方法
- RoundRect.longestSide 已重命名为 RoundRect.maxDimension
- RoundRect.shortestSide 已重命名为 RoundRect.minDimension
- 将 RoundRect.center 从函数变更为了属性
- 更新了 RoundRect 构造函数,现在使用 Radius 属性,不再使用针对 x/y 半径值的单独参数
- 移除了假定对象是原点为 0,0 的 Rectangle 的 Size API
- 在 Radius 中添加了一个销毁 API
- 已改为将各种 RoundRect 扩展函数迁移为属性
- (I8f5c7、b/168762961)
 
- 废弃了 foundation.Box。请改用 foundation.layout.Box。(Ie5950、b/167680279)
- Stack 已重命名为 Box。将废弃之前存在的 Box,改为使用 compose.foundation.layout 中的新 Box。新的 Box 会在存在多个子元素时,在堆栈中将一个子元素放在另一个子元素之上,其行为不同于旧版 Box,后者的行为类似于 Column。(I94893、b/167680279)
- 废弃了 Box 装饰参数。如果您想对框进行装饰/填充,请改为使用 Modifier(Modifier.background、Modifier.border、Modifier.padding)(Ibae92、b/167680279)
- 更新了多个图形 API
- DrawScope API 已更新为采用作用域转换方法,以指明仅在回调内应用转换,并在调用回调后移除该转换
- clipPath 文档已更新为引用 Path,而非圆角矩形
- 在文档中修复了 clipPath 中 right 参数的间距问题
- DrawScope.drawCanvas 已重命名为 drawIntoCanvas,并移除了 size 参数
- inset 方法中的 dx/dy 参数已重命名为 horizontal 和 vertical
- 添加了边衬区重载,用于为所有 4 个边界提供相同的边衬区值
- 在有关 inset 方法的文档中移除了指明边衬区值会应用于所有 4 个面的说明
- 更新了 Rect 类的文档
- 更新了对 Rect 参数的注释,以与 KDoc 样式保持一致
- 移除了 Rect.join 和 Rect.expandToInclude
- 为 Rect.translate(offset) 创建了重载,并废弃了 Rect.shift
- (If086a、b/167737376)
 
- 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行了注解,使这些 API 变为内部 API 并隐藏其 KDoc(I554eb、b/168308412)
- 从 Top 中移除了 SelectionContainer,以停用默认选择并避免出现意外行为。可改为专门使用 SelectionContainer 来封装需要设为可选择的内容。(I8dfe0、b/158459594)
版本 1.0.0-alpha03
2020 年 9 月 16 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha03。版本 1.0.0-alpha03 中包含这些提交内容。
API 变更
- 移除了向前/向后滚动语义操作。在 AccessibilityRangeInfo 中添加了 steps。(Ia47b0)
- 从 Owner中移除了onInvalidate()-OwnedLayer处理失效问题。(Ica72b、b/162061312)
- 移除了 Size API 中使用 Offset 参数的运算符方法。这些运算结果不明确,且结果的类型与预期不符。例如,size - offset 所得的差值应返回偏移量还是大小? - 还移除了 Size 类中已废弃的方法。(Iec902、b/166514214) 
bug 修复
- 修复了 LazyColumn 的项有时会被错误绘制的问题,该问题在某些情况下还会导致出现崩溃问题。(Ibcf17、b/163066980、b/165921895)
- 已废弃 DpConstraints 以及使用它的 API。(I90cdb、b/167389835)
- 将 createAndroidComposeRule和AndroidInputDispatcher从androidx.ui.test.android移动到了androidx.ui.test(Idef08、b/164060572)
- gravity 在布局 API 中用到时被一致地重命名为 align 或 alignment。(I2421a、b/164077038)
- 根据 ComposeTestRule 增加了 onNode 及其他全局方法,原因是当前的全局方法即将被废弃。(Ieae36)
版本 1.0.0-alpha02
2020 年 9 月 2 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha02。版本 1.0.0-alpha02 中包含这些提交内容。
API 变更
- 移除回调,以便在 LayoutNode 边界发生更改时通知 Owner。(If654e、b/166106882)
- 添加了对矢量图形路径上 filltype 参数的支持,以便根据 evenOdd 或 NonZero 路径填充规则为各种形状的刘海屏提供支持。(I43dd2)
- Uptime 和 Velocity 现已成为内联类 (I48f4a)
- Duration 现已成为内联类 (I565eb)
- 添加回调,以便在 LayoutNode 边界发生更改时通知 Owner。(Ic40b3)
- 修复了包含 Offset 和 radius 的 Rect 函数构造函数按照左、右、上、下(而非左、上、右、下)的顺序创建矩形的问题。 - 移除了已废弃的 Rect 伴生构造函数方法,改为使用函数构造函数。 - 添加了用于验证 Rect.kt 中方法的测试(I08460、b/165822356) 
bug 修复
- 添加了 MutableRect,这是一种可修改的矩形。(I71bd2、b/160140398)
- Matrix4 已替换为 Matrix。移除了 vectormath 软件包中的所有其他部分。(Ibd665、b/160140398)
- 可组合函数的调用规范发生了变化。这是一项重大的二进制文件更改。所有库都必须重新编译才能使用此版本的 Compose 编译器插件。 - 这项更改不会在源代码级别产生重大变化,因为只有已更改的 API 属于明确选择启用的编译器 API。(I7afd2、b/158123185) 
- 修复了在以下情况下可能会发生崩溃的问题:到 PointerInputFilter 的调度可能会导致 PointerInputFilter 被同步移除。(I58f25) 
版本 1.0.0-alpha01
2020 年 8 月 26 日
发布了 androidx.compose.ui:ui-*:1.0.0-alpha01。版本 1.0.0-alpha01 中包含这些提交内容。
版本 0.1.0-dev
版本 0.1.0-dev17
2020 年 8 月 19 日
发布了 androidx.compose.ui:ui-*:0.1.0-dev17。版本 0.1.0-dev17 中包含这些提交内容。
API 变更
- 废弃了 emitView。请在可行的情况下改用AndroidView在 Compose 中发出 View。请注意,今后将不再支持直接对 View 和 ViewGroup 进行组合,除非二者是组合树的分支(在这种情况下,可通过 AndroidView 进行组合)。(I29b1e、b/163871221)
- FocusState2已废弃,取而代之的是- FocusState(Ia8b79、b/160822876、b/160923332)
- 移除了已废弃的 AndroidView 重载。(I946b9、b/163802393)
- 自定义 emit 现在可以做如下声明:可以跳过它的一个或多个 setter,并且可以独立于 emit 对 setter 进行重新组合。(Ibbd13)
- 更改了 Vector 类使其不再是数据类,因为相同的对象实例也用于组合。 - 为 VectorPainter 添加了 mutableStateOf 标记,以便在 vector 的内容更改时进行有条件的重新绘制。 - 重构了 VectorComponent 实例,使其成为 VectorPainter 的一部分,因为它可以跨组合重复使用。 - 更新了 GroupComponent 和 PathComponent,使其名称字段可变(Ieae45、b/151378808) 
- 移除了 - onChildPositioned和- OnChildPositionedModifier。开发者应改为在子布局上使用- onPositioned和- OnPositionedModifier。(I4522e、b/162109766)
- Offset 已成为内联类 (Iaec70) 
- 向 SelectionContainer 添加了修饰符参数(I4aada、b/161487952) 
- 移除了已废弃的 FocusModifier(I0b4ba、b/160922116、b/160821157、b/162441435、b/160822875、b/160921940) 
- 向 - SemanticsPropertyKey添加了- mergePolicylambda。此 lambda 可用于为 mergeAllDescendants 语义合并定义自定义政策。默认政策为:如果已有父项值则使用父项值,否则使用子项值。(Iaf6c4、b/161979921)
- Constraints 现已成为内联类 (I88736) 
- 添加了将通用焦点逻辑移出 AndroidComposeView 的 FocusManager(I528ef、b/161487952、b/162206799) 
- 为 Alpha 版更新了 PointerEventPass 名称。(Ifda6f) 
- IntOffset 现已成为内联类 (Iac0bf) 
- IntSize 现已成为内联类 (I2bf42) 
- PlacementScope.placeAbsolute()已重命名为- PlacementScope.place(),以前的- PlacementScope.place()已重命名为- PlacementScope.placeRelative()。因此,- PlacementScope.place()方法将不再自动在从右到左的上下文中镜像位置。如果需要执行此镜像,请改用- PlacementScope.placeRelative()。(I873ac、b/162916675)
- AlertDialog 现在将 FlowRow 用于按钮(I00ec1、b/161809319、b/143682374) 
- 将一些测试实用程序设为非公开状态,因为尚未将它们放在其所属的位置。这些实用程序将来会公开。(I32ab1) 
- 重构了指针输入代码的组织方式。(Ie3f45) 
- 废弃了 PxBounds,取而代之的是 Rect。使用 PxBounds 的所有情况都更新为使用 Rect,并添加了适当的废弃/替换注解,以辅助迁移。(I37038、b/162627058) 
- 移除了已废弃的 KeyEvent2,改为使用 KeyEvent。(Ied2d0、b/162097587) 
- KeyEvent 具有 Unicode 属性,可用于获取由指定键和元键状态组合生成的 Unicode 字符 (If3afc) 
- 将 DelayUp 自定义事件和相关类设为可选 API,因其极有可能会发生更改。(I56d6f) 
- 移除了不再需要的 2 个 PointerEventPass。(I3dd9d) 
- 向 Paragraph.paint 添加了参数 color、shadow 和 TextDecoration。该函数对避免不必要地重新创建 Paragraph 非常有用。(I81689) 
bug 修复
- 从 TextField 中移除了 onFocusChanged 回调,请改为使用 Modifier.focusObserver。(I51089、b/161297615)
- 废弃了 Modifier.drawBorder,请改为使用 Modifier.border。Border 数据类已替换为 BorderStroke(I4257d、b/158160576)
- 移除了已废弃的 FrameManager 调用。 - 更改了内部 Compose API,从而降低了跟踪状态对象(如 - mutableStateof())所需的开销 (I80ba6)
- VerticalScroller 和 HorizontalScroller 已移除,请改为使用 ScrollableColumn/Row。Modifier.drawBackground 已移除,请使用 Modifier.background(I73b0d、b/163019183) 
- 解决了在 for 循环内使用某些用于保存状态的方法时出现崩溃的问题。现已支持在 savedInstanceState() 中使用同一键,并已根据此新要求对 UiSavedStateRegistry 的 API 做出调整(I4ab76、b/160042650、b/156853976、b/159026663、b/154920561) 
- 为清楚起见,现在废弃了 - state { ... }可组合项,改为对- remember { mutableStateOf(...) }的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的- by mutableStateOf()模式相一致。(Ia5727)
- 将 RRect 重命名为 RoundRect,使其更适合 Compose 命名模式。创建了与 RRect 类似的函数构造函数,并废弃了 RRect 函数构造函数 (I5d325) 
版本 0.1.0-dev16
2020 年 8 月 5 日
发布了 androidx.compose.ui:ui-*:0.1.0-dev16。版本 0.1.0-dev16 中包含这些提交内容。
API 变更
- 废弃了 OnChildPositioned,改为在子布局上使用 OnPositioned。(I87f95、b/162109766)
- 已废弃 setViewContent,请改用 setContent。(I7e497、b/160335130)
- 添加了 AndroidViewBinding API,用于根据 ViewBinding 膨胀和组合布局资源。(I081c6)
- KeyEvent2 已替换为 KeyEvent(I2d770、b/162097585)
- 添加了对 Alt 硬件按键的支持 (I9036b)
- 废弃了 FocusManager,改为使用 Modifier.focus()、Modifier.focusObserver() 和 Modifier.focusRequester()。(I74ae4、b/162211322)
- loadVectorResource 支持 trimPath 属性 (I808fe)
- 将 Dialog 移至 UI (I47fa6)
- 移除了不再需要的 2 个 PointerEventPass。(I33ca7)
- 实现了 PointerInteropModifier,用于提供接收 MotionEvent 并像 Android View 的实现一样与 Compose 交互的功能。(Ieb08c)
- 移除了已废弃的 tag 修饰符。请改用 layoutId。(Idaa05、b/162023919)
- 更新了 API 对从右到左布局的支持。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)
- 支持在矢量图形中进行路径剪裁(Ie16c9、b/158188351)
- 添加了 Modifier.layout(),可方便地用于创建自定义布局修饰符(I73b69、b/161355194)
- 添加了一个新的 AndroidView API,并废弃了现有的 AndroidView API。(I5bcfd)
- 废弃了 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的 Modifier.padding().background() + anotherModifier(Iedd58、b/161529964)
- 添加了 [Abstract]ComposeView 子类,用于在视图层次结构中承载 Compose 内容。(I46357)
- Row和- Column现在属于内联函数,其使用开销将显著降低。(I75c10)
- 添加了 SubcomposeLayout。这是一个低级别基元,如果我们想要使用仅在衡量子树组合期间后期可用的一些值,就可以利用此基元在衡量期间组合子项。例如,WithConstraints 并非通过 SubcomposeLayout 实现。(I25cc8)
- 添加了 SemanticsNode.positionInRoot,用于获取 SemanticsNode 相对于 Compose 层次结构的根的位置(Icdf26、b/161336532)
- 将 MotionEvent 从 Android 一直传递到 Compose 再回到 Android。(I14be8、b/158034713)
- 移除了 dropdownPopup。(I00430)
- 修复了刘海屏上弹出式内容的位置问题。(Idd7dd)
- 添加了用于获取 TextLayoutResult 的无障碍操作(I9d6e6)
- 添加了 RemeasurementModifier。用户可以通过它同步重新测量布局。一般而言,您永远也不需要它,因为重新测量/重新布局会自动发生,但是在 LazyColumnItems 内,滚动期间需要使用它。(I5f331、b/160791058)
- 移除了 getLineEllipsisOffset/getLineEllipsisCount,改为使用 getLineVisibleEnd/getLineEnd/isLineEllipsized。(I85aa2)
- 为遵循最佳实践,添加了一些标记/注解。(I66b20)
- 在 TextLayoutResult 中公开了更多行 API。(I79bd2)
- 现在可通过 Foo.VectorConverter 访问用于转换内置单位的内置矢量转换器。例如 Dp.VectorConverter、Color.VectorConverter、Float.VectorConverter 等 (I3e273)
bug 修复
- 修复了大量 API 问题 (I077bc)- 移除了未使用的 OffsetBase 接口
- 使 Offset 类与 IntOffset 类保持一致,以获得一致的 API Surface
- 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
- 从 Canvas 接口中移出了 nativeCanvas 方法,以支持使用者创建自己的 Canvas 实例
- 创建了 stub EmptyCanvas 类,用于将 DrawScope 重构为非 null 参数而不是 lateinit,并确保字段的不可为 null 性
- ClipOp 枚举已重命名为 Pascal 大小写形式
- FilterQuality 枚举已重命名为 Pascal 大小写形式
- StrokeJoin 枚举已重命名为 Pascal 大小写形式
- PointMode 枚举已重命名为 Pascal 大小写形式
- PaintingStyle 枚举已重命名为 Pascal 大小写形式
- PathFillType 枚举已重命名为 Pascal 大小写形式
- StrokeCap 枚举已重命名为 Pascal 大小写形式
- 更新了 DrawCache 实现,现在不再使用 lateinit 参数
- 更新了 DrawScope,不再将 lazy 委托用于 fillPaint 和 strokePaint 内部参数
- 更新了 Image 可组合项,以避免使用 Box,从而减少开销
- 更新了 Outline 类,在其中添加了 @Immutable 注解
- 更新了 PathNode,为每个路径指令添加了 @Immutable 注解
- 更新了 Vector 子组合以移除对是否相等所做的多余的条件检查,因为 Compose 已经处理了这些检查
- 废弃了 Rect 伴生构造函数方法,改为使用函数构造函数
- 使用 @Immutable 和 @Stable API 更新了 Brush 类和函数构造函数
- VertexMode 枚举已更新为 PascalCase 大小写形式
- 更新了 DrawScope selectPaint 方法,可以有条件地覆盖绘图时用到的各 stroke 参数(如果这类参数发生了更改)
- 更新了 Size,现在添加了解构 API,将 UnspecifiedSize 重命名为 Unspecified,并移除了未使用的方法
 
- 更新了 Compose BlendMode API 的使用,以便在 Android 框架 BlendMode 和 PorterDuff 模式(根据 API 级别而定)之间正确进行映射。引入了 BlendMode#isSupported API 用于查询功能,以便在使用前确定设备是否支持 BlendMode。(I0ef42)
- 为 Lazy 列表的 itemContent 参数添加了 LazyItemScope。它提供了用于填充父项最大尺寸的修饰符,解决了以下用例的问题:该项应该填充视口,但因为该项是使用无限约束测量的,致使常规的 Modifier.fillMaxSize() 不起作用。(Ibd3b2、b/162248854)
- 移除了 SemanticsNodeInteraction.performPartialGesture。请改用SemanticsNodeInteraction.performGesture。(Id9b62)
- LazyColumnItems已重命名为- LazyColumnFor。- LazyRowItems已重命名为- LazyRowFor(I84f84)
- foundation.shape.corner软件包已扁平化为- foundation.share(I46491、b/161887429)
- AndroidComposeTestRule已重命名为- createAndroidComposeRule。(I70aaf)
- 向 TextLayoutResult添加了更多 API。(Id7e04)
- 已将 FilledTextField重命名为TextField,将基础TextField重命名为BaseTextField,以便轻松找到所需的最简单的 API 供您使用(Ia6242、b/155482676)
- Modifier.drawBackground 已重命名为 Modifier.background (I13677)
版本 0.1.0-dev15
2020 年 7 月 22 日
发布了 androidx.compose.ui:ui-*:0.1.0-dev15。版本 0.1.0-dev15 中包含这些提交内容。
依赖项更新
- 如需使用 Compose 的 0.1.0-dev15版本,您需要根据上面的声明依赖项部分给出的新代码段来更新依赖项。
API 变更
- 废弃了 FocusModifier,改为使用 Modifier.focus、Modifier.focusRequester、Modifier.focusObserver。废弃了 FocusState 和 FocusDetailedState,改为使用 FocusState2(I46919、b/160822875、b/160922136)
- 添加了一个修饰符,用于观察焦点状态的变化。(I05866、b/160924455、b/160923326)
- 添加了一个修饰符,用于请求焦点更改(I8dd73、b/161182057、b/160924778)
- 调整了工具栏菜单,以正确显示复制、剪切和粘贴选项。(Id3955)
- 单值语义属性现在使用调用样式。例如,“semantics { hidden = true }”现在写为:semantics { hidden() }。(Ic1afd、b/145951226、b/145955412)
- 添加了 Modifier.focus,以替换 FocusModifier。(Ib852a、b/160924778)
- 为 TextField 选择添加了 FloatingToolbar。(Ie8b07)
- 为与按键输入相关的 API 添加了一个实验性 API 注解 (I53c0a)
- 为所有与焦点相关的 API 添加了一个实验性 API 注解(I53b24、b/160903352)
- 添加了 FocusState2,以替换 FocusDetailedState(I0a3ba、b/160822595)
- 添加了 ExperimentalFocus,它是 Focus API 的 @OptIn 注解。(I1544b、b/160820961)
- 添加了一个 IntBounds 单元类,它表示布局的整数像素边界。更新了 PopupPositionProvider 的 API 以供使用。(I0d8d0、b/159596546)
- Applier 现在需要一种 clear() 方法来处理组合 (Ibe697)
- 废弃了 KeyEvent,并由 KeyEvent2 替代 (I68730)
- 添加了一种新的可选标记 useUnmergedTree,以测试查找程序。(I2ce48)
- 将 LayoutNode 变成了实验性 API (I4f2e9)
- 为各种内联类类型添加了复制方法,包括: - Offset
- Size
- Radius
- Motion
- TransformOrigin 
- 废弃了 Size.copy 伴生对象方法,改为使用实例复制方法(Ife290、b/159905651) 
 
- 弹出式窗口、对话框和菜单现在继承了上下文 MaterialTheme(Ia3665、b/156527485) 
- TextDirection 已重命名为 ResolvedTextDirection (I3ff38) 
- 从 Layout() 函数的测量块中移除了布局方向参数。但是,可以通过测量范围对象在回调内提供布局方向 (Ic7d9d) 
- 重构了 SelectionHandles 以便重复使用。(I420e0) 
- 移除了 Clickable,改为使用 Modifier.clickable (I84bdf) 
- 删除了 TestTag 和 Semantics,改为使用 Modifier.testTag 和 Modifier.semantics(I15ff0、b/158841414) 
- 在此变更之前,如果存在 @Composable 函数,Compose 编译器插件会以非常复杂的方式拦截对该函数内构造函数的调用(I5205a、b/158123804) 
- Modifier.tag 已重命名为 Modifier.layoutId,以避免与 Modifier.testTag 混淆。(I995f0) 
- 从 Placeable#get(AlignmentLine) 返回的对齐行 Int 位置值现在为非 null 值。如果缺少查询后的对齐行,则会返回 AlignmentLine.Unspecified。(I896c5、b/158134875) 
- 为 AndroidView 可组合项添加了一个修饰符参数。(I48a88、b/158746303) 
- 废弃了 Semantics(),改为使用 Modifier.semantics()。(I72407、b/158841414) 
- 添加了 viewModel() 可组合项,让您可以创建 ViewModel 或获取已创建的 ViewModel,具体与其在 activity 或 fragment 中的工作原理类似 (I5fdd1) 
- 将使用的 IntPx 替换为了 Int。将 IntPxPosition 替换为了 IntOffset。将 IntPxSize 替换为了 IntSize。(Ib7b44) 
- 为了整合用于表示大小信息的类的数量,我们对 Size 类(而非 PxSize)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的宽度和高度。(Ic0191) 
- 为了整合用于表示位置信息的类的数量,我们对 Offset 类(而非 PxPosition)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的 x 轴和 y 轴偏移量。(I3ad98) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数。删除了整个 Px 类 (I3ff33) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I086f4) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Id3434) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I97a5a) 
- TestTag 现已废弃,请改为使用 Modifier.testTag。(If5110、b/157173105) 
- 移除了 ParentDataModifier#modifyParentData 的默认空操作实现,此实现等同于从一开始就不实现该接口。(I0deaa) 
- 移除了之前已废弃的 ScaleFit,现改用 ContentScale。(Ifbc5b) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I19d02) 
- 在 ui-material 中添加了 DropdownMenu 组件,它是 Material Design 菜单的实现。(I9bb3d) 
- 移除了已废弃的 LayoutTag(),请改用 Modifier.tag()。移除了已废弃的 Modifier.matchParent(),请改用 Modifier.matchParentSize()。(If8044) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I57bff) 
- Modifier.semantics 已取消废弃,以允许在高层级组件中使用。(I4cfdc) 
- 整合了 CanvasScope 实现,因此现在只有 DrawScope 和 ContentDrawScope。CanvasScope 已重命名为 DrawScope。更新了 DrawScope 以实现密度界面并提供 LayoutDirection。删除了 ContentDrawScope 中的 DrawScope 子类。Painter 和 PainterModifier 已更新,不再由自身保留 RTL 属性,因为 DrawScope 已提供此信息,无需手动提供 (I1798e) 
- DoubleTapGestureFilter 现会在整个树中消除 SingleTapGestureFilter 的歧义。(If92b1) 
- 更新了 Alignment API 并添加了对绝对对齐的支持(不会在 Rtl 情境中自动镜像)(I38cd3) 
- DrawLayer Modifiers API 已更改:outlineShape 已重命名为 shape,具有 RectangleShape 默认值,并且现在不可为 null;clipToOutline 已重命名为 clip;移除了 clipToBounds,因为对于 RectangleShape 而言,它与 clip == true 相同(I7ef11、b/155075735) 
- 更新了公开画布的更高级别的 Compose API,改为公开 CanvasScope。这样一来,用户便无需再维护自己的渲染对象。对于仍需要访问画布的使用方,可以使用 drawCanvas 扩展程序方法,该方法提供回调以向底层画布发出绘制命令。(I80afd) 
- withConstraints 尾随 lambda API 已更改。现在,除了两个参数之外,它还具有接收器范围,除了约束和 LayoutDirection 之外,还可以在 Dp 中提供 minWidth、maxWidth、minHeight 和 maxHeight 属性(I91b9a、b/149979702) 
- LayoutModifier2 已重命名为 LayoutModifier。(Id29f3) 
- 移除了已废弃的 LayoutModifier 接口。(I2a9d6) 
- Layout 和 LayoutModifier2 中的固有特性测量函数现在设有 IntrinsicMeasureScope 接收器,它为隐式传播的布局方向提供固有特性查询 API。(Id9945) 
- Layout 和 LayoutModifier 子级可以使用其他布局方向进行测量。(Ibd731) 
- 添加了新的 Modifier.zIndex(),以控制同一父布局内子级的绘制顺序。DrawLayerModifier 的高度属性已重命名为 shadowElevation,并且不再控制绘制顺序。DrawShadow 的参数顺序已更改:现在第一个参数是 elevation,第二个参数是 shape,默认值为 RectangleShape。(I20150、b/152417501) 
- 移除了 Owner 中的 onSizeChange 和 onPositionChange。(I5c718) 
- 新增了 Constraints2,一个仅支持 Int 约束值而不是 IntPx 的 Constraints 的副本。IntPx 将被移除,并且所有整数约束都将被假定为类似于 Android 的像素。 - 还添加了 IntSize,最终它将替换 IntPxSize。(I4b43a)
 
- 允许使用任意值实现对齐实例化。添加了 1D 对齐。(Ia0c05) 
- alignToSiblings 现在接受 Measured,而非 Placeable。(I5788d) 
- 
- ScaleFit 已重命名为 ContentScale
- 将 ContentScale 从 ui-graphics 移到了 ui-core 模块,以与 Alignment API 位于同一模块内。
- FillMaxDimension 已重命名为 Crop
- FillMinDimension 已重命名为 Fit
- Fit 已重命名为 Inside,以便实现更好地与
- ImageView.ScaleType 等效项匹配
- 添加了相关文档,指明将 Crop 和 Alignment.Center 一起使用可实现与 ImageView.ScaleType.CENTER_CROP 相同的结果,将 Fit 和 Alignment.Center 一起使用可实现与 ImageView.ScaleType.FIT_CENTER 相同的结果,将 Inside 和 Alignment.Center 一起使用可实现与 ImageView.ScaleType.CENTER_INSIDE 相同的结果。
 
- 添加了对绘制修饰符的 RTL 支持。(I0aaf9) 
- 发布了 API,用于从 XML 膨胀 Android 视图。如需了解详情,请观看 ViewInCompose 演示。(I42916) 
- 改进了 DrawModifier API: - 确定了 draw() ContentDrawScope 的接收器范围
- 移除了 draw() 上的所有参数
- DrawScope 的接口与之前的 CanvasScope 接口相同
- ContentDrawScope 具有 drawContent() 方法(Ibaced、b/152919067)
 
- 为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。(Icacdd、b/152735784) 
- DrawLayerModifier 和 drawLayer() 现在将 clipToBounds 和 clipToOutline 默认设置为 false。(I0eb8b、b/152810850) 
- LayoutResult 已重命名为 MeasureResult。(Id8c68) 
- 添加了 LayoutModifier2,一个用于定义布局修饰符的新 API;废弃了 LayoutModifier (If32ac) 
- 将修饰符以及运算符替换成了出厂扩展函数 (I225e4) 
- 添加了 translationX/Y 属性,以支持针对指定层偏移绘制命令显示列表。这对于移动内容以响应动画或触摸事件非常有用。(I8641c) 
- 为 Layer API 添加了 pivotX、pivotY 参数,以支持围绕某个层上的特定点旋转和缩放 (Icf7c3) 
- 添加了 OnPositionedModifier 和 OnChildPositionedModifier,以取代 OnPositioned 和 OnChildPositioned 可组合函数。(I2ec8f) 
- 添加了 LayerModifier,这是一种允许为布局添加 RenderNode 的修饰符。它允许设置剪裁、不透明度、旋转、缩放和阴影。它将取代 RepaintBoundary。(I7100d、b/150774014) 
- 使布局方向可以从父布局节点传递到子布局。添加了布局方向修饰符。(I3d955) 
- Stack 组件支持从右向左的方向 (Ic9e00) 
- 对 Compose 布局中的 RTL 的初步支持 (Ia5519) 
- Density 和 DensityScope 合并到了一个接口中。现在,您可以使用 DensityAmbient.current 代替 ambientDensity()。只需 with(density) 便可代替 withDensity(density) (I11cb1) 
- 更改了 LayoutCoordinate,使 providedAlignmentLine 成为一个集合,而非映射,并使 LayoutCoordinate 实现了 get() 运算符,而非检索值。这样一来,修饰符可以更轻松地修改集合中的一个或多个值,而无需为每个修饰符创建新的集合。(I0245a) 
- LayoutCoordinate 不再有位置属性。在考虑 LayoutModifier、旋转或缩放时,位置属性没有意义。相反,开发者应使用 parentCoordinate 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个 LayoutCoordinate 的转换。 - LayoutCoordinate 会将 IntPxSize(而不是 PxSize)用于尺寸属性。Layout 将整数像素尺寸用于布局,因此所有布局尺寸都应使用整数,而非浮点值。(I9367b) 
- 改进了 Constraints 的 API Surface (I0fd15) 
- 创建了 CanvasScope API,用于封装 Canvas 对象以公开无状态的声明性绘图 API Surface。转换包含在自身的接收器范围内,大小信息也限定在相应的边衬区范围内。它不需要使用方维护自己的渲染状态对象来配置绘图操作。 - 添加了 CanvasScopeSample 并更新了演示版应用,以包含声明性图形演示 (Ifd86d)
 
- 移除了未使用的 MaskFilter API,因为它的用途有限,并且未在大多数用例中针对硬件加速进行优化 (I54f76) 
- RectangleShape 从 androidx.ui.foundation.shape.* 移到了 androidx.ui.graphics.* (Ia74d5、b/154507984) 
- 将 API 中使用的所有可为 null 的 Color 替换为非 null 值,并使用 Color.Unset 代替 null (Iabaa7) 
- 向 ImagePainter 引入额外的可选 Rect 参数,以支持绘制底层 ImageAsset 的子部分 (I0ea9e) 
- 添加了 Unset Color,以表示未设置的值,而不使用方框颜色。(If901a) 
- 添加了 Canvas.rotate 和 Canvas.scale 扩展方法,以使用可选的数据透视坐标进行转换。这些设置默认位于当前画布平移位置的左上角。 - 还将 Canvas.rotateRad 转为一种扩展程序方法,以实现一致性 (Ibaca6) 
- 创建了 PixelMap API,以支持从 ImageAsset 查询像素信息。(I69ad6) 
- toFrameworkRect/toFrameworkRectF 已重命名为 toAndroidRect/toAndroidRectF,以符合 Compose 和作为构建基础的 Android Framework API 之间的对象转换的命名惯例。同时更新了这些 API 的相关文档 (I86337) 
- 添加了 VectorPainter API,以取代矢量图形的现有 subcomposition API。subcomposition 的结果是 VectorPainter 对象,而不是 DrawModifier。废弃了之前的 DrawVector 可组合项,改为使用 VectorPainter。 - Image(Painter) API 已重命名为 PaintBox(Painter)。创建了 Vector 可组合项,其行为类似于 Image 可组合项,只不过使用 VectorAsset,而不是 ImageAsset(I9af9a、b/149030271) 
- Image 已重命名为 ImageAsset,以更好地区分 Image 数据和即将推出、用于布置布局及绘制内容的 Image 可组合项。_Body:在 android.graphics.Bitmap、Bitmap.asImageAsset() 的基础上创建了扩展方法,该方法可用于创建 ImageAsset 实例,帮助将传统 Android 应用开发与 Compose 框架结合起来 (Id5bbd) 
- 添加了 TextDirection.Content (I48f36) 
- 添加了 TextDecoration.plus 运算符 (I0ad1a) 
- Force已从 TextDirectionAlgorithm 枚举值中移除 (Icc944)
- TextDirectionAlgorithm 已重命名为 TextDirection (I75ce8) 
- 为 TextField 选择实现了 LongPressAndDrag。(I17919) 
- 添加了 AnnotatedString.getStringAnnotations,可返回范围内的所有注解。(I1fa00) 
- 将 Locale 和 LocaleList 的软件包名称从 androidx.ui.text 更改为 androidx.ui.intl (I8132c) 
- TextField 的光标具有闪烁的动画效果 (Id10a7) 
- API 变更:AnnotatedString(builder: Builder) 已重命名为 annotatedString(builder: Builder)。(Ia6377) 
- API 变更:AnnotatedString.Item 已重命名为 AnnotatedString.Range。(I2d44d) 
- 将 AnnotatedString.Builder.addAnnotationString 重命名为 addStringAnnotation。(I5059e) 
- 现在可以通过使用 onTextInputStarted 回调提供的 SoftwareKeyboardController 来隐藏/显示软件键盘(I8dc44、b/151860051) 
- 为委托给 merge() 函数的(文字/段落/跨度)样式添加了加号运算符。(Ia1add) 
- 不再对齐 FontWeight.lerp。它仍然是一个数据类。(I521c2) 
- FontWeight 构造函数现已公开,不再是数据类。(Id6b1f) 
- 向 TextLayoutResult 添加了 getLineStart、getLineEnd、getEllipsisOffset 和 getEllipsisCount (Ibc801) 
- ui-text 模块已重命名为 ui-text-core (I57dec) 
- 移除了未使用的 Size 类,因为正在使用的 ui-geometry 模块中有重复的 Size 类。(I1b602) 
- 添加了 AdapterList,这是一个滚动列表组件,仅用于编写和布局可见项。目前已知问题包括只能处于垂直方向,无法完全处理其子项的所有更改情况。(Ib351b) 
- 向 Box 添加了内边距、边框、形状和背景参数(I05027、b/148147281) 
bug 修复
- 文本字段中的 onFocusChange 回调已重命名为 onFocusChanged (Ida4a1)
- 已废弃 VerticalScroller 和 HoriziontalScroller。请使用 ScrollableColumn 和 ScrollableRow 实现内置的 Column/Row 行为和参数体验,或者对您自己的元素使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同样,ScrollerPosition 也已废弃,取而代之的是 ScrollState(I400ce、b/157225838、b/149460415、b/154105299)
- runOnIdleCompose已重命名为- runOnIdle(I83607)
- 多个测试 API 已重命名,变得更为直观。所有 findXYZ API 均已重命名为 onNodeXYZ。所有 doXYZ API 均已重命名为 performXYZ。(I7f164)
- Compose UI 现在可以在 ViewGroups 内进行组合,无需新的组合。有关示例,请查看 ViewInteropDemo。(I9ab0b、b/160455080)
- 向 MutableVector 添加了 sortWith 和 removeRange (Icccf7)
- 实现了拖动选择手柄,用于更改 TextField 的选择。(I27032)
- 移除了封装 NativeShader 预期类的 Shader 内联类。NativeShader 已重命名为 Shader。封装的 Shader 内联类未向 API Surface 添加任何有价值的东西,并且它是一个内联类,因此请直接使用 NativeShader 类。(I25e4d)
- 已重构 PainterModifier,以不再基于给定约束和 ContentScale 参数提供缩放。Painter 的实现旨在根据进行绘制的 DrawScope 的给定大小,自行缩放其绘制内容。 - 修复了 VectorPainter 的缓存位图调整为默认大小(而非进行绘制的给定大小)的问题。 - 更新了 ImagePainter,使其可扩展自己的内容,而不是依赖于 PainterModifier 代表其完成该操作。(I6ba90) 
- 添加了顶级 onFrameNanos 函数用于动画定时 (Ie34c5) 
- 已废弃 @Untracked 注解,替换为 @ComposableContract(tracked=false) (Id211e) 
- 废弃了 androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue。还废弃了使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项。请改为使用 androidx.ui.input.TextFieldValue(I4066d、b/155211005) 
- 解决了以下问题:如果在调度期间通过 subcomposition 移除了 PointerInputFilter,指针输入调度就会导致崩溃。该问题现已解决。(I1f48b、b/157998762) 
- 解决了以下问题:如果在调度期间通过 subcomposition 移除了 PointerInputFilter,指针输入调度就会导致崩溃。该问题现已解决。(Iab398、b/157998762) 
- 已将 Radius 类重构为内联类。移除了伴生创建方法,改为使用带有默认参数的函数构造函数,从而让沿 y 轴的半径与强制要求的 x 轴半径参数相匹配。 - 更新了 DrawScope.drawRoundRect,以针对沿 x 和 y 轴的半径使用单个 Radius 参数,而不是 2 个单独的浮点数值 (I46d1b) 
- Recompose 可组合项已不再属于有效抽象。大多数重新组合都应由 MutableState 分配促成。在此之外,建议您使用 - invalidate函数来触发对当前范围的重新组合。(Ifc992)
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Iede0b) 
- 更改了 Compose 的编译器的代码生成策略。在更改之前,Compose 编译器会转换对可组合函数的调用。进行此更改后,现在我们可以转换可组合函数的正文,并使调用位置保持不变(大多数情况下)。 - 这意味着与 Compose 运行时进行通信的大多数逻辑发生在函数正文的开头,而不是在调用位置。 - 这应该是针对所有 Compose 操作的源兼容性更改。大多数 Compose 用户都不需要在更改后更新任何代码。 - 为了支持这项更改,所有可组合函数的 JVM 签名均已更改。将接受单个参数的可组合函数转换为接受 3 个参数的函数,其他参数为合成器,即“键”整数,一个用于通过调用传播元数据的位掩码整数。 - Compose 现在还会将默认参数转换为可组合函数。这项操作不会引入函数本身的额外合成默认过载,因此此更改会导致定义的函数变少。 - 已知的有意行为更改是由于以下原因造成的: - 有些调用会跳过之前不会跳过的位置
- 默认参数表达式中的可组合项表达式现已正确订阅并处理
 - 这项工作包括一些优化: 1. 参数的比较结果通过调用图传播到其他可组合项函数。这将导致运行时比较数减少,槽表大小减小,并更多地跳过之前不跳过的可组合项函数 2. 在编译时被确定为“静态”的参数将不再进行比较或存储在运行时中。这样可以减少比较数并减小槽表大小。 3. 函数正文的控制流结构用于最大限度减少生成的组数量。这样可以减小槽表大小,并减少运行时工作量 4. 如果未在函数正文内部使用调度和接收器参数,则在确定函数的可跳过性时不包含未使用的这些参数。 - 大多数破坏性更改都面向编译器直接针对的 API,并且通常不会影响 Compose: 1. 移除了 Composer::startExpr 2. 移除了 Composer::endExpr 3. 废弃了 Composer::call 4. 移除了 - key的非可变参数过载。今后将使用- vararg版本。 5. 废弃了 Pivotal 注解。使用- key作为替代方案。6. ScopeUpdateScope::updateScope 更改为 Function3 而非 Function1 7. 更新了 restartableFunction 和 restartableFunctionN,以包含其他编译时参数(I60756、b/143464846)
- 移除了已废弃的 LayoutAlign 修饰符。(I10877) 
- 移除了 RepaintBoundary,改为使用 DrawLayerModifier (I00aa4) 
- Button、FloatingActionButton 和 Clickable 现在有各自的 - enabled参数。Button 上的某些参数已重命名或重新排序。(I54b5a)
- 将 ButtonStyle 替换成了不同的函数,并移除了文本(字符串)过载。如需了解使用信息,请参阅更新后的示例。(If63ab、b/146478620、b/146482131) 
- Ambient API 重大更改。如需了解详情,请参阅日志和 - Ambient<T>文档(I4c7ee、b/143769776)
- 将默认 TextDirection 的行为更改为由 LayoutDirection 决定。即,如果 LayoutDirection 为 RTL,则默认的 TextDirection 将为 RTL。以前,它为 TextDirection.ContentOrLtr/Rtl (I4e803) 
- bug 修复:在 AnnotatedString 上嵌套字体粗细和字体样式时,无法正确呈现文本。(I77a9d) 
- 向 Text() 添加了常用参数。如果您当前正在创建本地文本样式以传递少量此类参数(如 Text(style = TextStyle(textAlign = TextAlign.Center))),则现在可以直接提供参数:Text(textAlign = TextAlign.Center) (I82768) 
- ui-android-text 模块已重命名为 ui-text-android (I68cbe) 
