Compose Foundation
| 最近更新时间 | 稳定版 | 候选版 | 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.foundation:foundation:1.9.4" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.foundation:foundation: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.foundation:foundation-*:1.10.0-beta01。版本 1.10.0-beta01 中包含这些提交内容。
API 变更
- 更新了所有间接触控 API,以使用名称间接指针 API 来匹配指针输入 API。(I238ce、b/451607214)
- 使用 @FrequentlyChangingValue对PagerState.currentPageOffsetFraction进行了注解。(Idfaab)
bug 修复
- 修复了 RTL 布局方向的跑马灯行为。(Ib8be3)
版本 1.10.0-alpha05
2025 年 10 月 8 日
发布了 androidx.compose.foundation:foundation-*:1.10.0-alpha05。版本 1.10.0-alpha05 中包含这些提交内容。
API 变更
- PaddingValues现在支持加法和减法,以简化常见的边衬区计算。(I327e1、b/244468479)
bug 修复
- ComposeFoundationFlags.isPausableCompositionInPrefetchEnabled默认处于启用状态。这是一种性能优化,可让我们更好地分配预提取期间需要完成的工作,例如,我们可以在一个界面帧中仅对- LazyColumn的下一个项目的部分内容执行合成,然后在后续帧中继续合成其余部分。(I4c7fe)
版本 1.10.0-alpha04
2025 年 9 月 24 日
发布了 androidx.compose.foundation:foundation-*:1.10.0-alpha04。版本 1.10.0-alpha04 中包含这些提交内容。
API 变更
- 为 PagerState添加了ScrollIndicatorState实现。(I113b7)
- 为 LazyStaggeredGridState添加了ScrollIndicatorState实现。(I1028e)
- 为 LazyGridState添加了ScrollIndicatorState实现。(I9e50c)
- 为 LazyListState添加了ScrollIndicatorState实现。(I5ee29)
- 为 ScrollState添加了ScrollIndicatorState实现。(I27f66)
- 在 ScrollableState接口中引入了scrollIndicatorState属性 (Idca93)
- 移除了标志 isWindowInsetsModifierLocalNodeImplementationEnabled(I15e8f、b/440964232)
- 公开了 scrollableArea()修饰符,该修饰符可用于使组件可滚动,并具有以下行为:将内容剪裁到其边界,并根据方向、RTL 和reverseScrolling标志自动处理内容滚动方向。(I9471b、b/316559454)
版本 1.10.0-alpha03
2025 年 9 月 10 日
发布了 androidx.compose.foundation:foundation-*:1.10.0-alpha03。版本 1.10.0-alpha03 中包含这些提交内容。
API 变更
- 移除了 ComposeFoundationFlags.isNonComposedClickableEnabled(I0dfc0、b/406228525)
- 将用于创建 FillableData实例的工厂函数移至伴生对象。请使用新的工厂方法FillableData.createFrom(value),而不是调用FillableData(value)。(I2e200、b/441719650)
- 引入了 BeyondBoundsLayoutModifierNode一个新的修饰符节点,用于执行焦点搜索的超出边界布局。(I39be1、b/416133658)
- 将 ScrollState.value标记为@FrequentlyChangingValue属性。(I4723d)
- 引入了 LazyLayoutKeyIndexMap和一个用于默认实现的工厂。(I4fd0c、b/415038029)
bug 修复
- 列和行现在可以正确地将商品的实际大小传递给 Modifier.align,从而解决了自定义Modifier.align实现接收到错误值 0 的问题。(I8194f、b/439716351)
版本 1.10.0-alpha02
2025 年 8 月 27 日
发布了 androidx.compose.foundation:foundation-*:1.10.0-alpha02。版本 1.10.0-alpha02 中包含这些提交内容。
API 变更
- 移除了标志 isFlingContinuationAtBoundsEnabled。(I6b84f)
- 移除了标志 isAdjustPointerInputChangeOffsetForVelocityTrackerEnabled。(I62380)
- 移除了标志 isOnScrollChangedCallbackEnabled。(I667dc)
- 移除了标志 isAutomaticNestedPrefetchEnabled。(I4f416)
- 移除了标志 DragGesturePickUpEnabled。(Ib8500)
- 引入了用于表示滚动条状态的 ScrollIndicatorStateAPI (I5e229)
bug 修复
- 修复了使用 Modifier.anchoredDraggable未调用confirmValueChange的 bug。(Iff7cc)
版本 1.10.0-alpha01
2025 年 8 月 13 日
发布了 androidx.compose.foundation:foundation-*:1.10.0-alpha01。版本 1.10.0-alpha01 中包含这些提交内容。
API 变更
- 更新了 Pager 的预提取策略,以使用缓存窗口,而不是默认的滚动方向上的 1 个项。现在,Pager 中默认启用初始预取,预取将基于相当于 1 个视口大小的窗口大小,也就是说,我们将尝试使用预取项填充整个视口。商品也会保留更长时间。(I4d45e、b/292136289)
- 添加了 ComposeFoundationLayoutFlags.isWindowInsetsOptimizationEnabled标志,以便在新的实现导致行为发生变化时停用WindowInsets性能优化。(I8e912)
- SnapFlingBehavior现在允许贴靠动画规范在贴靠期间过冲。这样一来,便可将例如弹性弹簧规范作为- snapAnimationSpec来生成弹性贴靠动画。使用贴靠规范执行接近操作时,系统会继续忽略过冲值。(I373c2)
- 如果鼠标或触控板在 ComposeView中的指针按下操作未发生在获得焦点的节点的边界内,则现在会自动清除焦点。这会带来“点按即可清除焦点”的用户体验,与使用指针输入设备时的当前行为相比,这种体验更符合预期。您可以使用新的AbstractComposeView.isClearFocusOnPointerDownEnabledAPI 选择停用此行为。(I6322b、b/282963174)
- 现在,Scrollable 可以更好地支持二维鼠标滚轮滚动事件。新增了一个测试 API,用于帮助测试 MouseInjectionScope中的使用情形。我们还在MouseInjectionScope中为滚动方法引入了新的重载,并引入了一个用于控制新行为的标志,称为isMouseWheel1DAxisLockingEnabled(I136df)
- 更新了 DragGestureNode,以使用原始指针输入,而不是暂停指针输入以进行优化。这些更改已添加到标志isNonSuspendingPointerInputInDraggableEnabled(I0fa4b) 后面
- 使用 @FrequentlyChangingValue对一些AnchoredDraggableAPI 进行了注解。offset、requireOffset和progress经常变化,不应在撰写时读取。请从布局和绘制阶段、效果或组合之外的其他位置访问这些值。(I05539)
- 移除了标志 isOnScrollChangedCallbackEnabled、isAdjustPointerInputChangeOffsetForVelocityTrackerEnabled、isFlingContinuationAtBoundsEnabled、isAutomaticNestedPrefetchEnabled、DragGesturePickUpEnabled、isPointerInteropFilterDispatchingFixEnabled、isNestedScrollInteropPostFlingFixEnabled、isNestedScrollDispatcherNodeFixEnabled(I36c18)
- 引入 CompositionLocal,可用于修改自动填充成功填充突出显示的画笔。(I52329)
- 向 FocusProperties添加了可自定义的焦点矩形。现在,您可以定义自定义焦点区域,而不是默认使用可聚焦对象的边界框。焦点遍历系统和可滚动容器的“保持在视图中”逻辑会使用此信息。(Id6555、b/368378073)
- 添加了新的 LineHeightStyle.Mode,名为Tight。此模式有助于强制执行较小的行高,即使这可能会截断较高的字形。(Id3849)
- 引入了新的 Interpolatable 接口,该接口允许在不同类型之间进行自动插值,前提是其中一种类型知道如何从另一种类型进行转换。此接口在多种 Compose 类型(例如 Brush 和 Shape)中得到利用,但也可以在外部使用。(I58eab)
- 添加了间接输入事件以及一种指定用于滚动的坐标轴的方法。(I58e7c)
- 添加了新的 WindowInsets.cutoutPathAPI 以获取显示屏凹口的路径(Ib90b1、b/279636456)
- 已移除 isWindowInsetsDefaultPassThroughEnabled标志,默认情况下 WindowInsets 不会消耗,以便子视图可以默认接收WindowInsets。(I888e0、b/412469666)
bug 修复
- isNonSuspendingPointerInputInDraggableEnabled应暂时停用。(Ia41c4)
- 将默认 minSdk 从 API 21 移至 API 23(Ibdfca、b/380448311、b/435705964、b/435705223)
- 更新了 DraggableAnchors的minPosition/maxPosition文档,以指明这些 API 应与其他DraggableAnchorsAPI 一样返回 Float.NaN。(I0460a)
- 修复了锚点为空时 DraggableAnchors#closestAnchor会崩溃的 bug (I4e646)
- 针对 DraggableAnchors进行了性能改进 (If4065, I0460a)
- TextFieldState.edit { }不再清除撤消历史记录。而是会创建一个独立的撤消条目。如果希望在调用- edit后清除撤消堆栈,请使用- TextFieldState.undoState.clearHistory()。(I12c14)
- 添加了对双点按以选择 SelectionContainer和BasicTextField(value, onValueChange)重载中的字词的支持。(Ibb06a)
- 修复了小 bug,使 AutoboxingStateValuePropertyDetector同时兼容 K1 和 K2 (Ie81c1)
- 由 AndroidView 发出的 requestRectangleOnScreen请求现在可以正确传播到 Compose。这有助于在互动时使EditText等视图保持在屏幕上。(Ibbf4c)
- 列和行现在可以正确地将商品的实际大小传递给 Alignment.Vertical.align和Alignment.Horizontal.align,从而解决了自定义对齐实现接收到错误值 0 的问题。(I3e460、b/349722072)
版本 1.9
版本 1.9.4
2025 年 10 月 22 日
发布了 androidx.compose.foundation:foundation-*:1.9.4。版本 1.9.4 中包含这些提交内容。
版本 1.9.3
2025 年 10 月 8 日
发布了 androidx.compose.foundation:foundation-*:1.9.3。版本 1.9.3 中包含这些提交内容。
版本 1.9.2
2025 年 9 月 24 日
发布了 androidx.compose.foundation:foundation-*:1.9.2。版本 1.9.2 中包含这些提交内容。
版本 1.9.1
2025 年 9 月 10 日
发布了 androidx.compose.foundation:foundation-*:1.9.1。版本 1.9.1 中包含这些提交内容。
bug 修复
- 修复了在 LazyLists中使用LazyLayoutCacheWindow时发生的崩溃问题 (c39f5f3)
版本 1.9.0
2025 年 8 月 13 日
发布了 androidx.compose.foundation:foundation-*:1.9.0。版本 1.9.0 中包含这些提交内容
自 1.8.0 以来的重要变更
- 随 Compose 提供的 Lint 检查现在要求 AGP 版本不低于 8.8.2。如果您无法升级 AGP,可以改为在 gradle.properties中使用android.experimental.lint.version=8.8.2(或更新版本)单独升级 Lint。如需在 IDE 中运行 Compose lint 检查,您必须使用 Android Studio Ladybug 或更高版本。
- 重大变更:不含 Indication 参数的 clickable、combinedClickable、selectable、toggleable和triStateToggleable重载现在仅支持使用LocalIndication提供的IndicationNodeFactory实例。当您使用此版本的 Compose 重新编译这些修饰符的使用情况时,此更改将生效。二进制 / 传递依赖项不受影响。如果您向LocalIndication提供已弃用的指示实现,并使用这些 API,则会在运行时引入崩溃。需要进行此行为变更,才能提高性能,并允许使用这些修饰符的可组合函数在重组期间跳过。您可以使用ComposeFoundationFlags.isNonComposedClickableEnabled=false暂时选择不采用此行为变更,以便在不因迁移而受阻的情况下升级 Compose。此标志将在一个稳定版发布后移除。如需解决此问题,请迁移所有已弃用的 Indication 实现,以改用IndicationNodeFactory。您还可以使用具有显式 Indication 参数的重载 - 这些重载将继续支持非IndicationNodeFactory实例的 Indication,但出于性能考虑,不建议这样做。(I6bcdc、b/316914333)
- 引入了 isFlingCancellationWithNestedScrollFixEnabled,以修复嵌套滚动中的滑动传播问题。在此 CL 中,我们恢复了 I9326a 中移除的轻拂继续行为。如果子项从组合中移除,我们仍会取消轻拂动画。(I467f4、b/405910180、b/419049142、b/416784125)
- 重新添加了 ContentInViewNode中对scrollAnimationSpec的使用。该行为在scrollAnimationSpec弃用期间被移除,导致使用情形中断。(I1436a、b/403301605)
- 已应用防抖功能 LazyLayout。(If5db4)、LazyLayoutPrefetchState以及其调度方法schedulePrecomposition和schedulePrecompositionAndPremeasure。(I4362f、b/252853717)和LazyLayoutItemProvider(Icce09、b/261565751)
- 允许 Compose 触发 ViewTreeObserver.OnScrollChanged。此行为是在isOnScrollChangedCallbackEnabled标志下引入的。我们还推出了DelegatableNode dispatchOnScrollChanged的扩展函数。(I34b9d、b/238109286)
- 引入了 Modifier.scrollable2D、Scrollable2DState和用于创建状态的配套 API。还引入了常见的滚动扩展函数。(Ic61c8、b/214410040)
- PrefetchScheduler和自定义已弃用,取而代之的是可自动完成所有工作的内部实现。(I3a9a6、b/420551535)
- TextFieldState.edit { }不再清除撤消历史记录。而是会创建一个独立的撤消条目。如果需要实现的效果是在编辑调用后清除撤消堆栈,请使用- TextFieldState.undoState.clearHistory()。(I12c14)
- 上下文菜单和选择工具栏现在都支持智能项(智能选择)
- 添加了样式化文本 OutputTransformation,以允许使用state重载来设置TextField的输出样式。
- TextField:支持上下文菜单(右键点击菜单)。
- 现在,从 SelectionContainer中的多个 Text 可组合项复制的文本将在来自不同 Text 可组合项的文本之间添加换行符 \n。(I25332、b/285036739)
- 引入了通过 AnnotatedString创建自定义项目符号列表的 API(I1d066、b/383269496、b/139326648)
- BasicTextField的- state重载会在光标大小发生变化时,使其保持在视图中。(I0eb41、b/406187741)
- 重大变更:background和border修饰符节点现在实现了SemanticsModifierNode。这可能会导致向语义树添加新的SemanticsNodes,从而导致在对语义树结构做出假设的测试中出现测试失败。例如,如果当前节点和目标节点之间添加了新节点,则使用onChild、onParent、onSibling和其他类似方法进行断言的测试可能会失败。解决这些故障的首选方法是直接向目标节点添加testTag。另一种方法是使用更宽松的匹配器,例如onNode(hasAnyAncestor(hasText("ancestor")) and hasText("target"))。(I638b5)
版本 1.9.0-rc01
2025 年 7 月 30 日
发布了 androidx.compose.foundation:foundation-*:1.9.0-rc01。版本 1.9.0-rc01 中包含这些提交内容。
bug 修复
- TextFieldState.edit { }不再清除撤消历史记录。而是会创建一个独立的撤消条目。如果希望在调用- edit后清除撤消堆栈,请使用- TextFieldState.undoState.clearHistory()。(I12c14)
版本 1.9.0-beta03
2025 年 7 月 16 日
发布了 androidx.compose.foundation:foundation-*:1.9.0-beta03。版本 1.9.0-beta03 中包含这些提交内容。
bug 修复
- 修复了以下回归 bug:当提供空的标题内容时,导致延迟网格中的粘性标题行为中断。(e3e3400)
版本 1.9.0-beta02
2025 年 7 月 2 日
发布了 androidx.compose.foundation:foundation-*:1.9.0-beta02。版本 1.9.0-beta02 中包含这些提交内容。
新功能
- 支持上下文菜单和选择工具栏中的智能项。
API 变更
- 修复了以下 bug:某些硬件键盘或电视遥控器无法使用方向键在新的 TextFields中移动光标,而是将焦点切换到另一个可组合项。添加了ComposeFoundationFlag.isTextFieldDpadNavigationFixEnabled,以便在相应修复以不可恢复的方式导致不良行为时,暂时停用该修复。(Ie1922)
bug 修复
- 修复了以下问题:如果存在固定项,粘性标题不会粘附。(I9198d、b/385006133)
- TextObfuscationMode.RevealLastTyped现在遵循系统设置“TEXT_SHOW_PASSWORD”。(I41c0c)
- 修复了以下 bug:当文本工具栏首次打开时,BasicTextField错误地显示“已粘贴剪贴板内容”警告。(I5fda2)
版本 1.9.0-beta01
2025 年 6 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.9.0-beta01。版本 1.9.0-beta01 中包含这些提交内容。
重大变更
- background和- border修饰符节点现在实现了- SemanticsModifierNode。这可能会导致向语义树添加新的- SemanticsNodes,从而导致在对语义树结构做出假设的测试中出现测试失败。例如,如果当前节点和目标节点之间添加了新节点,则使用- onChild、- onParent、- onSibling和其他类似方法进行断言的测试可能会失败。解决这些故障的首选方法是直接向目标节点添加- testTag。另一种方法是使用更宽松的匹配器,例如- onNode(hasAnyAncestor(hasText("ancestor")) and hasText("target"))。(I638b5)
API 变更
- 已将 Modifier.addTextContextMenuComponents重命名为appendTextContextMenuComponents。(I4c43f)
- 移除了 AnnotatedOutputTransformation并将addStyle函数移到了TextFieldBuffer。addStyle仍只能通过OutputTransformation调用。(I9930a、b/417991824)
- 重写了 Clickable,不再使用挂起指针输入,以进行优化。此功能通过标志启用 - 如果您在新实现中遇到 bug,可以停用此功能 - ComposeFoundationFlags.isNonSuspendingPointerInputInClickableEnabled。(I85b65)
- 引入了 isFlingCancellationWithNestedScrollFixEnabled,以修复嵌套滚动中的滑动传播问题。在此 CL 中,我们恢复了 aosp/3260391 中移除的滑动继续行为。如果子项从组合中移除,我们仍会取消轻拂动画。(I467f4、b/405910180、b/419049142、b/416784125)
- WindowInsetsRulers:将- rulersIgnoringVisibility更改为最大值。将- getDisplayCutoutBounds()更改为- PlacementScope的扩展函数。- WindowInsetsAnimationProperties已更改为- WindowInsetsAnimation,- getAnimationProperties()已更改为- getAnimation()。(I3816f)
- 将 InsetsRulers更改为位于通用代码中,名称为WindowInsetsRulers。简化了 API,使所有边衬区均为WindowInsetsRulers。将非标尺动画属性提取到了AnimationProperties类中。WindowInsetsRulers.innermostOf()可用于合并多个WindowInsetsRulers。(I2f0c6、b/415012444)
bug 修复
- 重新添加了 ContentInViewNode中对scrollAnimationSpec的使用。该行为在scrollAnimationSpec弃用期间被移除,导致使用情形中断。(I1436a、b/403301605)
版本 1.9.0-alpha04
2025 年 6 月 4 日
发布了 androidx.compose.foundation:foundation-*:1.9.0-alpha04。版本 1.9.0-alpha04 中包含这些提交内容。
API 变更
- PrefetchScheduler和自定义已弃用,取而代之的是可自动完成所有工作的内部实现。(I3a9a6、b/420551535)
- 更新了 Scrollable2DState,以在canScroll方法中使用偏移量而非角度。(I28694、b/417268474)
- 已将 AnnotatedOutputTransformation中的addAnnotation替换为addStyle。(I91c6f、b/417991824)
- 已应用防抖功能 LazyLayout。(If5db4)
- 稳定了 LazyLayoutPrefetchState的空构造函数及其调度方法schedulePrecomposition和schedulePrecompositionAndPremeasure。(I4362f、b/252853717)
- 在 Android 上引入了 ProcessTextKey,用于为PROCESS_TEXTintent 操作添加的上下文菜单项。(If0ac4)
- 将上下文菜单 API 公开。公开了 Modifier.addTextContextMenuComponents和Modifier.filterTextContextMenuComponents,用于在上下文菜单中添加和移除项。此外,还公开了以下基本 API,以便用户构建自定义的上下文菜单:- TextContextMenuProvider
- TextContextMenuDataProvider
- TextContextMenuData
- TextContextMenuComponent
- LocalTextContextMenuDropdownProvider
- LocalTextContextMenuToolbarProvider(I1b7b0)
 
- 使 LazyLayoutItemProvider稳定(Icce09、b/261565751)
- 引入了可通过 ComposeFoundationFlags.isSmartSelectionEnabled启用/停用的 Android 智能选择功能。它还公开了一个静态compositionLocalLocalTextClassifierCoroutineContext,可用于指定启动TextClassification作业的CoroutineContext。(I1dbaa、b/139321320)
版本 1.9.0-alpha03
2025 年 5 月 20 日
发布了 androidx.compose.foundation:foundation-*:1.9.0-alpha03。版本 1.9.0-alpha03 中包含这些提交内容。
API 变更
- 添加了 AnnotatedOutputTransformation,用于在渲染之前向TextField添加注释。(Ibc6f0、b/389978748)
- 引入 LazyLayoutMeasurePolicy并使LazyLayoutMeasureScope稳定。(I8c5df、b/252853717)
- BasicSecureTextField现在会提升其内部- BasicTextField的 ScrollState。(I6e576)
- 引入了 Modifier.onFirstVisible和Modifier.onVisibilityChanged修饰符,它们是基于Modifier.onLayoutRectChanged构建的高级修饰符。这些修饰符专门用于处理许多常见的应用要求,例如记录展示次数、自动播放视频等。这些修饰符在构建时考虑到了性能,因此可以在关键的基于列表的场景中使用,而不会牺牲滚动性能。除了这些修饰符 API 之外,还添加了其他 API 来支持这些使用情形,并让开发者能够更轻松地创建完全适合其使用情形的类似自定义修饰符。RelativeLayoutBounds(I759b8)
- 引入了具有触控边距和屏幕方向锁定控制功能的 detectDragGestures过载。(Iadb0d)
- 引入了 Modifier.scrollable2D、Scrollable2DState和用于创建状态的配套 API。还引入了常见的滚动扩展函数。(Ic61c8、b/214410040)
- Compose 64 位颜色值无法直接与 Android ColorLongs进行比较,因为某些颜色空间的颜色空间 ID 顺序不正确。为了实现 Android 色彩空间的相互转换,我们添加了两个新的 API:toColorLong()和fromColorLong()。(I36899)
bug 修复
- 现在,从 SelectionContainer中的多个 Text 可组合项复制的文本将在来自不同 Text 可组合项的文本之间添加换行符\n。(I25332、b/285036739)
版本 1.9.0-alpha02
2025 年 5 月 7 日
发布了 androidx.compose.foundation:foundation-*:1.9.0-alpha02。版本 1.9.0-alpha02 中包含这些提交内容。
API 变更
- 修复了在 DragGestureNode中将指针输入更改添加到VelocityTracker的方式,这可以通过新标志isOffsetPositionBeforeAddingToVelocityTrackerEnabled进行控制。(Ic7992、b/292556787、b/236451818)
- 公开 await[Vertical/Horizontal]PointerSlopOrCancellation(I6968b、b/298903681)
- AbstractComposeView.consumeWindowInsets现已默认为 false。设置为 false 时,- WindowInsets会自动根据子项的大小和位置进行调整,因此不再需要将其默认设置为 true。此问题修复了子视图默认情况下未接收- WindowInsets更新的问题。开发者可以通过以下方式选择停用更新:将实验性- ComposeFoundationLayout.isWindowInsetsDefaultPassThroughEnabled更改为 true,或者最好在所有 Compose 视图实例上将- AbstractComposeView.consumeWindowInsets设置为 true。(I6fa0a、b/411868840)
外部贡献
- 修复了 Pager 在 beyondViewportPageCount 值非常大的情况下发生的崩溃问题 (Idb2db)
版本 1.9.0-alpha01
2025 年 4 月 23 日
发布了 androidx.compose.foundation:foundation-*: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 或更高版本。
- 重大变更:不含 Indication 参数的 - clickable、- combinedClickable、- selectable、- toggleable和- triStateToggleable重载现在仅支持使用- LocalIndication提供的- IndicationNodeFactory实例。当您使用此版本的 Compose 重新编译这些修饰符的使用情况时,此更改将生效。二进制 / 传递依赖项不受影响。如果您向- LocalIndication提供已弃用的指示实现,并使用这些 API,则会在运行时引入崩溃。需要进行此行为变更,才能提高性能,并允许使用这些修饰符的可组合函数在重组期间跳过。您可以使用- ComposeFoundationFlags.isNonComposedClickableEnabled=false暂时选择不采用此行为变更,以便在不因迁移而受阻的情况下升级 Compose。此标志将在一个稳定版发布后移除。如需解决此问题,请迁移所有已弃用的 Indication 实现,以改用- IndicationNodeFactory。您还可以使用具有显式 Indication 参数的重载 - 这些重载将继续支持非- IndicationNodeFactory实例的 Indication,但出于性能考虑,不建议这样做。(I6bcdc、b/316914333)
API 变更
- 引入了通过 AnnotatedString创建自定义项目符号列表的 API(I1d066、b/383269496、b/139326648)
- 允许 Compose 触发 ViewTreeObserver.OnScrollChanged。此行为是在isOnScrollChangedCallbackEnabled标志下引入的。我们还推出了DelegatableNode dispatchOnScrollChanged的扩展函数。(I34b9d、b/238109286)
- 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本才能使用 (Idb6b5)
- 为 TextFieldState添加了 lint 检查支持,以确保在组合中记住它。请考虑改用rememberTextFieldState。(I53d74)
- 为 FocusRequester添加了 lint 检查支持,以确保在组合中记住它 (I6bf91)
- 为 BringIntoViewRequester添加了 lint 检查支持,以确保在组合中记住它。(Ibfba6)
- 在网格和列表策略中为 schedulePrefetch调用引入了范围,以与提供大小和索引信息的LazyListPrefetchState功能保持一致。(Iad80c)
- 重大变更:不含 Indication 参数的 clickable、combinedClickable、selectable、toggleable和triStateToggleable重载现在仅支持使用LocalIndication提供的IndicationNodeFactory实例。当您使用此版本的 Compose 重新编译这些修饰符的使用情况时,此更改将生效。二进制 / 传递依赖项不受影响。如果您向LocalIndication提供已弃用的指示实现,并使用这些 API,则会在运行时引入崩溃。需要进行此行为变更,才能提高性能,并允许使用这些修饰符的可组合函数在重组期间跳过。您可以使用ComposeFoundationFlags.isNonComposedClickableEnabled=false暂时选择不采用此行为变更,以便在不因迁移而受阻的情况下升级 Compose。此标志将在一个稳定版发布后移除。如需解决此问题,请迁移所有已弃用的 Indication 实现,以改用IndicationNodeFactory。您还可以使用具有显式 Indication 参数的重载 - 这些重载将继续支持非IndicationNodeFactory实例的 Indication,但出于性能考虑,不建议这样做。(I6bcdc、b/316914333)
- 引入一个用于控制自动嵌套预提取行为的标志:isAutomaticNestedPrefetchEnabled(I8d448)
- 为 LazyGridState和rememberLazyGridState引入了接受LazyLayoutCacheWindow的过载。(I51151)
- 为窗口边衬区添加了标尺。添加了 DerivedRuler以允许从另一个 Ruler 计算 Ruler。修改PlacmentScope以实现密度。(I658bc、b/359260964)
- 添加了一个零实参 WindowInsets()工厂函数,以便轻松创建空的WindowInsets。(I65f62、b/395311689)
- 为空的 PaddingValues添加了PaddingValues.Zero。(If193e、b/386255688)
bug 修复
- BasicTextField的- state重载会在光标大小发生变化时,使光标保持在视图中。(I0eb41、b/406187741)
- 更新了 LazyListPrefetchStrategy和LazyGridPrefetchStrategy中的onVisibleItemsUpdatedAPI,以告知初始状态。(If2cfa)
版本 1.8
版本 1.8.3
2025 年 6 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.8.3。版本 1.8.3 中包含这些提交内容。
1.8.2 版
2025 年 5 月 20 日
发布了 androidx.compose.foundation:foundation-*:1.8.2。版本 1.8.2 中包含这些提交内容。
bug 修复
- 引入了一项修复,可防止在计算焦点搜索要加载的商品数量时出现除以零的情况。将检查应用于使用 LazyLayoutBeyondBoundsState的所有布局。(8e6dc8)
版本 1.8.1
2025 年 5 月 7 日
发布了 androidx.compose.foundation:foundation-*:1.8.1。版本 1.8.1 中包含这些提交内容。
bug 修复
- 修复了 BasicText和TextAutoSize中的一个 bug,即使用TextOverflow.Ellipsize会导致文字比最佳大小更小。(I1e1d8、b/396582066)
- 修复了 BasicTextField中的 bug,即当TextFieldDecorator跳过调用innerTextField时会导致各种崩溃。(I2638c)、b/308398612
- 修复了 TextField中的一个 bug,该 bug 会导致在TextFieldState实例发生更改时,文本工具栏和选择手柄完全消失。(I8068a)、b/390477786
- 修复了 BasicText中的一个 bug,即当textAlign设置为非默认值时,更改最小宽度限制不会更新文字的放置位置。(I77a96)、b/406305552
版本 1.8.0
2025 年 4 月 23 日
发布了 androidx.compose.foundation:foundation-*:1.8.0。版本 1.8.0 中包含这些提交内容。
版本 1.8.0-rc03
2025 年 4 月 9 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-rc03。版本 1.8.0-rc03 中包含这些提交内容。
版本 1.8.0-rc02
2025 年 3 月 26 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-rc02。版本 1.8.0-rc02 中包含这些提交内容。
版本 1.8.0-rc01
2025 年 3 月 12 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-rc01。版本 1.8.0-rc01 中包含这些提交内容。
版本 1.8.0-beta03
2025 年 2 月 26 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-beta03。版本 1.8.0-beta03 中包含这些提交内容。
bug 修复
- 添加了一个新的语义属性 InputText,用于捕获应用输出转换之前的文本字段值。(Iae46a、b/395911609、b/176949051)
- 移除了已弃用的 AutoSize重载。请使用具有相同功能的TextAutoSizeAPI。(I2c90f)
- 修复了 TextAutoSize的缓存问题,即在具有相同限制条件的第二次布局传递中,可能会使用第二大的合适字体大小,而不是最大的合适字体大小。(Id367f)
版本 1.8.0-beta02
2025 年 2 月 12 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-beta02。版本 1.8.0-beta02 中包含这些提交内容。
bug 修复
- 修复了使用 LayoutModifierNode的过度滚动实现无法在滚动容器内正常运行的问题。
版本 1.8.0-beta01
2025 年 1 月 29 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-beta01。版本 1.8.0-beta01 中包含这些提交内容。
API 变更
- 移除了 SemanticsNodeInteraction.semanticsId()。已改用SemanticsNodeInteraction.fetchSemanticsNode().id。(Ie397a)
- 重写 requestAutofillAPI 以使其存在于自动填充管理器之外。(Id1929)
- ContextualFlowRow和- ContextualFlowColumn已标记为已弃用。此实验性组件是在 1.7 中引入的,尚未稳定,并且实现已被认为是不理想的。未来,可能会提供一个组件来解决此组件旨在解决的应用场景。- FlowRow和- FlowColumn具有实验性过载,这些过载是在 1.7 中引入的,包含- overflow参数。此参数已被弃用,您可改用不含此参数的重载。这些重载的默认“overflow”行为将为“Clip”,自引入以来一直如此。
- ContextualFlowRow的许多应用场景都可以使用- FlowRow来实现,但我们承认这并非完全普遍适用。- ContextualFlowRow完全可以在用户空间中实现,您可以尝试复制其实现并根据需要进行调整。未来,我们希望以不同的方式解决这些使用情形。(Ibafec)
 
bug 修复
- 修复了以下问题:在动画期间,带有省略号的文本布局有时会错误地进行转换。如需了解详情,请参阅 b/389707025(Ie55b1、b/389707025)
- 修复了 BasicText中TextAutoSize和maxLines设置为 1 时的 bug。(Ic0450、b/376834366)
- 文本的最小固有高度现在会考虑 minLines参数。这意味着,报告的最小固有高度不会小于满足minLines参数所需的高度(I225f9、b/388299762)
版本 1.8.0-alpha08
2025 年 1 月 15 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha08。版本 1.8.0-alpha08 包含这些提交内容。
API 变更
- AutoSize:将 AutoSize重命名为TextAutoSize,并发布了可用于创建自定义TextAutoSize实现的 API。如需查看自定义文本自动调整大小功能的实现示例,请参阅TextAutoSizeSample。(I85756)
- 将 DetectTapGesturesEnableNewDispatchingBehavior功能标志移至ComposeFoundationFlags并将其重命名为isDetectTapGesturesImmediateCoroutineDispatchEnabled。旧标志已弃用,现在将改为委托给ComposeFoundationFlags.isDetectTapGesturesImmediateCoroutineDispatchEnabled。(I62932)
bug 修复
- 默认情况下,DetectTapGesturesEnableNewDispatchingBehavior处于启用状态。TapGestureDetectorAPI 现在默认使用新的调度行为(立即调度)。(I9f2bc、b/369648479)
- 修复了 requiredWidth/Height/Size修饰符,现在可正确处理固有尺寸。(Ie3d7d、b/368113212)
外部贡献
- 在 foundation 中通用化了 BasicTooltip,在 material3 中通用化了BasicTooltip/Tooltip。(Ifc2e6)
- 添加了新的剪贴板接口及其对应的 CompositionLocal。(I80809)
版本 1.8.0-alpha07
2024 年 12 月 11 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha07。版本 1.8.0-alpha07 中包含这些提交内容。
API 变更
- 删除了有助于从 BasicText中恢复移除内部graphicsLayer的ComposeFoundationFlags.RemoveBasicTextGraphicsLayerEnabled标志。如果您之前使用过此标志,请提交 bug 告知我们原因。您还可以只向BasicText调用传递Modifier.graphicsLayer(),以实现与之前相同的行为。(Id9f90)
- 为新的 stickyHeaderDSL 添加了默认实现。(I68986)
- 使 LocalAutofillHighlightColor组合本地使用颜色类型。(I0e05b)
- OverscrollEffect#withoutDrawing已重命名为- OverscrollEffect#withoutVisualEffect。(I1a154)
bug 修复
- 后续修复了 AnchoredDraggable的目标计算中的一个问题,即在特定滑动操作中,它可能会停留在错误的锚点。(I23b87、b/367660226)
外部贡献
- 向界面添加了 BringIntoViewResponderModifierNode,这提供了一种实现“将内容显示在视图中”功能的新方式,并允许在平台级别实现该功能 (Ia6dd8)
- 我们正在略微更改光标的绘制方式。您可以使用 LocalCursorBlinkEnabled在测试中停用光标绘制。(I4c697)
版本 1.8.0-alpha06
2024 年 11 月 13 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha06。版本 1.8.0-alpha06 中包含这些提交内容。
API 变更
- 添加了 stylusHoverIcon修饰符。(Iff20a、b/331289114)
- 弃用了 AnchoredDraggableState的confirmValueChange。不应否决状态更改,而是不应将不允许的锚点纳入有效锚点集,并应使用OverscrollEffect来指明所请求操作的不可用性。(Ia717f)
- 将自动填充管理器更改为接口。(I84914、b/376080755)
- 添加了 OverscrollEffect#withoutDrawing和OverscrollEffect#withoutEventHandlingAPI - 这些 API 会创建所提供的滚动效果的封装实例,该实例不会分别绘制 / 处理事件,从而允许在与分派事件的组件不同的组件中渲染滚动效果。例如,停用在延迟列表内绘制过度滚动,然后单独在顶部 / 其他位置绘制过度滚动。(Idbb3d、b/266550551、b/204650733、b/255554340、b/229537244)
- 在文本工具栏中添加了自动填充支持。(Ie6a4c)
- 弃用了 OverscrollConfiguration和LocalOverscrollConfiguration,并添加了rememberPlatformOverscrollFactory以创建默认过度滚动实现的实例 / 自定义其参数。如需停用过度滚动,请使用LocalOverscrollFactory provides null,而不是LocalOverscrollConfiguration provides null。如需更改发光颜色 / 内边距,请使用LocalOverscrollFactory provides rememberPlatformOverscrollFactory(myColor, myPadding),而不是LocalOverscrollConfiguration provides OverscrollConfiguration(myColor, myPadding)。(Ie71f9、b/255554340、b/234451516)
- 将 OverscrollEffect上的effectModifier属性更改为node: DelegatableNode,与其他 API 保持一致。(Ic0b46、b/255554340)
- 移除了实验性 GlobalAssertionsAPI。它的预期用途是运行无障碍检查,请改为使用enableAccessibilityChecks()。(I59322)
版本 1.8.0-alpha05
2024 年 10 月 30 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha05。版本 1.8.0-alpha05 中包含这些提交内容。
新功能
- 支持自动调整文字大小。将 AutoSize实例(例如AutoSize.StepBased)传递给您喜爱的文本可组合项(例如BasicText),然后您会看到文本大小会根据可用空间进行调整!(Ice7e0、b/139320827)
- 添加了 OverscrollFactory和LocalOverscrollFactoryAPI,以支持在层次结构中配置滚动回弹。默认情况下,系统会使用通过LocalOverscrollFactory提供的值来创建OverscrollEffect。如需根据当前提供的工厂创建并记住效果,请使用rememberOverscrollEffect()。(I51ca4、b/255554340)
API 变更
- 引入 CompositionLocal,可用于修改自动填充成功填充突出显示的色调。(I32092)
- 移除了 ScrollableDefaults.overscrollEffect- 您应改用rememberOverscrollEffect。这将创建LocalOverscrollFactory提供的当前过度滚动实现的一个实例。(I1651a、b/255554340)、(b/234451516)
- 引入了新的 AutofillManager接口,可用于微调用户的自动填充流程,以及一个isSemanticAutofillEnabled标志,用于启用此新版自动填充功能。(I9d484)
- 移除了 CombinedClickableNode。此实验性 API 曾暂时公开,以解决性能方面的问题,但现在已不再需要。您应直接使用Modifier.combinedClickable,就像使用其他修饰符 API 一样。(I4b658)
- 为 horizontalScroll、verticalScroll、LazyColumn、LazyRow、LazyHorizontalGrid、LazyVerticalGrid、LazyHorizontalStaggeredGrid、LazyVerticalStaggeredGrid、HorizontalPager和VerticalPager添加了重载,支持指定自定义OverscrollEffect。所提供的OverscrollEffect将接收事件,并在这些组件的边界内呈现。请注意,不支持绘制两次相同的OverscrollEffect- 因此,您无法使用Modifier.overscroll单独绘制提供给其中一个组件的相同OverscrollEffect。未来,我们将单独解决在这些组件的边界之外绘制过滚动的使用情形。(I2dc42、b/266550551、b/234274772、b/224572538、b/353805117)
版本 1.8.0-alpha04
2024 年 10 月 16 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha04。版本 1.8.0-alpha04 中包含这些提交内容。
API 变更
- 添加了 DelegatableNode#onDensityChange和DelegatableNode#onLayoutDirectionChange回调,以便在这些状态发生变化时更新节点状态。(I04f3e、b/340662451)
- 段落和 ParagraphIntrinsics现在会获取应用于AnnotatedString的所有注释的列表,之前它只包含SpanStyles的列表。(I12f80)
- 引入了 PointerInputModifierNode#touchBoundsExpansion,可用于扩大单个指针输入修饰符的触摸边界。(Iccf02、b/335339283)
bug 修复
- 修复了以下 bug:在某些情况下,传递给 AnchoredDraggableDefaults.flingBehavior的位置阈值未被正确考虑。(Ifdf0d、b/367660226)
- 针对在正在进行的快速滚动期间从节点树中移除的嵌套可滚动对象引入修复。现在,这些节点将取消 fling,并正确发送包含剩余速度的 onPostFling事件。我们还引入了标志NewNestedScrollFlingDispatchingEnabled,用于控制出现回归时的行为。此标志将在 Beta 版发布之前移除。(I05c37、b/371168883)
- 修复了传递给 Modifier.anchoredDraggable的OverscrollEffects会收到 2D 增量而非 1D 增量的 bug。(Ie52c0)
版本 1.8.0-alpha03
2024 年 10 月 2 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha03。版本 1.8.0-alpha03 中包含这些提交内容。
API 变更
- 将 Kotlin 版本更新为 1.9 (I1a14c)
- 引入了标志 DraggableAddDownEventFixEnabled(I848d5)
- 引入了新的语义角色“轮播界面”,用于在分页器中模拟列表行为,以供无障碍服务使用。(Id354b、b/354109776、b/239672673)
- 从 BasicText可组合项中移除了隐式graphicsLayer修饰符。添加了实验性ComposeFoundationFlags.RemoveBasicTextGraphicsLayerEnabled标志,以便能够恢复到旧行为。(Ie478d)
- 添加了 Modifier.recalculateWindowInsets(),以允许层次结构中的子项使用insetsPadding,即使父项在没有consumeWindowInsets()的情况下对齐了子项也是如此。(I7f9e4)
bug 修复
- 在 detectDragGestures、可拖动对象和可滚动对象中实现手势拾取。现在,如果子可拖动对象放弃手势,父对象有机会接管该手势。这样可以实现更连续、更集成的手势处理。(Ic88fe)
- 更新了可滚动对象中的投掷取消行为。现在,如果可滚动对象发生快速滚动并到达边界,它会正确地将快速滚动速度传递给链中的下一个可滚动对象,而不是继续驱动快速滚动。(I9326a)
版本 1.8.0-alpha02
2024 年 9 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha02。版本 1.8.0-alpha02 中包含这些提交内容。
API 变更
- 现在可以使用 TextOverflow.StartEllipsis和TextOverflow.MiddleEllipsis,以便在单行文本的开头或中间放置省略号(I38913、b/185418980)
版本 1.8.0-alpha01
2024 年 9 月 4 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha01。版本 1.8.0-alpha01 中包含这些提交内容。
版本 1.7
版本 1.7.8
2025 年 2 月 12 日
发布了 androidx.compose.foundation:foundation-*:1.7.8。版本 1.7.8 中包含这些提交内容。
bug 修复
- 修复了在替换粘贴文本的部分内容时,BasicTextField中因输入转换而发生的崩溃。(I73702)
版本 1.7.7
2025 年 1 月 29 日
发布了 androidx.compose.foundation:foundation-*:1.7.7。版本 1.7.7 中包含这些提交内容。
bug 修复
已知 bug
- 我们发现了一个 bug,该 bug 会导致在 Android API 级别 35 上,文本在极少数情况下意外换行。此问题无法在 1.7 中修复,因此将在 1.8 中修复。(b/391378120)
版本 1.7.6
2024 年 12 月 11 日
发布了 androidx.compose.foundation:foundation-*:1.7.6。版本 1.7.6 中包含这些提交内容。
bug 修复
- 修复了无障碍服务无法看到内嵌文本内容的问题。
- 修复了以下问题:在延迟列表中重复使用 AndroidEmbeddedExternalSurface时,该组件无法正确重置并卡住。
版本 1.7.5
2024 年 10 月 30 日
发布了 androidx.compose.foundation:foundation-*:1.7.5。版本 1.7.5 中包含这些提交内容。
bug 修复
- 确保固定项不会在内容内边距区域中被二次子合成。(Ic6224)
版本 1.7.4
2024 年 10 月 16 日
发布了 androidx.compose.foundation:foundation-*:1.7.4。版本 1.7.4 中包含这些提交内容。
bug 修复
- 修复了导致文本字段中出现罕见崩溃的 bug。(I475c6、b/313010266)
- 移除了 Lazy 布局项根目录中的 ReusableContentHost。这是“在已停用的节点上调用了衡量指标”崩溃的潜在根本原因。(Id6e60)
版本 1.7.3
2024 年 10 月 2 日
发布了 androidx.compose.foundation:foundation-*:1.7.3。版本 1.7.3 中包含这些提交内容。
bug 修复
- 修复了当 minLines 设置为非默认值时 BasicText出现的内存泄漏问题。
版本 1.7.2
2024 年 9 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.7.2。版本 1.7.2 中包含这些提交内容。
bug 修复
- 修复了可拖动对象缺少“向下”事件的问题,该问题导致快速滑动看起来比正常情况慢。
版本 1.7.1
2024 年 9 月 10 日
- Android 制品没有任何变化。移除了 -desktop制品,并添加了-jvmStubs和-linuxx64Stubs制品。这些目标均不打算使用,它们只是占位符,用于帮助 Jetbrains Compose 开展工作。
版本 1.7.0
2024 年 9 月 4 日
发布了 androidx.compose.foundation:foundation-*:1.7.0。版本 1.7.0 中包含这些提交内容。
自 1.6.0 以来的重要变更
- Modifier.clickable、- Modifier.focusable、- Modifier.indication、- Modifier.scrollable和- Modifier.draggable的性能得到了显著提升。为此,除了内部更改之外,还进行了以下 API 更改- 新增了指示 API IndicationNodeFactory。与之前的(现已弃用)rememberUpdatedInstanceAPI 相比,这可实现性能更高的指示实现。如需了解迁移信息,请访问 developer.android.com。
- clickable/- combinedClickable/- selectable/- toggleable现在接受可为 null 的- MutableInteractionSource参数。如果为 null,且提供的指示是- IndicationNodeFactory,则仅在需要时才延迟创建指示,从而提高性能。如果您不进行提升并使用- MutableInteractionSource,建议传递 null 而不是传递- remember { MutableInteractionSource() }。
- 已弃用 Indication#rememberUpdatedInstance。它会造成不可避免的严重性能损失,并妨碍其他优化。您应改用新的IndicationNodeFactoryAPI。
 
- 新增了指示 API 
- BasicTextField使用- TextFieldState现在已稳定,我们建议所有调用方开始从- BasicTextField(value, onValueChange)迁移到- BasicTextField(TextFieldState)。
- ClickableText已弃用。如需向文本添加可点击的链接,请在- AnnotatedString中使用- BasicText和新的- LinkAnnotation注释。- LinkAnnotation允许根据链接状态(例如聚焦、悬停)进行自定义样式设置。
- 推出 MaxLines和OverflowContextualFlowRow和Enhanced FlowRow/Column。我们很高兴地宣布,实验性FlowRow和FlowColumn得到了增强,现在支持maxLines和溢出,同时还推出了ContextualFlowRow和ContextualFlowColumn。此更新旨在提供最佳性能的组件,其中ContextualFlow*非常适合大量商品,这些商品使用较小的 maxLines 配置和动态 +N 查看更多按钮;而FlowRow和FlowColumn非常适合少量商品(少于 100 件)。重要提示:如需在FlowRow或FlowColumn中保持现有行为(即无论商品是否适合交叉轴最大值,都将所有商品组合在一起),请在初始化期间将 overflow 设置为FlowRowOverflow.Visible或FlowColumnOverflow.Visible。如需查看这些新功能的实际应用示例,请探索ContextualFlowRowSample和FlowRowSample。(Ib9135、b/293577082)
- 在 LazyColumn和LazyRow中添加了商品显示和消失动画支持。之前,您可以添加Modifier.animateItemPlacement()修饰符来支持放置(重新排序)动画。我们已弃用此修饰符,并引入了一个新的非实验性修饰符Modifier.animateItem(),可让您支持所有三种动画类型:显示(淡入)、消失(淡出)和重新排序。(I2d7f7、b/150812265)
- 使用官方 Android API (ScrollCaptureCallback) 在 Compose 滚动容器中实现了对长屏幕截图的实验性支持。
- NestedScroll来源的拖动和快速滑动正被- UserInput和- SideEffect取代,以适应这些来源的扩展定义,现在包括动画(副作用)以及鼠标滚轮和键盘 (- UserInput)。
- LazyLayout预取请求现在可以标记为紧急,这意味着我们预计下一帧需要此项,并希望忽略帧预算以确保提前完成更多工作 (Id513f)
- 在 Android U 之后的设备上支持触控笔手写功能。(I002e4)
- 多项 API 已提升到稳定版
- 分页器、贴靠、窗口边衬区
 
版本 1.7.0-rc01
2024 年 8 月 21 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-rc01。版本 1.7.0-rc01 中包含这些提交内容。
bug 修复
- 修复了以下回归问题:当任何元素在可聚焦(或可点击)且已停用的父级内获得焦点时,会发生崩溃。(b/317561689)
版本 1.7.0-beta07
2024 年 8 月 7 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-beta07。版本 1.7.0-beta07 中包含这些提交内容。
bug 修复
- 与文本输入相关的 SemanticsNodeInteraction函数performTextReplacement、performTextInput和performTextClearance现在在只读TextFields上调用时会抛出断言错误。(I4ae8f)
- 修复了超链接中的视觉故障。(I23311)
- 修复了 contentReceiver修饰符无法与某些输入法编辑器搭配使用的问题。
- 速度生成:防止 NaN 值在 Compose 界面和 Foundation 中传播。
版本 1.7.0-beta06
2024 年 7 月 24 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-beta06。版本 1.7.0-beta06 中包含这些提交内容。
版本 1.7.0-beta05
2024 年 7 月 10 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-beta05。版本 1.7.0-beta05 中包含这些提交内容。
bug 修复
- 修复了 SnapFlingBehavior和 Pager 中 NaN 值的处理问题。
版本 1.7.0-beta04
2024 年 6 月 26 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-beta04。版本 1.7.0-beta04 中包含这些提交内容。
bug 修复
- 避免在测量非常长的文本行(例如 1 万个字符)时发生崩溃 (8157ab)
- 修复了测量过大文本导致新 BasicTextField中出现崩溃的问题 (6b7575)
- 恢复了行/列测量中的一项行为变更,该变更会在某些情况下破坏文本使用 (69e8ba)
版本 1.7.0-beta03
2024 年 6 月 12 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-beta03。版本 1.7.0-beta03 中包含这些提交内容。
版本 1.7.0-beta02
2024 年 5 月 29 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-beta02。版本 1.7.0-beta02 中包含这些提交内容。
API 变更
- 添加了一个实验性 API,用于配置 LazyGrids的预提取行为,类似于现有的LazyLists实验性 API。这包括支持预提取嵌套LazyGrids中的项。与LazyListPrefetchStrategy类似,实现默认会预提取每个网格的前 2 个嵌套项,但可以通过新的LazyGridPrefetchStrategy(nestedPrefetchItemCount)和LazyListPrefetchStrategy#onNestedPrefetchAPI 进行配置。(I591c4)
- 将 SemanticsProperties.Editable重命名为IsEditable,并将SemanticsPropertyReceiver.editable更改为值isEditable。该属性现在是一个布尔值,始终由文本字段指定。(I8acd8)
- 将 basicMarquee默认值移到了MarqueeDefaults对象中。(I12ff6)
- 将 basicMarqueedelayMillis参数重命名为repeatDelayMillis。(I12ff6)
- 更新了用于设置链接样式的 API:将 TextLinkStyles移至TextStyle,并从 Material 中移除了TextDefaults(I5477b)
bug 修复
- 将 LayoutCoordinates.introducesFrameOfReference重命名为LayoutCoordinates.introducesMotionFrameOfReference,以更好地反映其用途。重命名了相关函数,以根据该标志计算坐标。(I3a330)
- 从 MarqueeDefaults属性中移除了“默认”值。(I1d8a0)
- 从 MarqueeDefaults媒体资源中移除了“Marquee”。(Iad4f4)
- 从 TextStyle类中移除了TextLinkStyles。相反,TextLinkStyles是LinkAnntation构造函数和AnnotatedString.fromHtml方法的一部分 (I90b2b)
- 修复了以下 bug:当 Pager 在边界处已稳定时,如果向边界快速滑动,则会发生贴靠。(I9f373、b/339171222)
- BTF2 现在具有正确的鼠标选择手势。(Ibe8c6)
外部贡献
- 重新提交了“使撰写/测量时间计算内容类型基于预取,以提高准确性”(Iea622)
- 在预提取中使撰写/衡量时间计算基于内容类型,以提高准确性 (Ibccb1)
- 使 WindowInsetsPadding修饰符可从通用源代码集中获取 (I070b2)
版本 1.7.0-beta01
2024 年 5 月 14 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-beta01。版本 1.7.0-beta01 中包含这些提交内容。
API 变更
- 重新添加了 KeyboardOptions.shouldShowKeyboardOnFocus属性,但将其标记为已弃用且隐藏,以实现二进制文件兼容性。(I15cfe)
- Modifier.anchoredDraggable现在在 RTL 布局中使用时,会默认反转具有水平方向的组件的拖动增量。(I3c6d9)
- AnnotatedString.hasEqualsAnnotations现为- hasEqualAnnotations。(I685c0)
- 更新了用于获取文本中 Material 主题链接的 API。具体而言,移除了 TextDefaults中用于构建主题化LinkAnnotations和解析包含主题化链接的 HTML 的方法。而是添加了一个TextLinkStyles类,该类允许将链接作为参数添加到 Text 可组合项中以设置样式。(I31b93)
- 将 onDragStarted和onDragStopped替换为非挂起回调。(I59de8)
bug 修复
- 修复了当 Pager 的 contentPadding大于传入的限制时会发生崩溃的 bug。Pager 现在会将从PageSize返回的负值强制转换为 0。(Iba5d8、b/314008560)
版本 1.7.0-alpha08
2024 年 5 月 1 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha08。版本 1.7.0-alpha08 包含这些提交内容。
新功能
API 变更
- LazyLayout预取请求现在可以标记为紧急,这意味着我们预计下一帧需要此项,并希望忽略帧预算以确保提前完成更多工作 (Id513f)
- isPositionedByParentWithDirectManipulation已重命名为- introducesFrameOfReference。请注意,它现在具有相反的效果,这意味着默认情况下,大多数- LayoutCoordinates都会引入参考帧,并且只有在直接操作下,该属性才会为 false。如需查询仅引入参考框架的位置,请使用- positionInLocalFrameOfReference(...)。或者,从- LookaheadScope中减去- positionInLocalLookaheadFrameOfReference。(Ifc5f7)
- 将 LinkInteractionListener中的onClicked重命名为onClick(Iaa35c)
- 根据 API 委员会的反馈,更改了 getScrollViewportLength的操作 lambda。(Ibc74a)
- 重命名了触控笔手写委托 API。(Ica45f、b/327271923)
- 已将 TextInclusionStrategy.isInside重命名为isIncluded。将Paragraph/MultiParagraph#getRangeForRect()返回类型设为不可为 null。(I51f26)
bug 修复
- 在 SelectionContainer中向所有文本上下文菜单添加了“全选”。(Ib750e、b/240143283)
- 修复了以下问题:对于具有 reverseScrolling=true的滚动容器,无法截取长屏幕截图。(I7c59c)
- 修复了以下问题:当接近状态的边界时,AnchoredDraggableState的currentValue会发生变化。(Iea30b、b/333846848)
外部贡献
- 已将 PrefetchExecutor重命名为PrefetchScheduler,以更好地反映其职责。(Ib9154)
- 添加了对预先抓取嵌套 LazyLists中项的支持(例如,渲染嵌套LazyRows的LazyColumn)。此更改预计会减少这些LazyLists在滚动期间的掉帧次数。实现默认值为预提取前 2 个嵌套项,不过可以通过新的LazyLayoutPrefetchStrategy(nestedPrefetchItemCount)和LazyListPrefetchStrategy#onNestedPrefetchAPI 控制此行为。(I51952)
版本 1.7.0-alpha07
2024 年 4 月 17 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha07。版本 1.7.0-alpha07 中包含这些提交内容。
新功能
- 添加了一个 TextDefaults对象,其中包含用于构建LinkAnnotation和解析 HTML 标记字符串的方法,这些方法会将MaterialTheme应用于链接。(I98532、b/139312671)
- 在 LazyVerticalGrid和LazyHorizontalGrid中添加了商品显示和消失动画支持。之前,您可以添加Modifier.animateItemPlacement()修饰符来支持放置(重新排序)动画。我们已弃用此修饰符,并引入了一个新的非实验性修饰符Modifier.animateItem(),可让您支持所有三种动画类型:显示(淡入)、消失(淡出)和重新排序。(Ib7d12、b/330510929)
- 在 LazyVerticalStaggeredGrid和LazyHorizontalStaggeredGrid中添加了商品显示和消失动画支持。之前,您可以添加Modifier.animateItemPlacement()修饰符来支持放置(重新排序)动画。我们已弃用此修饰符,并引入了一个新的非实验性修饰符Modifier.animateItem(),可让您支持所有三种动画类型:显示(淡入)、消失(淡出)和重新排序。(I69bc9、b/330511290)
API 变更
- 添加 ContextMenuColors和关联的LocalContextMenuThemeProvidableCompositionLocal。通过提供 CompositionLocal,可以修改文本字段和可选择文本的上下文菜单的颜色。(Ifa154)
- 除了正常样式、悬停样式和聚焦样式之外,文本链接还获得了按下状态样式选项。(I5f864、b/139312671)
- 引入了 ViewConfiguration.HandwritingGestureLineMargin以支持手写手势。支持BasicTextField的手写手势。(Ie6e13、b/325660505)
- 由于我们没有时间完成其余相关 API Surface 的稳定化,因此在 1.7 版中移除了 DelegatableNode.scrollIntoView。此函数将在 1.8 中重新引入(I6cf61、b/333421581、b/332900232)
- 查询布局坐标时,您现在可以使用 excludeDirectManipulationOffset实参来排除通过Placeable.PlacementScope.withDirectManipulationPlacement放置子项的父布局设置的偏移量。同样,经常更改子级位置的布局现在可以使用withDirectManipulationPlacement(例如默认实现的滚动)来放置子级。这有助于使基于approachLayout的动画更加直观,现在有机会区分要设置动画效果的偏移量,以及在决定设置动画效果时要直接应用的内容。(I60ec7)
- 为 LazyStaggeredGrid引入了requestScrollToItem。对于每次衡量传递,客户端现在可以通过调用requestScrollToItem选择不基于键来维护索引。除非调用requestScrollToItem,否则此方法不会以任何方式更改现有行为。(I63983)
- 在 Pager 中引入了 requestScrollToPage。对于每次衡量传递,客户端现在可以通过调用requestScrollToPage选择不基于键来维护索引。除非调用requestScrollToPage,否则此方法不会以任何方式更改现有行为。(Ic4213)
- 为 LazyGrids推出了requestScrollToItem。对于每次衡量传递,客户端现在可以通过调用requestScrollToItem选择不基于键来维护索引。除非调用requestScrollToItem,否则此方法不会以任何方式更改现有行为。(I0a7a0)
- ClickableText已标记为已弃用。如需向文本添加链接,请创建一个包含与链接对应的- LinkAnnotation的- AnnotatedString,并将此- AnnotatedString传递给- Text可组合项(I34d4b、b/323346994)
- UrlAnnotation已弃用,请改用- LinkAnnotation.Url。如果您使用的是 Material 主题,请使用- TextDefaults对象创建应用了 Material 主题的注释(I8d180、b/323346545)
- String.parseAsHtml已重命名为- AnnotatedString.Companion.fromHtml(I43dcd)
- 向 parseAsHtml方法添加了样式实参(linkStyle、focusedLinkStyle、hoveredLinkStyle)和链接互动监听器。使用<a>标记解析 HTML 标记的字符串时,该方法将为每个此类标记构建一个LinkAnnotation.Url,并将样式对象和链接互动监听器传递给每个注释。(I7c977)
- LinkAnnotation现在接受基于状态的样式参数和- LinkInteractionListener。向- AnnotatedString添加此注释即可获得超链接。通过传递- focusedState和/或- hoveredState,您可以定义链接在获得焦点和/或悬停时的视觉配置。(I81ce4、b/139312671)
- 已移除长屏幕截图的功能标志。(I28648、b/329128246)
- LazyColumn现在可以在长屏幕截图中正确呈现粘性标题。(I8d239、b/329296635)
- 稳定了新 BasicTextField引入的其余大部分实验性 API。(I714e2)
- 向 BasicSecureTextField添加了textObfuscationCharacter参数,用于控制在混淆内容时使用哪个字符。(I0588b)
- NestedScroll来源拖动和快速滑动正被- UserInput和- SideEffect取代,以适应这些来源的扩展定义,现在包括动画(副作用)以及鼠标滚轮和键盘 (- UserInput)。(I40579)
- 引入了 LocalBringIntoViewSpec,一种平台相关的焦点滚动行为,应用于 Scrollable 修饰符层。(I27aa5、b/317453911)
- 移除了 TextFieldCharSequence。TextFieldBuffer.originalValues已替换为TextFieldBuffer.originalText和TextFieldBuffer.originalSelection。(I2c7d6)
- ImeOptions.hintLocales不再可为 null。如果您想传递一个空的 Locale 列表,请使用- LocaleList.Empty。(Ic5bc4)
- getOffsetFractionForPage已重命名为- getOffsetDistanceInPages。(Ia05e2)
bug 修复
- 当 InputTransformations与next联接时,它们的KeyboardOptions现在会使用新的KeyboardOptions.merge方法按各个选项正确合并。(Ie5304、b/295951492)
- AnchoredDraggableState的- targetValue现在不再考虑位置阈值。现在,它具有 50% 的隐式阈值,这意味着- targetValue在两个锚点之间的中点发生变化。(I82c2c)
外部贡献
- 重命名了 2 个滚动 API (I56a75)
版本 1.7.0-alpha06
2024 年 4 月 3 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha06。版本 1.7.0-alpha06 中包含这些提交内容。
新功能
- 在 LazyColumn和LazyRow中添加了商品显示和消失动画支持。之前,您可以添加Modifier.animateItemPlacement()修饰符来支持放置(重新排序)动画。我们已弃用此修饰符,并引入了一个新的非实验性修饰符Modifier.animateItem(),可让您支持所有三种动画类型:显示(淡入)、消失(淡出)和重新排序。(I2d7f7、b/150812265)
- LazyColumn/LazyRow的客户端现在可以选择不维护基于密钥的索引,以用于即将到来的衡量传递,只需调用非挂起- LazyListState.requestToScroll即可。(I98036、b/209652366)
- 为样式化字符串添加了 parseAsHtml方法:该方法可将标记有 HTML 代码的字符串转换为AnnotatedString。请注意,并非所有标记都受支持,例如,您目前还无法显示项目符号列表。(I84d3d)
- 使用官方 Android API (ScrollCaptureCallback) 在 Compose 滚动容器中实现了对长屏幕截图的实验性支持。此功能为实验性功能,目前可能无法正确处理所有情况。因此,该功能目前默认处于停用状态。如需选择启用,请将ComposeFeatureFlag_LongScreenshotsEnabled标志设置为 true。此标志将在 1.7 版 Beta 版之前移除。(I2b055、b/329296471)
- 引入新的 GraphicsLayerAPI,以便在放置和渲染GraphicsLayer实例方面提供更大的灵活性,并支持固有的渲染功能,而无需与可组合项实现协调来指定GraphicsLayer修饰符实例。
API 变更
- 所有 KeyboardOptions参数现在默认都具有未指定的值。添加了KeyboardOptions.merge方法。
- 将 KeyboardOptions.autoCorrect重命名为autoCorrectEnabled,并使其可为 null,其中 null 表示未指定任何值。(Ia8ba0、b/295951492)
- outOfBoundsPageCount已重命名为- beyondViewportPageCount。(I129c6)
- fun ClipEntry.getMetadata()变为- val ClipEntry.clipMetadata。(I50155)
- 移除了 TextFieldState.valueAsFlow()。首选使用snapshotFlow { state.text }或snapshotFlow { TextFieldCharSequence(state.text, state.selection) }(I7d629)
- 重新组织了 InputTransformation.transformInput参数。移除了originalValue: TextFieldCharSequence。现在,TextFieldBuffer会携带此值,但名称相同。还移除了valueWithChanges: TextFieldBuffer参数。TextFieldBuffer现在是函数的接收器范围。(I919cc)
- BasicTextField(state)变体和- BasicSecureTextField现在使用- KeyboardActionHandler而不是- KeyboardActions来处理软件键盘执行的操作。(I58dda)
- 触控笔手写委托 API,用于支持在“伪”文本输入字段中使用触控笔手写。(I9c09c、b/327271923)
- KeyboardOptions.shouldShowKeyboardOnFocus已重命名为- showKeyboardOnFocus。(Ib4b7a、b/295951492)
- 从 Modifier.contentReceiver中移除了hintMediaTypes参数。我们之前已建议开发者检查收到的TransferableContent的媒体类型,因为该类型可能与配置的hintMediaTypes不兼容。(I82f99)
- 对 BasicSecureTextField的参数进行了重新排序。移除了keyboardType和imeAction参数,改用完整的KeyboardOptions类,同时保留适用于BasicSecureTextField的相同默认值。还移除了scrollState参数。(Ibbfa9)
- TextFieldState.text的类型从- TextFieldCharSequence更改为- CharSequence。因此,添加了- TextFieldState.selection: TextRange和- TextFieldState.composition: TextRange?,以便直接从状态对象读取当前选择和合成值。
- 移除了 TextFieldState.forEachTextValue。(Idb2a2)
- 移除了 ClipboardManager.getClipMetadata和ClipboardManager.hasClip函数。请使用clipEntry.getMetadata()读取当前剪辑条目的元数据。还要检查ClipboardManager.getClip的结果是否为 null,以了解剪贴板是否包含当前剪辑。(I50498)
- ClipboardManager.setClip现在接受 null,以便能够清除剪贴板。(I7d2e9)
- ReceiveContentListener已转换为函数接口。此外,还移除了接受 lambda 的- Modifier.receiveContent重载,因为- ReceiveContentListener现在是一个函数接口。
- 将 Modifier.receiveContent重命名为Modifier.contentReceiver。(I1e6af)
- TransferableContent.consumeEach已重命名为- TransferableContent.consume。(I1e462)
- rememberTextFieldState已升级为稳定版 API。(I37999)
bug 修复
- 修复了 BasicTextField(state)变体无法与 CJK(基于组合)键盘搭配使用的 bug。(I54425)
- 修复了以下 bug:在某些涉及 Modifier.Node重用的场景中,Modifier.dragAndDropTarget()可能会引用过时的数据。(I05bb1)
- 还原了最近的一项合同变更,即 AnchoredDraggableState#anchoredDrag调用会在anchoredDrag操作结束时快速完成。(I95715)
版本 1.7.0-alpha05
2024 年 3 月 20 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha05。版本 1.7.0-alpha05 中包含这些提交内容。
API 变更
- 移除了用于设置超链接样式的实验性 LocalTextLinkStyle组合本地。(Iebfa7)
- 移除了具有 onLinkClicked实参的BasicText的实验性替换。未来将推出用于支持超链接的替代 API。(I107d5)
- 移除了 TextFieldState和TextFieldBuffer下与代码点相关的方法和属性。还移除了剩余的选择和合成相关 API 中的inChars后缀。(Ief7ce)
- AnchoredDraggable的- currentValue现在会在经过锚点时更新。使用- settledValue可接收之前的- currentValue语义,仅在锚点稳定时更新。进度现在以函数(需要起点和终点)的形式公开,而不是以属性的形式公开。(Ibe6e8、b/318707189、b/298271489、b/294991954)
- BasicTextField(state)、- TextFieldState、- InputTransformation、- OutputTransformation、- TextFieldLineLimits、- TextFieldDecorator已毕业为稳定版。(I9582b)
- 引入了 InterceptPlatformTextInput,以帮助编写低级 IME 相关测试和其他低级 IME 使用情形。PlatformTextInputTestOverride已弃用。(I862ed、b/322680547)
- 将 restrictedConstraints()拆分为两种方法:fitPrioritizingWidth()和fitPrioritizingHeight()(I6d7fd)
外部贡献
- 添加了 2 个新的 API isLastScrollForward/isLastScrollBackward,用于检查最新滚动操作的滚动方向,如果尚无滚动操作,则返回 false。(I63a0e)
版本 1.7.0-alpha04
2024 年 3 月 6 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha04。版本 1.7.0-alpha04 中包含这些提交内容。
API 变更
- 在 Android U 之后的设备上支持触控笔手写功能。(I002e4)
- 向 KeyboardOptions添加了hintLocales,以使TextFields能够通过特定语言区域提示 IME 预设首选语言。(Id18c2)
- 移除了采用 value: String和onValueChange: () -> String参数的实验性BasicTextField2和BasicSecureTextField过载。(I568b4)
- 向 InputTransformation添加一个可选的applySemantics函数,以影响其所应用的BasicTextField2的语义。(I74a2f、b/170648072)
- 在此 CL 中,我们添加了 GetScrollViewportLength语义操作,以便将有关在 Compose 中滚动的组件的信息传递给无障碍功能系统。此 CL 还将上述属性的使用应用于基础可滚动列表。(Ic5fa2)
- 将 BasicTextField2重命名为BasicTextField。(Ie5713)
- FocusRequester.createRefs现已稳定(I4d92c、b/261436820)
- 引入了 DelegatableNode.scrollIntoView(),以允许修饰符节点直接发出scrollIntoView请求。(I2b3b7、b/299939840)
- 引入了 DelegatableNode.requireView(),以便修饰符节点在不读取本地组合的情况下获取当前的 AndroidView。(I40768)
- 在 Contextual Flow Row Scope 和 Contextual Flow Column Scope 中引入了上下文布局信息,包括行索引、位置以及对最大宽度和高度的限制,以保持在指定位置。超出最大宽度/高度的项目可能会根据溢出设置流动到下一行或被省略。(Id13f8、b/292114798)
bug 修复
- 修复了以下 bug:在某些条件下,切换 TextField的enabled或readOnly属性会导致崩溃。(Iae17b)
版本 1.7.0-alpha03
2024 年 2 月 21 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha03。版本 1.7.0-alpha03 中包含这些提交内容。
API 变更
- 引入了 DelegatableNode.requireLayoutCoordinates(),以便在无需替换onPlaced并自行将坐标存储在属性中的情况下获取Modifier.Node的当前LayoutCoordinates。(Ia8657)
- 引入了 DelegatableNode.currentLayoutCoordinates,以便在无需替换onPlaced并自行将坐标存储在属性中的情况下获取Modifier.Node的当前LayoutCoordinates。(Iaebaa)
- AnchoredDraggable使用的- DraggableAnchors中的性能优化。(I89cff)
- BasicTextField2和- androidx.compose.foundation.text2软件包下的相关 API 已移至- androidx.compose.foundation.text。(I9f635)
- BasicTextField2不再接受- CodepointTransformation参数。请使用- BasicSecureTextField或- OutputTransformation。(Id34ff)
- 添加了仅比较两个 AnnotatedStrings的注释的方法。(I32659)
- 隆重推出 ContextualFlowRow和增强型FlowRow/Column,其中包含MaxLines和Overflow。我们很高兴地宣布,实验性FlowRow和FlowColumn得到了增强,现在支持maxLines和溢出,同时还推出了ContextualFlowRow和ContextualFlowColumn。此更新旨在提供性能最佳的组件,其中ContextualFlow*非常适合大量商品,这些商品使用小型maxLines配置和动态“+N”查看更多按钮;而FlowRow和FlowColumn非常适合少量商品(少于 100 件)。重要提示:如需在FlowRow或FlowColumn中保持现有行为(即无论所有商品是否符合交叉轴最大值,都进行组合),请在初始化期间将overflow设置为FlowRowOverflow.Visible或FlowColumnOverflow.Visible。如需查看这些新功能的实际应用示例,请探索ContextualFlowRowSample和FlowRowSample。(Ib9135、b/293577082)
bug 修复
版本 1.7.0-alpha02
2024 年 2 月 7 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha02。版本 1.7.0-alpha02 中包含这些提交内容。
API 变更
- HorizontalPager、- VerticalPager和- PagerState已提升到稳定版。(I67660、b/316966909)
- 添加了 LocalTextLinkStyle组合本地,可用于更改应用中 Text 中链接的样式。如果您在应用中使用自己的主题,则应根据主题设置此组合本地。使用 Material 主题时,链接的颜色默认会设置为 Material 的主色。(I7eb10)
- 引入了 receiveContent修饰符,为开发者提供了一种在 Jetpack Compose 中接收富媒体内容的方式。
- receiveContent与- BasicTextField2集成,以接受软件键盘提供的富媒体内容,或通过剪贴板粘贴操作接受富媒体内容。(I81b72)
- 在此变更中,我们将分页器中的 SnapFlingBehavior替换为TargetedFlingBehavior,以解锁其他使用情形并提供更大的灵活性。(I762ea)
- 在此变更中,我们将 Snapping API 设为稳定版。我们还清理了一些测试代码,并向 Snapping 添加了更多示例。(Id8da9)
- 引入了 TargetedFlingBehavior,这是一个FlingBehavior,用于传播有关正在进行的动画的状态及其目标滚动偏移量的信息。(I6a207)
bug 修复
- 现在,当 BasicTextField2因滚动而移出视图或因输入而将要移出视图时,它会在输入时将光标保持在视图中。(Ieb856、b/237190748)
外部贡献
- 添加了用于配置 LazyList 预提取行为的实验性 API。(I022a4)
版本 1.7.0-alpha01
2024 年 1 月 24 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-alpha01。版本 1.7.0-alpha01 中包含这些提交内容。
新功能
- 添加了新的 Indication API、IndicationNodeFactory。与之前的(现已弃用)rememberUpdatedInstanceAPI 相比,这可实现性能更高的Indication实现。如需了解迁移信息,请访问 developer.android.com。
- clickable / combinedClickable / selectable / toggleable现在接受可为 null 的- MutableInteractionSource参数。如果为 null,且提供的- Indication为- IndicationNodeFactory,则仅在需要时才可延迟创建- Indication,从而提高性能。如果您不进行提升并使用- MutableInteractionSource,建议传递 null。
API 变更
- 在 AnchoredDraggable中引入了DecayAnimation,此更改向AnchoredDraggable添加了decayAnimationSpec参数,以便在稳定到某个锚点时使用衰减动画。此次更改还包括将现有的animationSpec重命名为snapAnimationSpec,以帮助了解每项规范的用例。
- BasicTextField2可供实验性使用。它在功能上应与- BasicTextField大致相当,并且行为应已准备好投入生产。不过,该 API 目前仍处于实验阶段。在稳定之前,它将重命名为- BasicTextField并移至同一软件包。
- 针对 BasicTextField2推出了OutputTransformationAPI 的初稿。此 API 取代了旧版BasicTextField中VisualTransformation的大部分用例。不过,该 API 尚未完全完成,某些功能可能无法正常运行,但我们非常希望您能针对该 API 在您的使用情形下的可用性提供反馈。(aosp/2708848)
- 引入了 LinkAnnotation,用于在文本中添加链接和可点击项。链接功能尚未完成,后续还会进行更多 API 更改。
- 引入了 receiveContent修饰符,为开发者提供了一种在 Jetpack Compose 中接收富媒体内容的方式。
- receiveContent与- BasicTextField2集成,以接受软件键盘提供的富媒体内容,或通过剪贴板粘贴操作接受富媒体内容。
- KeyboardOptions.shouldShowKeyboardOnFocus可让您停用- BasicTextField的默认行为,即在聚焦时请求显示软件键盘。
- TextInputService和- LocalTextInputService现已弃用。请改用- PlatformTextInputModifierNode直接与平台 IME API 集成。(aosp/2862698)
- 已弃用 Indication#rememberUpdatedInstance。它会造成不可避免的严重性能损失,并妨碍其他优化。您应改用新的IndicationNodeFactoryAPI。
bug 修复
- 现在,当传递 VisualTransformation时,BasicTextField将预先验证少量偏移量映射。这有助于捕获常见的编码错误,这些错误会导致后续的衡量或绘制传递中出现无法恢复的异常。通过在组合期间抛出异常,开发者更有可能在开发期间发现这些错误,从而避免生产环境中的崩溃。(I0fd42)
- 如果您为无效索引返回无效索引,VisualTransformation将不会抛出异常 (b/316401857 )
版本 1.6
版本 1.6.8
2024 年 6 月 12 日
发布了 androidx.compose.foundation:foundation-*:1.6.8。版本 1.6.8 中包含这些提交内容。
版本 1.6.7
2024 年 5 月 1 日
发布了 androidx.compose.foundation:foundation-*:1.6.7。版本 1.6.7 中包含这些提交内容。
版本 1.6.6
2024 年 4 月 17 日
发布了 androidx.compose.foundation:foundation-*:1.6.6。版本 1.6.6 中包含这些提交内容。
bug 修复
- 修复了以下 bug:在某些条件下,切换 TextField的enabled或readOnly属性会导致崩溃。(Iae17b)
版本 1.6.5
2024 年 4 月 3 日
发布了 androidx.compose.foundation:foundation-*:1.6.5。版本 1.6.5 中包含这些提交内容。
bug 修复
- 为 Row/Column 中难以重现的 bug 添加了调试日志:(b/300280216 和 b/297974033)
版本 1.6.4
2024 年 3 月 20 日
发布了 androidx.compose.foundation:foundation-*:1.6.4。版本 1.6.4 中包含这些提交内容。
bug 修复
- 在拖动的第一帧中,长按并拖动选择手势移出文本的布局边界时,不再会发生崩溃。(Icdf90、b/325307463)
版本 1.6.3
2024 年 3 月 6 日
发布了 androidx.compose.foundation:foundation-*:1.6.3。版本 1.6.3 中包含这些提交内容。
版本 1.6.2
2024 年 2 月 21 日
发布了 androidx.compose.foundation:foundation-*:1.6.2。版本 1.6.2 中包含这些提交内容。
bug 修复
- 修复了 AnimateContentSize未正确重置的问题。(I07051)
- 修复了以下问题:在某些情况下,文本的 intrinsicHeight会过度缓存。(3cd398、b/217910352)
版本 1.6.1
2024 年 2 月 7 日
发布了 androidx.compose.foundation:foundation-*:1.6.1。版本 1.6.1 中包含这些提交内容。
bug 修复
- 修复了滚动超出限制时交错网格的测量问题。(bffc39)
- 添加了对大尺寸布局的检查。(e74af5)
- 修复了在交错网格开头放置大小为 0 的项的问题。(785f94)
- 按与 onForgotten 相同的顺序调用 onRelease 回调。(31ce3b)
版本 1.6.0
2024 年 1 月 24 日
发布了 androidx.compose.foundation:foundation-*:1.6.0。版本 1.6.0 中包含这些提交内容。
自 1.5.0 以来的重要变更
- 新增了修饰符 Modifier.anchoredDraggable,可用于在预定义的一组锚点之间拖动和设置动画。此修饰符旨在取代Modifier.swipeable。如需了解如何使用该功能以及如何从Modifier.swipeable迁移,请参阅迁移指南。
- 添加了应用和组件之间的拖放功能。请参阅 DragAndDropTarget、Modifier.dragAndDropSource和其他 API 以开始使用
- Modifier.draggable2D是新的修饰符,可轻松实现二维拖动支持。请参阅示例。
- 添加了 AndroidExternalSurface和AndroidEmbeddedExternalSurface,以便更轻松地在 Compose 中添加由表面驱动的组件
- Pager和- snapFlingBehaviour中的各种 API 变更和改进
- 各种焦点、文本和边衬区 API 已升级为稳定版 API
版本 1.6.0-rc01
2024 年 1 月 10 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-rc01。版本 1.6.0-rc01 中包含以下提交内容。
API 变更
- 已移除 DragAndDropTarget()扩展构造函数。使用object: DragAndDropTarget {}创建新实例。(I32318)
版本 1.6.0-beta03
2023 年 12 月 13 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-beta03。版本 1.6.0-beta03 中包含这些提交内容。
bug 修复
- 修复了使用无限约束条件测量超大文本时发生的崩溃问题。(I1a7df、b/312294386)
- PlatformImeOptions现在是一个具体类,而不是接口。(If40a4)
版本 1.6.0-beta02
2023 年 11 月 29 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-beta02。版本 1.6.0-beta02 中包含这些提交内容。
bug 修复
- 修复了仅重新布局滚动后 canScroll未更新的问题。(I60a86)
- 修复了小幅滚动后 Modifier.animateItemPlacement()和LookaheadScope的问题。(I3a2b7)
版本 1.6.0-beta01
2023 年 11 月 15 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-beta01。版本 1.6.0-beta01 中包含这些提交内容。
API 变更
- DragAndDropTarget修饰符现在显式接收- DragAndDropTarget,并具有一个用于选择加入拖放会话的 lambda。现在,- DragAndDropModifierNode有两个工厂函数。一个用于接收转移,一个用于转移数据 (I69481)
- 已将 maximumFlingVelocity更新为以 Float 表示。更新了文档,以便更清楚地说明maximumFlingVelocityunity。(I8adc7)
- DragAndDropModifierNode工厂中的- onDragAndDropStart已重命名为- acceptDragAndDropTransfer。- 已将 - acceptsDragAndDropTransfer添加到- dragAndDropTarget- Modifier,以接受来自拖放会话的内容。如果对拖放会话感兴趣,此 lambda 会返回可行的- DragAndDropTarget。用于处理拖动事件的其他 lambda 已被此 lambda 取代。- 添加了 - DragAndDropTarget工厂函数,用于从拖放会话接收数据 (Iebf3a)
- 在 - AnchoredDraggable中公开- startDragImmediately可在使用时控制拖动检测手势。当 widget 正在动画显示到目标锚点时,设置此属性非常有用。请参阅示例。(Ie6d13、b/285139987)
- 基础提示 API 现在是 - @ExperimentalFoundationApi(I30b0b)
- 移除了 - DragAndDropInfo作为类型- DragAndDropModifierNode.drag现在接受- transferData、装饰大小和拖动装饰- DrawScopelambda 的参数- DragAndDropTarget具有用于特定拖放事件的方法,而不是单个抽象方法- DragAndDropModifierNode的工厂函数中的- onDragAndDropEvent已重命名为- onDragAndDropStart,以便更好地传达所提供的- DragAndDropTarget仅在给定的拖放会话中有效- 已移除 - DragAndDropEventType(I645b1)
- PlatformTextInputModifierNode.runTextInputSession已重命名为- establishTextInputSession。(I03cd0)
- 将 - OriginalText替换为- TextSubstitution。(Ifa5a8)
- PlatformTextInputModifierNode.textInputSession已重命名为- runTextInputSession。(Ie9c6b)
- 保留下来以便日后重复使用的 - SubcomposeLayout的子项(以及基于- SubcomposeLayout的布局,例如- LazyColumn)被视为已停用。引入了新的- assertIsDeactivated()测试 API 来测试此类节点。其余测试 API 将默认滤除已停用的节点。(I2ef84、b/187188981)
- Modifier.magnifier的- clippingEnabled参数已重命名为- clip。
- 将 - Modifier.magnifier的- magnifierCenter参数设为可为 null,同时保留相同的默认行为。(I6aa66)
- Material - SwipeToRevealAPI(适用于卡片和 Chip)现在依赖于基于 slot 的 API(如 Compose 所建议的那样),而不是基于数据类的实例来创建这些 slot。这是一项重大变更,请参阅演示和示例代码,了解如何使用新 API。(Ia8943)
bug 修复
- 为 PageSize.Fixed实现了等号和哈希代码。(Ie3ede、b/300134276)
- 修复了以下 bug:当 minWidth发生更改且minWidth小于初始测量约束maxWidth时,BasicText布局不会缩小 (Idb19c)
- 在 ArcLine中添加了对扫描渐变的渲染器支持。(I4d5bb)
- 修复了与窗口边衬区更改相关的二进制文件兼容性问题 (Iee695)
- 移除了 Material3 Chip/Button 的 Material 核心层,因为微基准测试表明,在没有该层的情况下,性能更好。(I55555)
版本 1.6.0-alpha08
2023 年 10 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha08。版本 1.6.0-alpha08 中包含这些提交内容。
新功能
- Modifier.draggable2D是新的修饰符,可轻松实现二维拖动支持。请参阅示例(Id95f5、b/214412658)
API 变更
- Modifier.dragAndDrawSource已将- onDrawDragShadowlambda 重命名为- drawDragDecoration,并且- DragAndDropInfo已将 size 参数重命名为- dragDecorationSize。(Id0e30、b/303904810)
- BasicTextField2的- decorationBox参数已重命名为- decorator。其类型也更改为等效的函数式接口- TextFieldDecorator。(I23c1c)
bug 修复
- 改进了有关 BasicTextField的文档,其中涉及onValueChange要求。(I90fc9、b/160257648)
版本 1.6.0-alpha07
2023 年 10 月 4 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha07。版本 1.6.0-alpha07 中包含这些提交内容。
API 变更
- 引入了 PlatformTextInputMethodTestOverride,用于为自定义文本编辑器编写测试。(Id159b)
- 将 GraphicsSurface重命名为AndroidExternalSurface(I11680)
- 添加了 DisableNonLinearFontScalingInCompose临时标志,用于停用非线性字体缩放。如果您需要时间来清理测试,请在测试中设置DisableNonLinearFontScalingInCompose = true。此标志将在 Compose 1.6.0-beta01 中移除。(Ic9486)
- 添加了可避免分配的 ColorList和ColorSet集合。(I744bd)
- 此更改移除了 shortSnapVelocityThreshold,该类已成为SnapLayoutInfoProvider实现的实现细节。(I65f6d)
- 添加了 dragAndDropSource修饰符,用于启动拖放会话;添加了dragAndDropTarget修饰符,用于接收来自拖放会话的内容(Ib7828、b/286038936)
- 更新了 SnapPositionInLayout文档和位置方法。在SnapPositionInLayout中向位置方法引入了内容边衬区。(Id7938、b/300116110)
- 向 TextFieldState添加了UndoState,该属性可用于撤消/重做用户所做的更改。(Icc024)
bug 修复
- 修复了速度变化后 basicMarquee不会动画的问题。(Id2e77、b/297974036)
版本 1.6.0-alpha06
2023 年 9 月 20 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha06。版本 1.6.0-alpha06 中包含这些提交内容。
新功能
- 为 SurfaceView、TextureView: GraphicsSurface()和EmbeddedGraphicsSurface()新增了可组合项封装容器。这是一个实验性 API,可能会发生变化和修改。(I9ddb2)
- Modifier.magnifier()现在是稳定版 API。这包括移除- MagnifierStyle,改为在修饰符本身中使用内嵌参数。(I83bec、b/298381260、b/262367109、b/261438887)
API 变更
- 在 ScrollScope中引入了updateCurrentPage和updateTargetPage,这些是允许通过PagerState.scroll自定义动画滚动效果所需的最后一部分。(I9cad5、b/267744105、b/243786897)
- 从 SnapFlingBehavior中移除了密度。SnapLayoutInfoProvider的所有实现都已有一种访问密度的方法,因此可以移除接收器范围,从而简化SnapFlingBehavior和SnapLayoutInfoProviders的实现。(I153c3)
- 更多修饰符标记为稳定。(I56af1、b/298046462)
- 从 SnapLayoutInfoProvider中移除了SnapStepSize。应使用布局信息并通过方法或贴靠偏移量来完成计算。(If320c)
行为变更
- Compose 现在使用非线性字体缩放,以提高可读性和无障碍功能。如果系统设置中的字体缩放比例大于 100%,小字号文本会正常增大,但原本就大的字号文本只会略微增大。此外,以 SP 为单位定义的行高会自动调整,以保持与 100% 缩放比例下的预期高度成比例。如需了解详情,请参阅字体缩放最佳实践。(I11518)
bug 修复
- 移除了对工具提示的 rememberSaveable使用。(Icc131、b/299500338)
版本 1.6.0-alpha05
2023 年 9 月 6 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha05。版本 1.6.0-alpha05 中包含这些提交内容。
API 变更
- 为 BasicSecureTextField添加了重载,该重载接受不可变值和用于更改该值的回调,就像当前的BasicTextFieldAPI 一样。(Ia4882)
- 添加 Modifier.preferKeepClear()以标记为可组合,表示在 API 33 及更高版本上优先避免使用浮动窗口。(Ib51d5、b/297260115)
- 在 ScrollView和RecyclerView等 View 组件中,fling 速度上限为ViewConfiguration.ScaledMaximumFlingVelocity。Compose 现在包含自己的maximumFlingVelocity版本,该版本现在适用于Draggable。(Ibf974)
- 移除了已弃用的 Pager和PagerState重载。(Iea07e)
- 向 compose.foundation添加了BasicTooltipBox,并更新了PlainTooltipBox和RichTooltipBox,以使用包含新PlainTooltip和RichTooltip可组合项的TooltipBox。(I79e1d)
版本 1.6.0-alpha04
2023 年 8 月 23 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha04。版本 1.6.0-alpha04 中包含这些提交内容。
API 变更
- 添加了 ReusableComposition接口,用于管理子组合的生命周期和重复使用。(I812d1、b/252846775)
- Modifier.focusGroup已升级为稳定版 API。(I7ffa3)
- 为 BasicTextField2添加了重载,该重载接受不可变值和用于更改该值的回调,就像当前的BasicTextFieldAPI 一样。(I3f2b8)
- GridItemSpan::currentLineSpan现在是稳定版 API。(Icc29c)
- 接受 contentDescription的 Canvas 现在是稳定版 API。(Ib3d29)
- 在 ScrollState中引入了viewportSize,用于在测量完成后了解使用ScrollState的组件的viewPort大小。(I8b85a、b/283102682)
- 修复了 Pager 中的预提取与视图中的行为不一致的问题。(I93352、b/289088847)
- Modifier.consumeWindowInsets(PaddingValues)现已稳定。- Deprecated Modifier.consumedWindowInsetsAPI 现已移除。已改用- Modifier.consumeWindowInsets。(Id72bb)
 
版本 1.6.0-alpha03
2023 年 8 月 9 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha03。版本 1.6.0-alpha03 中包含这些提交内容。
API 变更
- 添加了 LazyLayout的重载,它接受LazyLayoutItemProvider的 lambda,而不是像以前一样的普通对象。之前的重载已废弃。(I42a5a)
- 添加了对配置 privateImeOptions的支持 (Idb772)
bug 修复
- 修复了当 readOnly为 true 时文本字段显示键盘且可编辑的问题。还修复了以下问题:当焦点位于readOnly上时,如果将readOnly从 true 更改为 false,键盘不会显示。(I34a19、b/246909589)
版本 1.6.0-alpha02
2023 年 7 月 26 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha02。版本 1.6.0-alpha02 中包含这些提交内容。
API 变更
- 在 Pager中引入了PagerLayoutInfo,其中包含在通过衡量后收集的信息。还引入了PageInfo,即Pager中单个已衡量网页的相关信息。(Iad003、b/283098900)
- 添加了用于指定可组合项允许的输入的其他注释 (I51109)
- 添加了 SemanticsNodeInteraction.requestFocus,以便更方便地在测试中请求焦点,并更容易发现。(Ie8722)
- 完全重新设计了 PlatformTextInput*API。(I6c93a、b/274661182、b/267235947、b/277380808)
- SoftwareKeyboardController和- LocalSoftwareKeyboardController不再是实验性功能。- LocalSoftwareKeyboardController现在也是一个合适的- CompositionLocal。(I4c364)
- Modifier.transformable现在在- canPan参数中提供平移增量,以帮助确定平移方向,从而允许或禁止平移。(I692aa、b/266829800)
- 更新了修饰符 consumeWindowInsets,以扩展超类AbstractComposeView(Iacd74、b/269479941)
版本 1.6.0-alpha01
2023 年 6 月 21 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha01。版本 1.6.0-alpha01 中包含这些提交内容。
新功能
- 在 Foundation 中引入了新的 AnchoredDraggableAPI。它可用于构建可在离散状态之间拖动的组件,例如模态底部工作表。此 API 取代了 Material 的SwipeableAPI。(I4a2ed)
API 变更
- 支持 InputConnection#requestCursorUpdates(I0c69b)
- 引入了 scrollAnimationSpec以允许自定义动画规范。将BringIntoViewCalculator更新为BringIntoViewScroller。(Idb741)
- 添加 ResourceResolutionException类型,以封装尝试加载位图资源时抛出的可抛出对象,并提供加载失败的资源路径说明。(I19f44、b/230166331、b/278424788)
- 添加了语义属性和操作,以支持文本翻译。(I4a6bc)
- 引入了 BringIntoViewCalculatorAPI,可用于自定义Scrollable等组件对bringIntoView请求的响应方式。更改了可滚动的过载,以选择性地接受BringIntoViewCalculator的实例。(Iaf5af)
bug 修复
- 添加了 Lint 检查,用于在您在组合中创建 MutableInteractionSource但忘记记住它时发出警告,类似于创建可变状态 /Animatable的 Lint 检查。(I5daae)
- 添加了对使用鼠标进行选择的支持。基于触控的选择功能会按字词扩大选择范围,并按字符缩小选择范围。(Ic0c6c、b/180639271)
- 添加了 FocusTargetModifierNode接口,可用于创建自定义FocusTarget。(I9790e)
版本 1.5
版本 1.5.4
2023 年 10 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.5.4。版本 1.5.4 中包含这些提交内容。
版本 1.5.3
2023 年 10 月 4 日
发布了 androidx.compose.foundation:foundation-*:1.5.3。此版本未做任何更改。
版本 1.5.2
2023 年 9 月 27 日
发布了 androidx.compose.foundation:foundation-*:1.5.2。版本 1.5.2 中包含这些提交内容。
bug 修复
- 修复了文本中的一个 bug,该 bug 会在语义失效时导致在某些情况下发生崩溃。
版本 1.5.1
2023 年 9 月 6 日
发布了 androidx.compose.foundation:foundation-*:1.5.1。版本 1.5.1 中包含这些提交内容。
bug 修复
- 修复了当 readOnly为 true 时文本字段显示键盘且可编辑的问题。还修复了以下问题:当焦点位于readOnly上时,如果将readOnly从 true 更改为 false,键盘不会显示。(I34a19、b/246909589)
版本 1.5.0
2023 年 8 月 9 日
发布了 androidx.compose.foundation:foundation-*:1.5.0。版本 1.5.0 中包含这些提交内容。
自版本 1.4.0 以来的重要变更
- 许多基础修饰符(包括 Modifier.clickable、Modifier.draggable、Modifier.scrollable、布局修饰符等)已迁移到Modifier.NodeAPI,从而减少了初始组合的开销。
- 改进了分页器的稳定性。修复了许多 bug。
- pageCount参数现在位于- PagerState中,而不是 Pager 本身
版本 1.5.0-rc01
2023 年 7 月 26 日
发布了 androidx.compose.foundation:foundation-*:1.5.0-rc01。版本 1.5.0-rc01 中包含这些提交内容。
bug 修复
- 系统提供可选检查,以建议将 - mutableStateOf()调用迁移到其对应的原始类型专用类型。其 lint ID 为- AutoboxingStateCreation。之前,此检查默认针对所有项目启用。如需在 Android Studio 的编辑器和项目的 lint 输出中看到此警告,请通过在模块的- build.gradle或- build.gradle.kts配置中声明- warning "AutoboxingStateCreation",将此警告的严重程度从信息性更改为警告(或更高级别),如所示 (I34f7e):- android { lint { warning "AutoboxingStateCreation" } ... }
版本 1.5.0-beta03
2023 年 6 月 28 日
发布了 androidx.compose.foundation:foundation-*:1.5.0-beta03。版本 1.5.0-beta03 中包含这些提交内容。
版本 1.5.0-beta02
2023 年 6 月 7 日
发布了 androidx.compose.foundation:foundation-*:1.5.0-beta02。版本 1.5.0-beta02 中包含这些提交内容。
版本 1.5.0-beta01
2023 年 5 月 24 日
发布了 androidx.compose.foundation:foundation-*:1.5.0-beta01。版本 1.5.0-beta01 中包含这些提交内容。
API 变更
- 实现 PlatformDataProvider以提供心率和每日步数。从公共 API 中移除了SensorGateway接口。(I55b84)
bug 修复
- 减少了在延迟列表/网格等测量期间的分配 (Iaf9e2)
- 减少了应用快照时的内存分配 (I65c09)
- 移除了弹簧动画中的分配 (Ie9431)
- 从 TextLayout中移除了分配 (I0fd11)
- 移除了指针速度跟踪中的多次分配 (I26bae)
版本 1.5.0-alpha04
2023 年 5 月 10 日
发布了 androidx.compose.foundation:foundation:1.5.0-alpha04 和 androidx.compose.foundation:foundation-layout:1.5.0-alpha04。版本 1.5.0-alpha04 中包含这些提交内容。
API 变更
- 添加了经过优化的 TextStyle.merge(...),其中包含完整的参数列表。(Iad234、b/246961787)
- 引入了可与 LazyGridState搭配使用的SnapLayoutInfoProvider。(I92134、b/269237141、b/260914964)
- 为延迟交错网格项范围添加了实验性 Modifier.animateItemPlacement()。您可以将其应用于商品,以实现自动化位置更改/重新排序动画。(I4b62d、b/257034719)
- 将 GridCells.FixedSize升级为稳定版。FixedSize定义了一个LazyGrid,其中每个单元格在横轴上都具有确切的大小,剩余空间由横轴排列方式分配。(I8542f)
- 为 Pager 引入了接收器范围 PagerScope,并引入了一个用于计算给定页面偏移量的实用函数。(If2577)
- 在创建贴靠甩动行为时引入 snapPositionalThreshold。使用此参数可指定 Pager 中短吸附的位置阈值。(If8f7f)
- 已将 SnapLayoutInfoProvider.calculateSnappingOffsetBounds替换为calculateSnappingOffset。在此新方法中,我们只需请求下一个要贴靠的偏移量。边界的计算应在实现级别执行,因为这可能会因需要实现贴靠的方式而异。(I923a4)
- LazyStaggeredGridAPI 已升级为稳定版。(I633a5)
- 从 Horizontal/VerticalPager中移除了pageCount。应在创建状态时提供此值。更新了PagerState和rememberPagerState以接受pageCount。(Ieb52d、b/266965072)
- 从 Horizontal/VerticalPager中移除了pageCount。应在创建状态时提供此值。更新了PagerState和rememberPagerState以接受pageCount。(Ifa3cb、b/266965072)
- 在 Pager 的 SnapFlingBehavior中引入shortSnapVelocityThreshold。(I7379e、b/275579012)
- 添加了 FlowRowScope和FlowColumnScope。(I54fe2)
bug 修复
- 当限制条件包含 minWidth和minHeight时,获取文本语义的调用不再会崩溃。(Ibd072)
- 修复了以下回归问题:对于并非由 Dialog可组合项创建的对话框中的文本字段,键盘不会显示。(I82551、b/262140644)
版本 1.5.0-alpha03
2023 年 4 月 19 日
发布了 androidx.compose.foundation:foundation:1.5.0-alpha03 和 androidx.compose.foundation:foundation-layout:1.5.0-alpha03。版本 1.5.0-alpha03 中包含这些提交内容。
此版本为 Compose 启用了新的文本渲染堆栈。新堆栈已针对性能进行了优化,您应该不会看到任何明显的变化。
如果您确实发现渲染的文本发生了变化,可以设置 NewTextRendering1_5 = false 进行调试,以确认行为差异。设置此项将强制重新合成。请将任何行为差异作为 bug 提交。
调试标志将在 1.5 beta01 版本发布之前移除。(Iada23、b/246960758)
API 变更
- 将 FlowColumn/FlowRow设为内嵌。(Idab37)
版本 1.5.0-alpha02
2023 年 4 月 5 日
发布了 androidx.compose.foundation:foundation:1.5.0-alpha02 和 androidx.compose.foundation:foundation-layout:1.5.0-alpha02。版本 1.5.0-alpha02 中包含这些提交内容。
API 变更
- 在 LazyGrid中添加了对固定大小单元格的支持,并使用交叉轴排列来排列这些单元格。(I83ed9、b/235121277、b/267942510)
- 在 LazyStaggeredGrid中添加了对固定大小的轨道以及使用交叉轴排列来排列这些轨道的支持。(I7d519)
- 现在,可以通过 TalkBack等无障碍服务打开AnnotatedString中的UrlAnnotation。(If4d82、b/253292081)
- 为文本字段添加了 InsertTextAtCursor语义操作。(I11ed5)
- 与文本相关的测试操作(例如 performTextInput)现在将直接使用语义操作请求焦点,而不是点击字段。(I6ed05)
- 添加了对使用 FlowRow中的verticalArrangement和FlowColumn中的horizontalArrangement实现交叉轴间距/排列的支持。我们还移除了FlowRow/FlowColumn中的顶级verticalAlignment和horizontalAlignment。开发者可以改用Modifier.align。这样可以减少verticalAlignment和verticalArrangement的命名惯例之间的混淆。(I87b60、b/268365538)
版本 1.5.0-alpha01
2023 年 3 月 22 日
发布了 androidx.compose.foundation:foundation:1.5.0-alpha01 和 androidx.compose.foundation:foundation-layout:1.5.0-alpha01。版本 1.5.0-alpha01 中包含这些提交内容。
API 变更
- 重构了文字和 BasicText,以使用新的修饰符系统。在许多情况下,这会带来显著的性能提升。不应有任何可见的变化。(If1d17、b/246961435)
- 添加了 PerformImeAction语义操作,用于在文本编辑器节点上调用 IME 操作。(Ic606f、b/269633506)
bug 修复
- 更新了 Modifier.hoverable的内部结构。只有在启用hoverable修饰符后,检查器中才会显示该修饰符。(I82103)
版本 1.4
版本 1.4.3
2023 年 5 月 3 日
发布了 androidx.compose.foundation:foundation:1.4.3 和 androidx.compose.foundation:foundation-layout:1.4.3,这两个版本没有任何变化(仅版本号提升)。
版本 1.4.2
2023 年 4 月 19 日
发布了 androidx.compose.foundation:foundation:1.4.2 和 androidx.compose.foundation:foundation-layout:1.4.2。版本 1.4.2 中包含这些提交内容。
版本 1.4.1
2023 年 4 月 5 日
发布了 androidx.compose.foundation:foundation:1.4.1 和 androidx.compose.foundation:foundation-layout:1.4.1。版本 1.4.1 中包含这些提交内容。
版本 1.4.0
2023 年 3 月 22 日
发布了 androidx.compose.foundation:foundation:1.4.0 和 androidx.compose.foundation:foundation-layout:1.4.0。版本 1.4.0 中包含这些提交内容。
自 1.3.0 以来的重要变更
- 向 Text和TextField以及较低级别的段落添加了表情符号 compat 集成功能。配置 emojicompat 时,默认处于启用状态。
- 您可以使用 PlatformParagraphStyle为特定文本配置EmojiCompat。
- 向 LazyStaggeredGrid添加了整行 span 支持(I28252)
- 向 ClickableText添加实验性onHover(I6938f)
- 为接受 CoroutineContext参数的runComposeUiTest函数和create*ComposeRule函数引入了新的实验性过载。上下文将用于测试组合以及其中的LaunchedEffect和rememberCoroutineScope()调用。(I10614、b/265177763)
- FlowRow和- FlowColumn现在以- @ExperimentalFoundationApi的形式提供,支持一种更灵活的基于行和列的组件布局,可在主轴没有足够的空间时另起一行。(I3a7b2)
- Modifier.basicMarquee()作为实验性功能提供,用于借助滚动式跑马灯效果显示内容。(I2df44、b/139321650)
版本 1.4.0-rc01
2023 年 3 月 8 日
发布了 androidx.compose.foundation:foundation:1.4.0-rc01 和 androidx.compose.foundation:foundation-layout:1.4.0-rc01。版本 1.4.0-rc01 中包含这些提交内容。
API 变更
- 引入了新的低级别 PlatformTextInputAdapterAPI,用于构建直接与平台 API 通信的自定义文本输入实现。(I58df4)
- 向 LazyStaggeredGrid添加了对反向布局的支持。(I3ef4a)
bug 修复
- BasicTextField的- SetText语义操作现在将使用与 IME 更新和测试函数(例如- performTextReplacement)相同的代码路径来更新文本缓冲区。
- 文本测试函数 performTextClearance、performTextReplacement和performTextSelection现在使用SemanticsActions。(I0807d、b/269633168、b/269624358)
版本 1.4.0-beta02
2023 年 2 月 22 日
发布了 androidx.compose.foundation:foundation:1.4.0-beta02 和 androidx.compose.foundation:foundation-layout:1.4.0-beta02。版本 1.4.0-beta02 中包含这些提交内容。
API 变更
- 添加了新的 Modifier.Node.onReset()回调,可让您重置一些本地状态,以便在重复使用Layout时正确处理相应情况(例如,作为LazyColumn的项)。修复了FocusTargetModifierNode以正确重置聚焦状态。(I65495、b/265201972)
- 向 DrawScope.drawText、Paragraph.paint和MultiParagraph.paint方法添加了BlendMode参数,以支持在画布上绘制文本时的不同混合算法。(I57508)
- 移除了 modifierElementOf()API。请改为直接从ModifierNodeElement扩展。(Ie6d21)
bug 修复
- 调整选择手柄无法再选择部分字符。(Idedd1)
- 修复了在空 TextField上按住 Ctrl + 退格键时出现的崩溃问题(I0427f、b/244185537)
版本 1.4.0-beta01
2023 年 2 月 8 日
发布了 androidx.compose.foundation:foundation:1.4.0-beta01 和 androidx.compose.foundation:foundation-layout:1.4.0-beta01。版本 1.4.0-beta01 中包含这些提交内容。
新功能
- 自 1.3 开始,向 Text和TextField以及较低级别的段落添加了表情符号 compat 集成功能。配置 emojicompat 时,默认处于启用状态。
- 您可以使用 PlatformParagraphStyle为特定文本配置EmojiCompat。
API 变更
- 添加了在所有 LazyLayouts中使用的PinnableContainerAPI 的常见实现,用于保留退出组合但仍需要保持活跃状态的项。(If45a4)
- PinnableContainer.PinnedHandle.unpin()已重命名为- release()(I4667a)
外部贡献
- 向 LazyListLayoutInfo、LazyGridLayoutInfo和LazyStaggeredGridItemInfo添加了mainAxisItemSpacing属性 (I52fad)
版本 1.4.0-alpha05
2023 年 1 月 25 日
发布了 androidx.compose.foundation:foundation:1.4.0-alpha05 和 androidx.compose.foundation:foundation-layout:1.4.0-alpha05。版本 1.4.0-alpha05 中包含这些提交内容。
新功能
- 向 LazyStaggeredGrid添加了整行 span 支持 (I28252)
- 向 ClickableText添加实验性onHover(I6938f)
- 为接受 CoroutineContext参数的runComposeUiTest函数和create*ComposeRule函数引入了新的实验性过载。上下文将用于测试组合以及其中的LaunchedEffect和rememberCoroutineScope()调用。(I10614、b/265177763)
API 变更
- 将 OverscrollEffect的前/后 API 合并到组合的“装饰器”applyToScroll和applyToFling函数。请参阅文档中经过更新的示例,了解如何以新 API 的形式实现滚动回弹效果。(I8a9c4、b/255554340)
- 内联/已废弃的隐藏函数的更多类型/可为 null 性 (I24f91)
- TextStyle中的- LineBreak和- HyphensAPI 已升级为稳定版。(Ic1e1d)
bug 修复
- 现在,即使动画已停用,文本字段中的光标仍会继续闪烁。(I95e70、b/265177763)
- 现在,即使在系统设置中停用了动画,Modifier.basicMarquee也会以动画形式显示。(I23389、b/262298306、b/265177763)
外部贡献
- TextInputSession和- TextInputService中的- notifyFocusedRect方法不会再次废弃。(I23a04、b/262648050)
版本 1.4.0-alpha04
2023 年 1 月 11 日
发布了 androidx.compose.foundation:foundation:1.4.0-alpha04 和 androidx.compose.foundation:foundation-layout:1.4.0-alpha04。版本 1.4.0-alpha04 中包含这些提交内容。
新功能
- FlowRow和- FlowColumn现在以- @ExperimentalFoundationApi的形式提供,支持一种更灵活的基于行和列的组件布局,可在主轴没有足够的空间时另起一行。(I3a7b2)
- Modifier.basicMarquee()作为实验性功能提供,用于借助滚动式跑马灯效果显示内容。(I2df44、b/139321650)
API 变更
- 废弃了 FocusRequesterModifier,取而代之的是FocusRequesterNode(I7f4d7、b/247708726、b/255352203、b/253043481、b/247716483、b/254529934、b/251840112、b/251859987、b/257141589)
- 包含 variationSettings的AndroidFont构造函数现在是稳定版 API,可用于创建新型字体描述符。(I5adcc、b/261565807)
- 引入了 PinnableContainerAPI,由延迟列表通过本地组合进行传播,以便固定当前项。这意味着,此类项会在滚过用户的视图时被处置。例如,Modifier.focusable()会通过此机制固定当前聚焦的项。(Ib8881、b/259274257、b/195049010)
- 重新设计了可滚动项响应 bringIntoViewRequesters和可聚焦对象的方式,以便更好地模拟这些操作的复杂程度以及处理更多极端情况。(I2e5fe、b/241591211、b/192043120、b/237190748、b/230756508、b/239451114)
- 更多已废弃的隐藏函数的返回值类型可为 null (Ibf7b0)
- 向 TextStyle添加了实验性TextMotion,以将 Text 定义为Static(default)或 Animated。如果要通过动画缩放、平移或旋转文本,请使用TextMotion.Animated。(I24dd7)
- 添加了 TextFieldFocusModifier,以修复 Android 平台的焦点导航行为 (I00303)
- 将 drawText中的maxSize: IntSize参数替换为size: Size,以便内嵌于其他DrawScope函数。size默认设为Size.Unspecified,这应该不会更改之前的默认行为。(Icd27d)
bug 修复
- 调整了 SnapFlingBehaviour的贴靠物理特性,以使效果更自然。
已知问题
- 从 androidx.compose.foundation:1.4.0-alpha03更新为androidx.compose.foundation:1.4.0-alpha04时,您可能会遇到java.lang.NoSuchFieldError错误。您可以在此处查看最初报告的问题。修复程序已提交,将在下一个 Compose 更新中发布。若要解决此问题,请将您的androidx.compose.material和androidx.compose.material3库更新到最新版本 (1.1.0-alpha04) 或将您的androidx.compose.foundation降级到 1.4.0-alpha03。
版本 1.4.0-alpha03
2022 年 12 月 7 日
发布了 androidx.compose.foundation:foundation:1.4.0-alpha03 和 androidx.compose.foundation:foundation-layout:1.4.0-alpha03。版本 1.4.0-alpha03 中包含这些提交内容。
API 变更
- 在使用 Compose 规则的界面测试中,在所有帧回调运行完毕后,系统才会分派在 withFrameNanos回调期间恢复的连续作业。这与在正常运行时 Compose 的行为一致。不过,依赖旧行为的测试可能会失败。这应该只会影响直接调用withFrameNanos或withFrameMillis的代码,并会将回调之外的逻辑传递给可能需要在回调内部移动的那些函数。请参阅此 CL 中的示例了解动画测试变更。
- 向 TestMonotonicFrameClock构造函数和工厂函数添加了可选的onPerformTraversals: (Long) -> Unit参数,以便在执行withFrameNanos回调之后、恢复调用方的协程之前运行代码。(Idb413、b/254115946、b/222093277、b/255802670)
- 引入了页面无障碍操作:PageUp、PageDown、PageLeft、PageRight。请注意,只有 API 29 及更高级别才支持这些操作。(Ida4ab)
- 引入了 HorizontalPager和VerticalPager,以分页器方式显示可组合项。引入了PagerState来控制分页器以及查询有关该分页器当前状态的信息。引入了PageSize方式来控制分页器页面大小,它可用于创建与 Pager 类似的轮播界面。引入了PagerSnapDistance方式来控制贴靠事件如何在分页器的快速滑动行为中起作用。(I01120)
- 在 SnapFlingBehavior.performFling中引入了过载,以帮助了解快速滑动的位置。(I569f6)
- 移除了 OverscrollEffect#isEnabled。无需记住并设置此标志,只要您不希望滚动回弹时显示事件(例如,如果ScrollableState#canScrollForward/backward均返回 false),就不必将事件分派到滚动回弹效果。(I1a4b0、b/255554340、b/255557085)
- 添加了 ScrollableState#canScrollForward和ScrollableState#canScrollBackward,用于查询ScrollableState能否向任一方向滚动(无论其是否处于范围内的最小值/最大值处)。为了向后兼容现有的ScrollableState实现,此值默认为 true。使用方可借此向用户显示仍有足够的空间进行滚动,这也可用于避免将增量分派给在给定方向上没有空间进行滚动的ScrollableStates,从而减少不必要的工作。(Idf1a0、b/255557085)
- 添加了 Modifier API,用于查询祖先实体滚动信息。(I2ba9d、b/203141462)
- 在手势可以变为滚动事件时,用于在 Clickable中正确延迟按下互动。
- 修复了在 Scrollable ViewGroup内使用时Clickables无法正确延迟涟漪效果的问题。
- 更新了抽屉式导航栏和表格,以便在手势可变为滚动事件时正确延迟按下操作。
- 更新了 snapStepSize的命名方式,以便与SnapLayoutInfoProvider中的其他方法保持一致。(Ife67c)
- 向 Compose添加了EmojiCompat(Ibf6f9、b/139326806)
- 将 consumedWindowInsets()重命名为consumeWindowInsets(),将withConsumedWindowInsets()重命名为onConsumedWindowInsetsChanged(),并将 Modifiers 公开。(Ie44e1)
bug 修复
- 修复了 Modifier.animateItemPlacement()和延迟网格发生崩溃的问题。在某些情况下,新条目数小于先前条目数时就会发生这种情况。(I0bcac、b/253195989)
版本 1.4.0-alpha02
2022 年 11 月 9 日
发布了 androidx.compose.foundation:foundation:1.4.0-alpha02 和 androidx.compose.foundation:foundation-layout:1.4.0-alpha02。版本 1.4.0-alpha02 中包含这些提交内容。
API 变更
- awaitFirstDown和- waitForUpOrCancellation现在可接受- PointerEventPass,增加了灵活性。(I7579a、b/212091796)
- 从 Lazy* API 还原了 beyondBoundCountAPI (I12197)
- 在 Lazy API 中引入了用于组合和放置视口外项目的参数(I69e89、b/172029355)
- 向 BasicText和BasicTextField添加了minLines参数。它允许根据行数设置这些可组合项的最小高度(I24294、b/122476634)
版本 1.4.0-alpha01
2022 年 10 月 24 日
发布了 androidx.compose.foundation:foundation:1.4.0-alpha01 和 androidx.compose.foundation:foundation-layout:1.4.0-alpha01。版本 1.4.0-alpha01 中包含这些提交内容。
API 变更
- 为手势检测器添加了新方法 awaitEachGesture()。其运行方式与forEachGesture()类似,但手势循环完全在AwaitPointerEventScope内运行,因此在迭代之间不会丢失事件。
- 废弃了 forEachGesture()(因为它无法避免在手势的间隔期间丢失事件),取而代之的是awaitEachGesture()。(Iffc3f、b/251260206)
- 添加了 WindowInsets.imeAnimationSource 和WindowInsets.imeAnimationTarget,以确定动画进度并了解在动画播放完毕后 IME 将位于何处。(I356f1、b/217770337)
版本 1.3
版本 1.3.1
2022 年 11 月 9 日
发布了 androidx.compose.foundation:foundation:1.3.1 和 androidx.compose.foundation:foundation-layout:1.3.1。版本 1.3.1 中包含这些提交内容。
bug 修复
- 修复了 BeyondBoundsLayout中的性能问题 (aosp/2255266)
- 除非附加了布局坐标,否则 ContentInViewModifier不会读取布局坐标 (aosp/2241316)
版本 1.3.0
2022 年 10 月 24 日
发布了 androidx.compose.foundation:foundation:1.3.0 和 androidx.compose.foundation:foundation-layout:1.3.0。版本 1.3.0 中包含这些提交内容。
自 1.2.0 以来的重要变更
- 引入了 LazyVerticalStaggeredGrid和LazyHorizontalStaggeredGrid的实验性版本。
- 以实验性版本形式添加了 SnapFlingBehavior、rememberSnapFlingBehavior和其他对应的 API。
- 现在,如果使用键盘或遥控器上的方向键点击,Modifier.clickable、Modifier.toggleable和Modifier.selectable会显示涟漪效果。
版本 1.3.0-rc01
2022 年 10 月 5 日
发布了 androidx.compose.foundation:foundation:1.3.0-rc01 和 androidx.compose.foundation:foundation-layout:1.3.0-rc01。版本 1.3.0-rc01 中包含这些提交内容。
API 变更
- 针对没有足够的快速滑动速度可减慢的情况,引入了方法步骤使用的 lowVelocityAnimationSpec。(Iaeb27)
- 新增了实验性 API 连字符,以支持在文本中自动断字 (Iaa869)
版本 1.3.0-beta03
2022 年 9 月 21 日
发布了 androidx.compose.foundation:foundation:1.3.0-beta03 和 androidx.compose.foundation:foundation-layout:1.3.0-beta03。版本 1.3.0-beta03 中包含这些提交内容。
API 变更
- 添加了用于自定义文本换行的选项。(I86907)
- BringIntoViewResponder现在能够在处理请求时获取最新的请求边界。(If86a5、b/241591211)
- 开始支持项目与实验性 Staggered Grid之间的间距 (I10b82)
- 在实验性 Staggered Grid中引入内容内边距 (I342ea)
- 将 TextMeasurer.measure方法中的size:IntSize参数更改为constraints: Constraints,以符合最小宽度限制。(I37530、b/242707525)
- 添加了 Modifier.withConsumedWindowInsets(),用于获取已使用的WindowInsets,以便在windowInsetsPadding之外使用它。
- 添加了 MutableWindowInsets,以便在不进行重组的情况下轻松更改WindowInsets。(I7fd28、b/237019262、b/243119659)
版本 1.3.0-beta02
2022 年 9 月 7 日
发布了 androidx.compose.foundation:foundation:1.3.0-beta02 和 androidx.compose.foundation:foundation-layout:1.3.0-beta02。版本 1.3.0-beta02 中包含这些提交内容。
API 变更
- 实验性 StaggeredGrid的初始版本 (Ia48be)
- FocusDirection.In和- FocusDirection.Out已分别重命名为- FocusDirection.Enter和- FocusDirection.Exit(Ia4262、b/183746982)
- 引入了 rememberSnapFlingBehavior过载,提供了一种在LazyLists中启用贴靠的快速方式。(Ifb48a)
- 将 snapFlingBehavior工厂替换为了具体的SnapFlingBehavior类。将SnapLayoutInfoProvider方法的作用域限定为“密度”,使 API 用户可以更轻松地实现 Dp<->Px 转换。(I54a11)
- 更新 LazyLayoutMeasureScope.measure以返回可放置项列表,并突出显示返回值所需的不可变性。(I48b7c)
- 引入了 SnapLayoutInfoProvider,它接受LazyListState以创建SnapLayoutInfoProvider的实例,该实例可用于为LazyLists启用贴靠FlingBehavior。(I2dd10)
bug 修复
- 重构了 AwaitPointerEventScope#awaitLongPressOrCancellation以匹配其他 await 函数 (I646e6)
版本 1.3.0-beta01
2022 年 8 月 24 日
发布了 androidx.compose.foundation:foundation:1.3.0-beta01 和 androidx.compose.foundation:foundation-layout:1.3.0-beta01。版本 1.3.0-beta01 中包含这些提交内容。
API 变更
- 从 OverscrollEffect中移除了pointerPosition- 那些需要关注指针位置的效果可以改为使用effectModifier中的Modifier.pointerInput { }来获取当前指针位置。(I9f606、b/241239306)
- 将 AwaitPointerEventScope#awaitLongPressOrCancellation公开为额外的构建块,用于检测更复杂的手势(I04374、b/181577176)
- 引入了 lazyListSnapLayoutInfoProvider,用于在延迟列表中启用贴靠功能。(I3ecdf)
- 引入了 SnapFlingBehavior,一种支持列表贴靠的快速滑动行为。提供包含贴靠布局相关信息的SnapLayoutInfoProvider实例。(Ie754c)
版本 1.3.0-alpha03
2022 年 8 月 10 日
发布了 androidx.compose.foundation:foundation:1.3.0-alpha03 和 androidx.compose.foundation:foundation-layout:1.3.0-alpha03。版本 1.3.0-alpha03 中包含这些提交内容。
API 变更
- 资源字体现在支持设置字体变体设置(API 26 及以上级别)。(I900dd、b/143703328)
- DeviceFontFamilyNameFont中支持可变字体(Ic1279、b/143703328)
- 从 PlatformTextStyle和LineHeightStyle中移除了实验性注解。(I64bef)
- 现在,当 VisualTransformation提供的OffsetMapping返回无效索引时,文本字段将抛出更详细的异常。(Ie73f9、b/229378536)
- 引入了实验性 API,以便在延迟布局之间共享项提供程序逻辑。(Ic891c)
- ScrollableDefaults.reverseDirection()不再处于实验阶段。(Iba646)
- 废弃了 SemanticsModifier.id并将语义 ID 移到了LayoutInfo.semanticsId。(Iac808、b/203559524)
- checkScrollableContainerConstraints()不再处于实验阶段。(I2c290)
- Modifier.clipScrollableContainer()不再处于实验阶段。(Ia2b44)
- 废弃了 TextInputService.show|hideSoftwareKeyboard。请改为在应用代码中使用SoftwareKeyboardController,并在 IME 管理代码中使用TextInputSession。(I14e4c、b/183448615)
版本 1.3.0-alpha02
2022 年 7 月 27 日
发布了 androidx.compose.foundation:foundation:1.3.0-alpha02 和 androidx.compose.foundation:foundation-layout:1.3.0-alpha02。版本 1.3.0-alpha02 中包含这些提交内容。
API 变更
- 在 DrawScope中添加了drawText扩展函数,以便在DrawScope上运行的可组合项和修饰符(如Canvas和drawBehind)中绘制多样式文本。(I16a62、b/190787898)
bug 修复
- 现在,如果文本字段在聚焦时停用的话,系统会隐藏软键盘。(I6e3e4、b/237308379)
- 在向 Velocity Tracker 添加 InputEventChange事件时,我们现在将考虑增量而不使用位置,这将确保在所有情况下都能正确计算速度,即使目标元素移动也是如此(Icea9d、b/216582726、b/223440806、b/227709803)
- 如果可滚动项具有聚焦的子项,则在其被缩小甚至是使用动画调整大小时,现在都可以正确滚动以始终显示聚焦的子项。(I80867、b/230756508、b/220119990)
- 修复了在进行选择操作时清除并重新填充 TextField导致的崩溃问题。(I1235b、b/208655565、b/214253689)
版本 1.3.0-alpha01
2022 年 6 月 29 日
发布了 androidx.compose.foundation:foundation:1.3.0-alpha01 和 androidx.compose.foundation:foundation-layout:1.3.0-alpha01。版本 1.3.0-alpha01 中包含这些提交内容。
API 变更
- 引入了 UrlAnnotation注解类型及相关方法,以支持AnnotatedString中的TalkBack链接。(I1c754、b/231495122)
bug 修复
- BasicTextField- cursorBrush现在可以具有动画效果,而无需重启光标计时器。(I812e6、b/236383522)
版本 1.2
版本 1.2.1
2022 年 8 月 10 日
发布了 androidx.compose.foundation:foundation:1.2.1 和 androidx.compose.foundation:foundation-layout:1.2.1。版本 1.2.1 中包含这些提交内容。
版本 1.2.0
2022 年 7 月 27 日
发布了 androidx.compose.foundation:foundation:1.2.0 和 androidx.compose.foundation:foundation-layout:1.2.0。版本 1.2.0 中包含这些提交内容。
自 1.1.0 以来的重要变更
- LazyVerticalGrid和- LazyHorizontalGrid现已稳定。
- 您现在可以为延迟列表和网格中的项目指定内容类型。这样一来,组件就能更高效地重复使用元素。
- 延迟列表和网格现在包含 userScrollEnabled参数,可用于通过用户手势停用滚动功能。
- 新增了一个名为 LazyLayout的实验性 API。这是我们在内部为延迟列表和网格提供支持的 API。
- OverscrollEffectAPI 已推出实验性版本。您可以定义自定义滚动回弹效果,也可以向自定义可滚动容器中添加标准平台滚动效果。
- 推出了嵌套滚动互操作性 API,以允许视图和 Compose 滚动操作者之间的互操作性。
- 已向所有滚动容器添加鼠标和触控板的滚动功能。
版本 1.2.0-rc03
2022 年 6 月 29 日
发布了 androidx.compose.foundation:foundation:1.2.0-rc03 和 androidx.compose.foundation:foundation-layout:1.2.0-rc03。版本 1.2.0-rc03 中包含这些提交内容。
- 自 1.2.0-rc02 以来没有任何变化。
版本 1.2.0-rc02
2022 年 6 月 22 日
发布了 androidx.compose.foundation:foundation:1.2.0-rc02 和 androidx.compose.foundation:foundation-layout:1.2.0-rc02。版本 1.2.0-rc02 中包含这些提交内容。
版本 1.2.0-rc01
2022 年 6 月 15 日
发布了 androidx.compose.foundation:foundation:1.2.0-rc01 和 androidx.compose.foundation:foundation-layout:1.2.0-rc01。版本 1.2.0-rc01 中包含这些提交内容。
API 变更
- 引入了实验性 OverscrollEffect,以允许实现自定义滚动回弹效果,以及接受它的Modifier.scrollable过载。
- 实验性 LocalOverScrollConfiguration已从foundation.gesture移至 foundation 软件包,并重命名为LocalOverscrollConfiguration(If19fb、b/204650733)
- Compose 库中的接口现在使用 jdk8 默认接口方法构建 (I5bcf1)
- 引入了实验性 API checkScrollableContainerConstraints(),用于检查我们是否没有嵌套可滚动容器。您可以在通过LazyLayout创建自己的可滚动延迟布局时使用它。(Id6fab、b/233352497)
- 从 androidx.compose.foundation.lazy软件包中移除了已废弃的LazyVerticalGrid。新的稳定版 API 位于androidx.compose.foundation.lazy.grid中(I73c76、b/225192009)
版本 1.2.0-beta03
2022 年 6 月 1 日
发布了 androidx.compose.foundation:foundation:1.2.0-beta03 和 androidx.compose.foundation:foundation-layout:1.2.0-beta03。版本 1.2.0-beta03 中包含这些提交内容。
API 变更
- 添加了新的实验性 IntervalList和MutableIntervalList。它允许通过多个间隔表示某些值列表。当您需要定义自己的 DSL,并使其类似于LazyColumn所用的 DSL(可以通过多个项/项调用定义列表项)时,这非常有用。(I2d05e、b/228580728)
bug 修复
- 阐明了 WindowInsets.ime的文档,指出ime边衬区的报告最早可追溯到 API 23,但仅在 API 30+ 上添加了动画效果。(Ia7fc0、b/230756508)
- 当光标位于文本字段末尾时,按前向删除键将不再崩溃。
- DeleteSurroundingTextCommand和- DeleteSurroundingTextInCodePointsCommand现在要求其构造函数参数为非负数。(Ica8e6、b/199919707)
版本 1.2.0-beta02
2022 年 5 月 18 日
发布了 androidx.compose.foundation:foundation:1.2.0-beta02 和 androidx.compose.foundation:foundation-layout:1.2.0-beta02。版本 1.2.0-beta02 中包含这些提交内容。
- 以前,不会更改 Text 或 TextField的布局大小的可下载字体分辨率无法重新绘制,从而导致字体显示过时。此 bug 修复可确保文本布局始终会触发重新绘制 (b/229727404)。(I1d49e、b/229727404)
版本 1.2.0-beta01
2022 年 5 月 11 日
发布了 androidx.compose.foundation:foundation:1.2.0-beta01 和 androidx.compose.foundation:foundation-layout:1.2.0-beta01。版本 1.2.0-beta01 中包含这些提交内容。
新功能
- 这是 1.2 的第一个 Beta 版!
API 变更
- 添加了实验性 BeyondBoundsInterval,可供LazyList的自定义实现在为超出可见边界的项布局时使用(Ifabfb、b/184670295)
- LineHeightBehavior已重命名为- LineHeightStyle
- LineVerticalAlignment已重命名为- LineHeightStyle.Alignment
- LineHeightTrim已重命名为- LineHeightStyle.Trim
- 移除了 LineHeightStyle中的默认构造函数值(I582bf、b/181155707)
- 为 LazyLayoutItemProvider接口的可选成员添加了默认值。(Iba8a0)
- 在 LazyLayoutItemProviderAPI 中,工厂函数不再按照索引返回可组合 lambda,现在我们有了接受索引的更简单可组合函数项。(Id2196)
- LazyLayoutItemsProvider 已重命名为 LazyLayoutItemProvider (I0638c)
- LazyLayoutItemsProvider.itemsCount已重命名为- itemCount(Id409c)
- 向 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)
- 添加了实验性 - imeNestedScroll()修饰符,以便开发者可以通过滚动控制 IME。(I60759)
bug 修复
- 修复了以下回归问题:从可组合项中移除获得焦点的文本字段后,这些文本字段不会隐藏键盘。(I7a410、b/230536793、b/225541817)
- 在高度有限且无法容纳所有文本行时支持省略号(Ie528c、b/168720622)
- 现在,BringIntoViewRequester.bringIntoView将始终处于暂停状态,直到请求完成或被较新的非重叠请求中断为止。重叠的请求将排入队列。(I43e7f、b/216790855)
- 现在,针对完全重叠矩形的并发 BringIntoViewRequester.bringIntoView调用将仅遵循较大矩形的请求。(I34be7、b/216790855、b/184760918)
- includeFontPadding默认处于开启状态。您可以使用- TextStyle.platformTextStyle属性关闭- includeFontPadding。不久之后,我们将更改默认行为,但在此之前,这样使我们能够更好地集成行高改进 (aosp/2058653) 并解决- TextField的裁剪问题。(I01423、b/171394808)
- Modifier.bringIntoViewRequester不再使用- onGloballyPositioned。(I630f5)
外部贡献
- 现在,如果我们垂直滚动,在 Android 上 MouseInjectionScope.scroll(delta = someDelta)与之前相反(如果 someDelta 是正值,它将向下滚动)(Ifb697、b/224992993)
版本 1.2.0-alpha08
2022 年 4 月 20 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha08 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha08。版本 1.2.0-alpha08 中包含这些提交内容。
API 变更
- 使用 FontFamily.SansSerif时,会显示 Android 中所有可用的系统字体粗细选项。在 API 21-28 上,会在内部使用后备字体名称,例如 sans-serif-medium。这是一项行为变更,因为之前 API 21-28 仅支持粗细选项 400 和 700。(I380fe、b/156048036、b/226441992)
- Paragraph 和 MultiParagraph 现在接受 Constraints 参数。目前传递 Constraints.maxHeight是空操作,但以后允许进行一些计算,例如根据高度进行省略。(I6afee、b/168720622)
- SubcomposeSlotReusePolicy.getSlotsToRetain()现在接受类似 MutableSet 的自定义类,该类不允许在其中添加新项。(Icd314)
- PointerInputChange中已废弃部分使用操作(down OR 位置)。您可以借助- consume()完全使用此更改。您可以使用- isConsumed来确定其他人之前是否使用过此更改。
- PointerInputChange::copy()现在始终会创建浅层副本。这意味着,在使用完其中一个副本后,将会使用- PointerInputChange的副本。如需创建未绑定的- PointerInputChange,请改用构造函数。(Ie6be4、b/225669674)
- 引入了新的实验性 LazyLayoutAPI。这样,您就可以构建自己的组件,如LazyVerticalGrid的LazyColumn。请注意,该 API 尚处于早期阶段,在未来的版本中可能会发生变化。(Iba2bc、b/166591700)
- AndroidFont现在将- typefaceLoader作为构造函数参数。(I2c971)
- WindowInsetscompanion 现在会公开可见性(即它们是否在屏幕上,无论是否与窗口相交)以及可以采用的尺寸(如果它们在设备上可用,但当前未处于活动状态)。(I65182、b/217770337)
版本 1.2.0-alpha07
2022 年 4 月 6 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha07 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha07。版本 1.2.0-alpha07 中包含这些提交内容。
API 变更
- 添加了 PinnableParentAPI,让延迟布局的子项能够防止当前组合项被处置(Ibbdd0、b/184670295)
- LazyListLayoutInfo和- LazyGridLayoutInfo现在具有- beforeContentPadding和- afterContentPadding字段(I3b628、b/200920410)
- 添加了 KeyboardType.Decimal作为Keyboard.Number的替代方案,以便在 IME 中明确包含十进制分隔符。(Iec4c8、b/209835363)
- 新增了字体描述符 Font(DeviceFontFamilyName),可以选择在字体回退链执行期间查找系统安装的字体。(I30468、b/219754572)
- PointerEventType.Scroll和- PointerEvent.scrollDelta现在是稳定版 API(I574c5、b/225669674)
- 在 TextStyle/ParagraphStyle. includeFontPadding中添加了includeFontPadding的临时兼容性配置(可通过TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))更改)。这是一个用来实现迁移的临时配置选项,即将被移除。(If47be、b/171394808)
- 更新了 FontFamily.Resolver,以集成系统级粗体文字无障碍设置 (I6c1e7)
- ComposeView的- consumeWindowInsets扩展属性让开发者能够停用 Android WindowInsets。这样一来,层次结构中的各个- ComposeViews可分别应用- WindowInsets,而不会彼此干扰。(I0ef08、b/220943142)
版本 1.2.0-alpha06
2022 年 3 月 23 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha06 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha06。版本 1.2.0-alpha06 中包含这些提交内容。
API 变更
- 添加了 RequestFocus语义操作,用于请求将焦点置于可聚焦的目标。(I17b71)
- FocusOrder现已合并到- FocusProperties,- focusProperties()现已拥有- focusOrder()的所有功能。- FocusOrder和- focusOrder()已废弃。接受- focusRequester的- focusOrder()应与- focusProperties()一起替换为- focusRequester()修饰符。这样一来,修饰符可以更好地分离关注点。(I601b7)
- 添加了 WindowInsets.asPaddingValues(Density),让开发者无需在组合中就能完成转换。(I94c35)
- 更新了矢量可绘制对象解析,以支持自动镜像,从而在当前布局方向为 RTL 时翻转 VectorPainter的内容。(I79cd9、b/185760237)
bug 修复
- 如果滚动区域的大小被重新调整且聚焦的可组合项之前是可见的,那么现在滚动修饰符(Modifier.verticalScroll()、Modifier.horizontalScroll()和Modifier.scrollable())将滚动以使得聚焦的可组合项可见。
- 现在,当处于非延迟的可滚动项中且软输入模式为 ADJUST_RESIZE时,如果 TextField 获得焦点并且键盘处于显示状态,那么 TextField 会一直位于键盘上方。(I4a485、b/190539358、b/192043120、b/216842427)
版本 1.2.0-alpha05
2022 年 3 月 9 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha05 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha05。版本 1.2.0-alpha05 中包含这些提交内容。
API 变更
- LazyVerticalGrid和- LazyHorizontalGrid现已稳定。(I307c0)
- LazyGridItemInfo.Unknown已替换为单独的- LazyGridItemInfo.UnknownRow和- LazyGridItemInfo.UnknownColumn(I56d51)
- LazyVerticalGrid/- LazyHorizontalGrid和所有相关 API 已移至- .grid子软件包。请将您的导入从- androidx.compose.foundation.lazy更新为- androidx.compose.foundation.lazy.grid。(I2d446、b/219942574)
- 文本:includeFontPadding现在默认处于关闭状态。因includeFontPadding=false导致的字体裁剪问题已得到解决,应该不会发生高大型文字被裁剪的情况。(I31c84、b/171394808)
- 测量后的接口现在公开了 parentData 属性 (I3313f)
- 引入了实验性的 Modifier.onFocusedBoundsChanged,以便观察可聚焦子元素的边界。(I14283、b/220030968、b/190539358、b/192043120、b/216842427)
- 添加了 LazyHorizontalGrid。(I61ae7、b/191238807)
- 新增了 LazyVerticalGridAPI,用于定义交叉轴的大小 (I17723)
- 添加了 FocusGroup 修饰符(I64bc0、b/213508274、b/184670295)
bug 修复
- WindowInsets.toString()现在将显示正确的值。(I1585d)
外部贡献
- 已更新为使用 Kotlinx 协程 1.6.0 (I3366d)
版本 1.2.0-alpha04
2022 年 2 月 23 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha04 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha04。版本 1.2.0-alpha04 中包含这些提交内容。
API 变更
- BringIntoViewResponders不再需要将请求手动向上传递给父级响应方,而是必须立即返回它们希望父级呈现到视图中的矩形。(I8e66a)
- 支持在文本中加载异步字体(I77057、b/214587005)
- LazyVerticalGrid现在支持在含有当前行容纳不下的 span 的项之前出现- line breaking。(I05c40、b/207462103)
- excludeFromSystemGestures已重命名为- systemGesturesExclusion(I19526)
- LazyVerticalGrid现在支持 reverseLayout。(I6d7d7、b/215572963、b/211753558)
- 添加了 WindowInsets.only()方法,让开发者可以仅包含 WindowInsets 中的尺寸。(I14c94、b/217768486)
- 添加了 - ComposableTarget、- ComposableTargetMarker和- ComposableOpenTarget,以便系统在编译时报告何时以预期使用范围外的 Applier 为目标而调用了某个可组合函数。- 在大多数情况下,注解可以由 Compose 编译器插件推断出来,因此直接使用这些注解的情况应该很少。无法推断的情况包括创建和使用自定义 applier、抽象可组合函数(例如接口方法)、可组合 lambda 性质的字段或全局变量(推断出局部变量和参数),或者使用 - ComposeNode或相关可组合函数的情况。- 对于自定义 Applier,调用 - ComposeNode或- ReusableComposeNode的可组合函数需要为该函数和任何可组合 lambda 的参数类型添加- CompoableTarget注解。不过,建议您创建一个带有- ComposableTargetMarker的注解,然后使用带标记的注解,而不是直接使用- ComposableTarget。标有- ComposableTargetMarker的可组合注解等同于用属性类的完全限定名称作为 applier 参数的- ComposbleTarget。如需查看- ComposableTargetMarker使用示例,请参阅- anroidx.compose.ui.UiComposable。(I38f11)
bug 修复
- 现在,允许将负的滚动偏移值传递给 LazyGridState.scrollToItem()和LazyGridState.animateScrollToItem()。(I025c6、b/211753558)
- 针对 TextField 支持异步字体加载。(Icc4bf、b/214587005)
版本 1.2.0-alpha03
2022 年 2 月 9 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha03 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha03。版本 1.2.0-alpha03 中包含这些提交内容。
API 变更
- TextInputSession和- TextInputService中的- notifyFocusedRect方法现已废弃,系统将不会调用该方法。请改用- BringIntoViewRequester。(Ia4302、b/192043120、b/216842427、b/178211874)
- 使用 Modifier.animateItemPlacement() 为延迟加载网格的内容项启用了动画。(Ib6621、b/211753218)
- BringIntoViewRequester现在会将请求传播到托管 Android View。(Ia7a51)
- 现在可通过 LocalFontFamilyResolver.current使用FontFamilyResolver- 添加了 createFontFamilyResolver(context)和createFontFamilyResolver(context, coroutineScope),以便在 Compose 使用情况之外创建新的 FontFamily 解析器。
- Paragraph 和 MultiParagraph 现在接受 FontFamily.Resolver
- TextLayoutResult.layoutInput.fontFamilyResolver现在包含用于此布局的解析器,废弃了- TextLayoutResult.layoutInput.resourceLoader,因为系统已不再使用它。(Id5a45、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)
 
- 废弃了 
- 现在,您可以为 LazyVerticalGrid的内容项指定内容类型 -LazyGridScope上的内容项函数现在接受此类参数。提供此类信息有助于内容项组合重用逻辑来提升效率,并且仅会在类型相似的内容项之间重用内容。(I7b355、b/215372836)
- LazyListLayoutInfo和- LazyGridLayoutInfo现在具有以下新属性:- viewportSize、- orientation、- reverseLayout(Ifc8ed、b/200920410)
- 现在,您可以为 LazyColumn/LazyRow 的内容项指定内容类型 - LazyListScope 上的内容项函数现在接受此类参数。提供此类信息有助于内容项组合重用逻辑来提升效率,并且仅会在类型相似的内容项之间重用内容。(I26506)
- 接受 maxSlotsToRetainForReuse的SubcomposeLayoutState构造函数现已废弃。取而代之的是一个接受SubcomposeSlotReusePolicy的新构造函数;这是一个新的接口,可用于更精细地控制应保留哪些槽以便将来重复使用。(I52c4d)
- 为 WindowInsets 添加了修饰符,以实现内边距和尺寸调整。这样一来,有些内容便可以延伸到边衬区,而主要内容仍位于边衬区之外。例如,windowInsetsPadding 可用于设置内容区域的内边距,以避免一些区域可能遭到完全或部分覆盖。(Id0395、b/213942085)
bug 修复
- 现在,当软输入模式为 ADJUST_PAN时,如果 TextField 获得焦点并且键盘处于显示状态,TextField 会一直位于键盘上方。(I8eaeb、b/190539358、b/192043120)
- 桌面设备会为 FontFamily.Resolver使用本地组合- 废弃了桌面设备 FontLoader
- 在桌面设备上新增了 createFontFamilyResolver工厂(I6bbbb、b/174162090)
 
- 废弃了桌面设备 
- 在文本字段之间切换焦点时,软键盘输入类型不再闪烁。(I1bf50、b/187746439)
- 光标手柄处于显示状态时,文本字段不再需要额外按返回。(Ideb4b、b/205726883)
- 优化了文本选择放大镜的行为,使其与平台放大镜的行为相一致。(Idd918、b/206833278)
版本 1.2.0-alpha02
2022 年 1 月 26 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha02 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha02。版本 1.2.0-alpha02 中包含这些提交内容。
API 变更
- 针对无复杂逻辑的现有方法,向其重载的方法添加了 NonRestartableComposable。对于在所调用内部函数中重复的所有参数,这会减少编译器产生的记忆检查 (equals)。(I90490)
- 添加了 excludeFromSystemGesture修饰符,以便轻松访问 Android 的setSystemGestureExclusionRects(I46f07)
bug 修复
- 优化了文本选择放大镜的行为,使其与平台放大镜的行为相一致。(Idd918、b/206833278)
- LazyColumn、- LazyRow、- Modifier.verticalScroll及其他使用- Modifier.scrollable的容器现在支持鼠标滚轮滚动。(I2b5e1、b/198214718)
版本 1.2.0-alpha01
2022 年 1 月 12 日
发布了 androidx.compose.foundation:foundation:1.2.0-alpha01 和 androidx.compose.foundation:foundation-layout:1.2.0-alpha01。版本 1.2.0-alpha01 中包含这些提交内容。
API 变更
- 在 LazyColumn、LazyRow和LazyVerticalGrid中添加了新参数userScrollEnabled,使用户能够通过轻触手势或无障碍操作暂时或永久停用用户发起的滚动。仍然可以针对状态使用方法来程序化地进行滚动。(I7eae9、b/201150093)
- 在放大镜修饰符中添加了 onSizeChanged回调。(I6879f)
- 现在,在 SelectionContainer中拖动选择手柄时就会显示放大镜 widget。(I30b38、b/139320979)
bug 修复
- 修复了滚动出视图时 TextField光标手柄不隐藏的问题。(I14552、b/208883748)
依赖项更新
- 现在依赖于 Kotlin 1.6.10。
版本 1.1
版本 1.1.1
2022 年 2 月 23 日
发布了 androidx.compose.foundation:foundation:1.1.1 和 androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.1.0 和 androidx.compose.foundation:foundation-layout:1.1.0。版本 1.1.0 中包含这些提交内容。
自 1.0.0 以来的重要变更
- 对 Android 12 滚动效果提供稳定支持
- 改进了触摸目标大小调整
- 请注意,对于 Compose 1.0,Material 组件将扩展其布局空间,以符合 Material 无障碍功能指南对触摸目标尺寸的要求。例如,按钮触摸目标将扩展为至少 48x48dp 的尺寸,即使您将按钮尺寸设为更小也是如此。这会使 Compose Material 与 Material Design 组件的行为保持一致,以便在混合使用 View 和 Compose 时提供一致的行为。此变更还可确保在您使用 Compose Material 组件创建界面时,能够满足触摸目标无障碍功能的最低要求。
- 对导航栏提供稳定支持
- 将之前的一些实验性 API 升级到了稳定版
- 支持更高版本的 Kotlin
版本 1.1.0-rc03
2022 年 1 月 26 日
发布了 androidx.compose.foundation:foundation:1.1.0-rc03 和 androidx.compose.foundation:foundation-layout:1.1.0-rc03。版本 1.1.0-rc03 中包含这些提交内容。
bug 修复
- 已更新为支持 Compose Material 1.1.0-rc03
版本 1.1.0-rc01
2021 年 12 月 15 日
发布了 androidx.compose.foundation:foundation:1.1.0-rc01 和 androidx.compose.foundation:foundation-layout:1.1.0-rc01。版本 1.1.0-rc01 中包含这些提交内容。
bug 修复
- 现在,允许将负的滚动偏移值传递给 LazyListState.scrollToItem()和LazyListState.animateScrollToItem()。(Iceb90、b/184252837)
- 修复了导致无障碍滚动操作缺失的 bug (I7cbfb)
版本 1.1.0-beta04
2021 年 12 月 1 日
发布了 androidx.compose.foundation:foundation:1.1.0-beta04 和 androidx.compose.foundation:foundation-layout:1.1.0-beta04。版本 1.1.0-beta04 中包含这些提交内容。
新功能
- 完成更新,现与 Kotlin 1.6.0兼容
API 变更
- 清除了 androidx.core.view中的可为 null 性(I7078a、b/204917439)
- 添加了实验性 API,支持将 PointerInputchange 作为一个整体使用,或检查是否已使用 PointerInputchange。(I2e59d)
- 拖动文本字段中的光标或选择手柄时,会显示一个放大镜 widget。(I5391e、b/203781358)
bug 修复
- 修复了 IME 可见性发生变化时文本手柄不移动的问题。(I25f2e)
版本 1.1.0-beta03
2021 年 11 月 17 日
发布了 androidx.compose.foundation:foundation:1.1.0-beta03 和 androidx.compose.foundation:foundation-layout:1.1.0-beta03。版本 1.1.0-beta03 中包含这些提交内容。
API 变更
- 向 LazyVerticalGrid 添加了对水平 span 的支持。(I7e2fa、b/176758183)
- 添加了为延迟列表项位置添加动画效果的实验性功能。在 LazyItemScope 中新增了一个名为 - Modifier.animateItemPlacement()的新修饰符。用法示例:- var list by remember { mutableStateOf(listOf("A", "B", "C")) } LazyColumn { item { Button(onClick = { list = list.shuffled() }) { Text("Shuffle") } } items(list, key = { it }) { Text("Item $it", Modifier.animateItemPlacement()) } }- 当您通过 LazyListScope.item或LazyListScope.items提供键时,此修饰符会启用项重新排序动画。除了项重新排序之外,由排列方式或对齐方式更改等事件引起的所有其他位置更改也会以动画形式呈现。(I59e7b、b/150812265)
 
- 当您通过 
版本 1.1.0-beta02
2021 年 11 月 3 日
发布了 androidx.compose.foundation:foundation:1.1.0-beta02 和 androidx.compose.foundation:foundation-layout:1.1.0-beta02。版本 1.1.0-beta02 中包含这些提交内容。
bug 修复
- 现在,涟漪效果和其他指示元素仅在位于 Modifier.scrollable()容器内时才会延迟,而不是始终都会因按下事件而延迟。(Ibefe0、b/203141462)
- 添加了实验性 BringIntoView API,可让您向父级发送请求,以便父级可以滚动,从而将项目呈现到视图中(Ib918d、b/195353459)
外部贡献
- 添加了 Modifier.pointerHoverIcon(I95f01)
版本 1.1.0-beta01
2021 年 10 月 27 日
发布了 androidx.compose.foundation:foundation:1.1.0-beta01 和 androidx.compose.foundation:foundation-layout:1.1.0-beta01。版本 1.1.0-beta01 中包含这些提交内容。
bug 修复
- 添加了实验性 BringIntoView API,可让您向父级发送请求,以便父级可以滚动,从而将项目呈现到视图中(Ib918d、b/195353459)
版本 1.1.0-alpha06
2021 年 10 月 13 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha06 和 androidx.compose.foundation:foundation-layout:1.1.0-alpha06。版本 1.1.0-alpha06 中包含这些提交内容。
API 变更
- 为布局添加了无子项过载,提高了效率 (Ib0d9a)
- SemanticsNodeInteraction.performSemanticsAction现在会返回调用函数的- SemanticsNodeInteraction。(I9e5db)
- 添加了 performScrollToNode(matcher: SemanticsMatcher),可将可滚动容器滚动到与给定匹配器所匹配的内容。(Ic1cb8)
版本 1.1.0-alpha05
2021 年 9 月 29 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha05 和 androidx.compose.foundation:foundation-layout:1.1.0-alpha05。版本 1.1.0-alpha05 中包含这些提交内容。
API 变更
- 为 PointerEventChange 添加了实验性历史指针。(Ic1fd8、b/197553056、b/199921305)
bug 修复
- 修复了可滚动组合项(无论是延迟还是非延迟)在滚动方面的无障碍支持 (I6cdb0)
版本 1.1.0-alpha04
2021 年 9 月 15 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha04 和 androidx.compose.foundation:foundation-layout:1.1.0-alpha04。版本 1.1.0-alpha04 中包含这些提交内容。
API 变更
- 废弃了 performGesture和GestureScope,它们已被performTouchInput和TouchInjectionScope取代。(Ia5f3f、b/190493367)
- 向 SemanticsNode中添加了包含最小触摸目标尺寸的touchBoundsInRoot,以便开发者能够确保触摸目标满足无障碍功能最低要求。(I2e14b、b/197751214)
bug 修复
- 在 Android 12 设备上添加了对拉伸滚动回弹的支持。(Iccf3c、b/171682480)
版本 1.1.0-alpha03
2021 年 9 月 1 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha03 和 androidx.compose.foundation:foundation-layout:1.1.0-alpha03。版本 1.1.0-alpha03 中包含这些提交内容。
新功能
- 更新了 Compose 1.1.0-alpha03,使其依赖于 Kotlin1.5.30。(I74545)
API 变更
- 为滚动操作添加了发光效果。新增了实验性 OverScrollConfiguration API,以支持配置滚动回弹视觉效果。为关闭滚动效果提供了 null 值。(I0c304、b/171682480)
- AwaitPointerEventScope 现在具有 withTimeout() 和 withTimeoutOrNull()(I507f0、b/179239764、b/182397793)
- 添加了用于获取裁剪边界的测试方法。(I6b28e)
- 向 ViewConfiguration 添加了最小触摸目标尺寸,用于在语义和指针输入中确保无障碍性。(Ie861c)
版本 1.1.0-alpha02
2021 年 8 月 18 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha02 和 androidx.compose.foundation:foundation-layout:1.1.0-alpha02。版本 1.1.0-alpha02 中包含这些提交内容。
API 变更
- 为 Modifier.size和requiredSize添加了 DpSize 版本(I3fc7e、b/194219828)
版本 1.1.0-alpha01
2021 年 8 月 4 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha01 和 androidx.compose.foundation:foundation-layout:1.1.0-alpha01。版本 1.1.0-alpha01 中包含这些提交内容。
API 变更
- 更新了 DrawScope#drawImage方法,该方法会使用来源和目的地 rect 来使用可选的 FilterQuality 参数。对于想要在针对基于像素的艺术作品扩大时呈现像素化风格的像素艺术作品而言,此变更非常有用。更新了 BitmapPainter + Image 可组合项,使其也使用可选的 FilterQuality 参数(Ie4fb0、b/180311607)
- 现在,用户按下返回按钮时,TextField 会清除选择,这与 Android EditText 行为相符。(I3ca16、b/174173645)
- 添加了光标句柄。(I07a82、b/173016579)
bug 修复
- 现在,通过延迟列表和常规滚动组件的语义操作进行滚动时,滚动会以动画效果呈现(Id9066、b/190742024)
外部贡献
- LazyVerticalGrid现在既接受横向排列参数,又接受纵向排列参数。(If9c92)
1.0 版
版本 1.0.5
2021 年 11 月 3 日
发布了 androidx.compose.foundation:foundation:1.0.5 和 androidx.compose.foundation:foundation-layout:1.0.5。版本 1.0.5 中包含这些提交内容。
bug 修复
- 修复了跟踪 derivedStateOf 实例时出现的崩溃问题。(aosp/1792247)
版本 1.0.4
2021 年 10 月 13 日
发布了 androidx.compose.foundation:foundation:1.0.4 和 androidx.compose.foundation:foundation-layout:1.0.4。版本 1.0.4 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin 1.5.31
版本 1.0.3
2021 年 9 月 29 日
发布了 androidx.compose.foundation:foundation:1.0.3 和 androidx.compose.foundation:foundation-layout:1.0.3。版本 1.0.3 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin 1.5.30
版本 1.0.2
2021 年 9 月 1 日
发布了 androidx.compose.foundation:foundation:1.0.2 和 androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.1 和 androidx.compose.foundation:foundation-layout:1.0.1。版本 1.0.1 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin 1.5.21。
版本 1.0.0
2021 年 7 月 28 日
发布了 androidx.compose.foundation:foundation:1.0.0 和 androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.0-rc02 和 androidx.compose.foundation:foundation-layout:1.0.0-rc02。版本 1.0.0-rc02 中包含这些提交内容。
- 更新了普通形状的边框渲染,解决了使用固定尺寸定义的路径的相关问题。(aosp/1748871、b/191817116)
版本 1.0.0-rc01
2021 年 7 月 1 日
发布了 androidx.compose.foundation:foundation:1.0.0-rc01 和 androidx.compose.foundation:foundation-layout:1.0.0-rc01。版本 1.0.0-rc01 中包含这些提交内容。
API 变更
- Canvas 现在支持使用 contentDescription 参数来实现无障碍功能。(Ib547c)
bug 修复
- 停用的按钮、卡片、复选框和整体 Modifier.clickable(enabled=false)不会阻止对其父级进行点击操作。(Ic2c3b、b/183908811)
版本 1.0.0-beta09
2021 年 6 月 16 日
发布了 androidx.compose.foundation:foundation:1.0.0-beta09 和 androidx.compose.foundation:foundation-layout:1.0.0-beta09。版本 1.0.0-beta09 中包含这些提交内容。
API 变更
- 移除了 ManualFrameClock。如果您需要控制动画,请改用composeTestRule.mainClock。(I3c3e8、b/189951065)
- 将枚举 Role 和 LiveRegionMode 更改为具有私有构造函数的内联类 (Id1890)
- KeyboardCapitalization 已转换为内联类。(Id5a1c)
- TextOverflow 已更改为内联类。(I433af)
bug 修复
- 现在,当您为 LazyColumn/Row 项指定唯一键时,系统会基于相应键保持滚动位置。也就是说,如果您在当前可见的项之前添加/移除项,那么具有给定键的项将保持为第一个可见的项。(Id263f、b/184257857)
- 目前,键常量为 @ExperimentalComposeUiApi。在稳定阶段之前,消耗型代码可声明私有常量。(Ia5d48)
- 向 AndroidComposeTestRule 添加了 IdlingStrategy,测试框架可使用它来安装备用机制,以等待或实现静默。在测试开始之前使用 AndroidComposeTestRule.setIdlingStrategyFactory()可安装您自己的策略。(I608fa)
添加了配置文件规则
此版本向以下 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.foundation:foundation:1.0.0-beta08 和 androidx.compose.foundation:foundation-layout:1.0.0-beta08。版本 1.0.0-beta08 中包含这些提交内容。
API 变更
- 将 NestedScrollSource 枚举替换成了内联类。(Ie321b、b/187055290)
- 将一些枚举使用情况重构成了内联类,以免在添加新枚举值时出现 when 语句穷举问题。(I2b5eb)
- 向可点击/可切换状态的内容中添加了点按超时设置,以免在滚动/拖动时呈现涟漪效果(Ia2704、b/168524931)
- ContentDescription 和 Text 语义属性不再是单个值,而是列表。这样一来,它们便可原样合并而无需串联。还提供了更好的测试 API 来支持这些更改(Ica6bf、b/184825850)
- 废弃了 Modifier.focusModifier(),由Modifier.focusTarget()取代 (I6c860)
- 将 KeyboardType 枚举替换成了内联类。(I73045、b/187055290)
- 将 FocusState枚举替换成了FocusState接口(Iccc1a、b/187055290)
- 将 ImeAction 枚举替换成了内联类。(I18be5、b/187055290)
- AnnotatedString.withAnnotation函数现为 ExperimentalTextApi,而非 ExperimentalComposeApi。(I0cd0a)- 包含 TextUnitType 的 TextUnit 构造函数现为 ExperimentalTextApi,而非 ExperimentalComposeApi。
 
- PaddingValues 现为 @Stable,而非@Immutable(I88c50)
bug 修复
- 修复了长按非空文本中的空白区域会发生崩溃的问题。(I33ab5、b/187437299)
- SelectAll 后会显示工具栏(I495d9、b/185919613)
- 修复了可滚动容器会在横轴上裁剪其子级的问题。过去,如果您具有包含 Card 项的 LazyRow,该问题很容易反复出现。现在,阴影部分不会被裁剪。(Icb635、b/186318448)
- 修复了以下问题:使用 Modifier.combinedClickable 时,如果用户长时间点击,涟漪效果/其他指示元素有时会卡住(I2298c、b/186223077)
- 现在,detectDragGesures、detectVerticalGestures和detectHorizontalGestures将自动执行位置更改,无需在 onDrag 回调中调用 change.consumePositionChange(I42fc4、b/185096350、b/187320697)
- 更改了 Modifier.onGloballyPositioned();更改后,系统会报告此修饰符在修饰符链中的坐标,而不会报告在应用所有修饰符后的布局坐标。这意味着,修饰符的顺序现在会影响系统报告什么坐标。(Ieb67d、b/177926591)
版本 1.0.0-beta07
2021 年 5 月 18 日
发布了 androidx.compose.foundation:foundation:1.0.0-beta07 和 androidx.compose.foundation:foundation-layout:1.0.0-beta07。版本 1.0.0-beta07 中包含这些提交内容。
API 变更
- 引入了 LazyColumn/Row 的下一个可见项预提取逻辑(I8a4bc、b/184940225)
- 添加了裁剪选择手柄(Iff80d、b/183408447)
bug 修复
- LazyColumn/Row 现在最多会使 2 个之前可见的项保持活跃状态(不予处置),即使它们已滚动出边界也是如此。这样一来,当我们需要合成新项时,该组件便可重复使用活跃的子组合,从而改善滚动性能。(Ie5555)
- 移除了 paintBackground。(I38660)
- 使用 DrawScope 绘制选择背景。(I73c61、b/186674472)
- 修复了对布局加权子项进行 spacedBy 安排时影响 Row/Column 的 beta06 回归问题。(Ifaf8c、b/187326588)
版本 1.0.0-beta06
2021 年 5 月 5 日
发布了 androidx.compose.foundation:foundation:1.0.0-beta06 和 androidx.compose.foundation:foundation-layout:1.0.0-beta06。版本 1.0.0-beta06 中包含这些提交内容。
API 变更
- 解决与导航手势冲突的问题 (I1145e)
- 添加了 CollectionInfo 和 CollectionItemInfo 无障碍功能 API,用于针对无障碍服务标记集合及其项(Id54ef、b/180479017)
- 添加了 SemanticsActions.ScrollToIndex,用于将包含已编入索引的项的列表滚动到包含具有特定索引的项;还添加了SemanticsProperties.IndexForKey,用于获取包含键控项的列表中的某个项的索引。这两项操作都通过 LazyList 实现。- 添加了 SemanticsNodeInteraction.performScrollToIndex,用于将列表滚动到指定的索引;还添加了SemanticsNodeInteraction.performScrollToKey,用于将列表滚动到具有指定键的项。(I4fe63、b/178483889、b/161584524)
 
- 添加了 
- 支持向 TextFieldValue.Saver 保存 AnnotatedString。向 AnnotatedString.Builder 添加了 addTtsAnnotation 和 withAnnotation 实用函数(I8cbdc、b/178446304)
- 向 PaddingValues(horizontal, vertical)添加了默认参数值0.dp(I05571、b/181336792)
bug 修复
- 具有 weight(fill = false)的行和列的子项不再使父项填充整个可用的主轴空间。(Ied94d、b/186012444、b/184355105)
版本 1.0.0-beta05
2021 年 4 月 21 日
发布了 androidx.compose.foundation:foundation:1.0.0-beta05 和 androidx.compose.foundation:foundation-layout:1.0.0-beta05。版本 1.0.0-beta05 中包含这些提交内容。
API 变更
- FlingBehavior 接口现在标记为 @Stable。所有实现均应遵循 @Stable协定。(I93354、b/184830577)
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.foundation:foundation:1.0.0-beta04 和 androidx.compose.foundation:foundation-layout:1.0.0-beta04。版本 1.0.0-beta04 中包含这些提交内容。
API 变更
- 将 SoftwareKeyboardController 上的 hideSoftwareKeyboard 和 showSoftwareKeyboard 分别重命名为 hide()和show()。- 为 LocalSoftwareKeyboardController 提供了完整的 CompositionLocal 接口,以便对其进行设置(这在测试中尤其有用)(I579a6)
 
- 引入了 TextOverflow.Visible。(Ic8f89)
- 移除了 RowScope、ColumnScope、BoxScope和BoxWithConstraintsScope的公共实例。(I4e83e、b/181869067)
bug 修复
- 修复了边缘上的 LazyColumn/LazyRow项在快速滑动后位置不正确的问题(Ie4d13、b/183877420)
- 在此变更之前,本地可组合函数可根据其参数而跳过。此更改生效后,系统不会再跳过任何本地可组合函数。之所以会有这项变更,是因为在通常情况下,本地函数会从父函数获取参数,而跳过本地函数是出现 bug 的常见原因。 - 总之,请参考以下示例: - @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }- 在此变更之前,系统总是跳过 - ShowCount可组合函数,即使更新- count参数,也是如此。这种情况不会再发生了。(I5648a)
版本 1.0.0-beta03
2021 年 3 月 24 日
发布了 androidx.compose.foundation:foundation:1.0.0-beta03 和 androidx.compose.foundation:foundation-layout:1.0.0-beta03。版本 1.0.0-beta03 中包含这些提交内容。
API 变更
- 废弃了 DefaultMonotonicFrameClock。现在,如果在不提供MonotonicFrameClock的情况下调用withFrameNanos或Recomposer.runRecomposeAndApplyChanges,将抛出IllegalStateException。(I4eb0d)
bug 修复
- 现在,即使速度为 0,系统也会调用 FlingBehavior.performFling()(I0b6e5、b/181237123)
版本 1.0.0-beta02
2021 年 3 月 10 日
发布了 androidx.compose.foundation:foundation:1.0.0-beta02 和 androidx.compose.foundation:foundation-layout:1.0.0-beta02。版本 1.0.0-beta02 中包含这些提交内容。
API 变更
- 在 LazyColumn 衡量逻辑中添加了多项小优化 (Ic6889)
- 添加了新的 LocalSoftwareKeyboardController本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I5951e、b/168778053)
- 添加了新的 LocalSoftwareKeyboardController本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I84472、b/168778053)
bug 修复
- 对实验性 API 的公开使用施加了限制(I6aa29、b/174531520)
版本 1.0.0-beta01
2021 年 2 月 24 日
发布了 androidx.compose.foundation:foundation:1.0.0-beta01 和 androidx.compose.foundation:foundation-layout:1.0.0-beta01。版本 1.0.0-beta01 中包含这些提交内容。
这是 Compose 1.0.0 Beta 版的第一个版本。
API 变更
- 向 detectDragGestures添加了 onStart 回调(I67269、b/179995594)
- 用于调整为固有尺寸的修饰符不再处于实验阶段。(I15744)
- 移除了 dp 断言 (I798d2)
- 从所有文本字段中移除了 SoftwareKeyboardController 回调,很快将被新的 API 替代。(Iae869、b/168778053)
- 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)
 
- 移除了已废弃的 LayoutCoordinates 方法,使用函数代替 positionInParent 和 boundsInParent 的属性(I580ed、b/169874631、b/175142755)
- 为低级别文本组件(例如 CoreTextField)的输入会话创建了新的 TextInputSession。(I8817f、b/177662148)
- Placeable 现在公开了 measuredSize,表示实际测量的子布局的大小。该大小可能不遵循测量约束。(Ib2729、b/172560206、b/172338608)
- 添加了 selectionGroup 修饰符,允许为提供无障碍功能而标记 Tab 或 RadioButton 的集合 (Ie5c29)
- 添加了 LazyListState.animateScrollToItem - 此方法可顺畅地滚动到列表中的具体项。(I4bfd7) 
- ScrollableState.smoothScrollBy() 已重命名为 animateScrollBy()。LazyListState.snapToItemIndex() 已重命名为 scrollToItem()。ScrollState.smoothScrollTo() 已重命名为 animateScrollTo() (I35ded) 
- Modifier.zoomable 已替换为 Modifier.transformable。添加了 smoothPanBy、smoothRotationBy 作为一项功能。(Ifc32b、b/175294473) 
- compositionLocalOf和- staticCompositionLocalOf的- defaultFactory现在是必需项,而非可选项。- 这项变更消除了不可为 null 的类型(不提供默认出厂设置)可能存在的类型错误。之前,此操作会为不可为 null 的类型提供 null 引用值。 - 对于可为 null 的类型,请考虑提供 - { null }作为默认出厂设置。- 除非可提供合理的默认设置,否则我们不建议使用具有不可为 null 的类型的本地设置。如果不存在合理的默认设置,则 - defaultFactorylambda 应抛出异常。不过,抛出异常意味着本地设置的使用者将隐式依赖于相关设置是以类型系统不强制执行该设置为前提的。(Ifbd2a)
- 已将 - Indication#createIndication()改为了- Indication#rememberUpdatedIndication(InteractionState),并从 I- ndicationInstance#drawIndication()中移除了- InteractionState参数。IndicationInstance 应仅负责绘制视觉效果,而不能启动动画/写入状态以响应 InteractionState 的变化。这些动画和状态写入操作应在- rememberUpdatedIndication()中进行。还将- Modifier.indication中的- indication参数改为了必需参数。(Ic1764、b/152525426)
- 文本操作现在会自动检查焦点(I13777、b/179648629) 
- 移除了 - runBlockingWithManualClock(I15cdc、b/179664814)
- Modifier.verticalScroll()/horizontalScroll() 中的滚动位置现在通过 Int 表示 (I81298) 
- smoothScrollBy 和 scrollBy 方法的软件包已更改为 - androidx.compose.foundation.gestures.*(I3f7c1、b/175294473)
- FlingConfig 已重命名为 FlingBehavior,现在允许自定义挂起动画,而不是预定义 Decay。(I02b86、b/175294473) 
- 对尺寸修饰符进行了重命名。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。(I5b414) 
- defaultMinSizeConstraints 已重命名为 defaultMinSize。(I4eaae) 
- 移除了 Modifier.tapGestureFilter。请改用 - Modifier.pointerInput { detectTapGestures(...) }。(I266ed、b/175294473)
- 已从指针输入系统中移除了部分消耗。协调部分消耗的推荐方法是使用 Modifier.nestedScroll。(Ie9c9b) 
- Orientation 已移至 foundation 软件包。VelocirtTracker 已从 ui.gesture 移至 ui.input.pointer。(Iff4a8、b/175294473) 
- 已移除 AnimationClockObservable 和子类。已移除 AnimatedFloat。(Icde52、b/177457083) 
- drawerState.open() 和 drawerState.close() 现在是挂起函数。使用 rememberCoroutineScope() 获取 composition 的作用域,从而进行调用(I16f60、b/175294473) 
- Providers 已重命名为 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)
 
- 重新设计了 Modifier.scrollable。现在它使用 Scrollable 接口,而不是 ScrollableController 类(I4f5a5、b/174485541、b/175294473) 
- Modifier.draggable 现在接受 DraggableState 而不是简单的 lambda。您可以通过 - rememberDraggableState { delta -> }创建状态,以获得与之前相同的行为(Ica70f、b/175294473)
- 为调整为所需的固有尺寸,添加了 requiredWidth(IntrinsicSize) 和 requiredHeight(IntrinsicSize) 修饰符。(I0a6b4) 
- 移除了已废弃的 - emptyContent()。已改用- {}。(Idb33f、b/179432510)
- 删除了一些先前已废弃的 API(Ice5da、b/178633932) 
bug 修复
- 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以替换 TextField 上的旧 SoftwareKeyboardController 接口。(I658b6、b/168778053)
版本 1.0.0-alpha12
2021 年 2 月 10 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha12 和 androidx.compose.foundation:foundation-layout:1.0.0-alpha12。版本 1.0.0-alpha12 中包含这些提交内容。
API 变更
- Modifier.pointerInput 现在需要 remember 键来指示指针输入检测协程何时应重启以建立新的依赖项。(I849cd)
- 测试更新:hasText() 将检查文本字段中的输入和标签/提示/占位符文本 (Iab803)
- 添加了 PaddingValues.Absolute,可在接受 PaddingValues 的 API 中使用。(Ia5f30)
- 已废弃 onImeActionPerformed,请改用 KeyboardActions(If0bbd、b/179071523)
- 为了更好地匹配 ImageBitmap 和 ImageVector 的命名惯例,ImagePainter 已重命名为 BitmapPainter,以并行使用 VectorPainter。(Iba381、b/174565889)
- 现在使用 substring 作为参数,改进了 substring 测试 API (Icbe78)
- 引入了将应用于无限动画的 InfiniteAnimationPolicy协程上下文元素。默认情况下,除非使用ComposeTestRule运行测试,否则系统不会安装任何政策。(I50ec4、b/151940543)
- Animatable.snapTo 和 Animatable.stop 现在是挂起函数 (If4288)
- ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(Icf416)
- 解构声明和 copy() 方法在多个类中已很少用到,已将其从这些类中移除。(I26702、b/178659281)
- 添加了对 LazyColumn/LazyRow 的自定义键支持。这样我们可以更灵活地处理项的重新排序。因此,当您重新排列元素或从中间移除项时,您存储在 remember {} 代码块中的状态将随相应项一起移动。 - LazyColumn { items(users, key = { user -> user.id }) { ... } }
- 已将 Indication#createInstance 更改为 @Composable,并将 LocalIndication 更改为包含一个 Indication,而非 () -> Indication。(I5eeea、b/157150564) 
- Constraints.enforce已替换为- Constraints.constrain。(I8b8ea)
- 废弃了 loadFontResource,请改用 fontResource。废弃了 imageResource、loadImageResource、vectorResource 和 loadVectorResource,请改用 painterResource。(I6b809) 
- 出于性能方面的原因,ScrollAxisRange 语义现在接受返回浮点数的 lambda,而不是直接使用浮点值。(If4a35、b/178657186) 
- 添加了 EditableText 语义,用于标记文本字段的可修改输入文本,以提供无障碍服务,同时提供相应测试方法用于检查语义 (I8e07a) 
- Modifier.clickable 现在不支持双击和长按。使用 Modifier.combinedClickable 可实现此功能。(Iafad1) 
- toIntPx() 已重命名为 roundToPx()。(I9b7e4、b/173502290) 
- IntBounds 已重命名为 IntRect,相应 API 也得以改进。(I1f6ff) 
- 已废弃 Modifier.dragGestureFilter,请改用 - Modifier.pointerInput { detectDragGestures (...)}。或者,针对单轴拖动使用 Modifier.draggable(I0ba93、b/175294473)
- 已重命名 Ambient,以与 Ambient 重命名为 CompositionLocal 匹配。Ambient 过去被命名为 AmbientFoo,现在 CompositionLocal 被命名为 LocalFoo。(I2d55d) 
- 将 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) 
- 动画中的播放时间现已统一为纳秒级 (If776a) 
- 已废弃 @ComposableContract,改为使用三个更具体的注解。 - @ComposableContract(restartable = false)已变为- @NonRestartableComposable- @ComposableContract(readonly = true)已变为- @ReadOnlyComposable- @ComposableContract(preventCapture = true)已变为- @DisallowComposableCalls- @ComposableContract(tracked = true)已被移除。(I60a9d)
- 已废弃 - emptyContent()和- (@Composable () -> Unit).orEmpty()实用程序,因为它们不再具有任何积极的性能影响或价值 (I0484d)
- 现在可以关闭 Recomposer 了。关闭的 Recomposer 会继续重组,直至组合子协程完成。Recomposer.shutDown 已重命名为 cancel,与 close 形成对比。(Ib6d76) 
- 已将与 LazyVerticalGrid 相关的 API 标记为实验性(Ia53e3、b/178519862) 
- rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 软件包。(I1366e、b/177338004) 
- RestorableStateHolder 已重命名为 SaveableStateHolder 并移至 androidx.compose.runtime.saveable package。内部方法 RestorableStateProvider 已重命名为 SaveableStateProvider。已移除通用类型,因此您可以直接将 Any 作为键传递。不再需要实验性注解。(I0902e、b/174598702) 
- Saver、listSaver()、mapSaver()、autoSaver 已从 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6) 
- 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) 
- RounderCornerShape、CutCornerShape 和 CornerBasedShape 中的参数已从 left/right 重命名为 start/end,以支持 Shape 在 RTL 方向的自动镜像。对于不需要自动镜像的情况,引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape。(I61040、b/152756983) 
- canDrag 已从 Modifier.scrollable 中移除。(Id66e7、b/175294473) 
- 已重构 Compose 编译器插件面向的 API,旨在使用接口而不是具体类。接口也不再使用类型参数。 - 这种内部更改不会影响源代码兼容性,但这是一项重大的二进制文件更改。(I3b922、b/169406779) 
- 已移除 Modifier.scaleGestureFilter,请改用 Modifier.zoomable。或者,使用 - Modifier.pointerInput { detectMultitouchGestures { ... }}(Id5da1、b/175294473)
- 现已废弃 AnimatedValue/Float,请改用 Animatable。(I71345、b/177457083) 
- 从公共 API 中移除了 CoreText 和 CoreTextField
 - 移除了已废弃的 SelectionContainer 重载 (I99c19)
 
- 移除了已废弃的非挂起滚动函数,继续采用上一个版本的更改,非挂起滚动函数现已完全移除。请转为使用具有相同名称的挂起函数。您可以通过 rememberCoroutineScope() 获取协程范围。(I3d39c、b/178169563) 
- 已废弃 androidx.compose.foundation.layout.ConstraintLayout,改为使用 androidx.constraintlayout.compose.ConstraintLayout。您需要添加对 - androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01的依赖项。(I87adc)
- 已废弃 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicationGestureFilter。改为将 Modifier.clickable 或 Modifier.pointerInput 与 detectTapGestures 函数一起使用。(I6baf9、b/175294473) 
- 移除了 - Recomposer.current()。[Abstract]ComposeView 现在默认设置为延迟创建的、作用域为窗口的 Recomposer(由窗口的 ViewTreeLifecycleOwner 驱动)。在主机生命周期结束时,系统会暂停重组和基于 withFrameNanos 的动画 tick 操作。(I38e11)
- Recomposer.runningRecomposers 现在提供只读 RecomposerInfo 的一个全局 StateFlow,用于观察进程中正在进行的组合状态。请首选此 API 而不是 Recomposer.current(),后者现在已废弃。(If8ebe) 
版本 1.0.0-alpha11
2021 年 1 月 28 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha11 和 androidx.compose.foundation:foundation-layout:1.0.0-alpha11。版本 1.0.0-alpha11 中包含这些提交内容。
API 变更
- 废弃了非挂起函数 scrollBy,移除了非挂起函数 scrollTo - 现在,我们建议使用挂起函数来控制滚动并等待滚动完成。在此过渡期间,我们将废弃和/或移除这些函数的非挂起版本。(Ie9ced) 
- 废弃了非挂起函数 smoothScrollBy。现在,我们建议使用挂起函数来控制滚动并等待滚动完成。在此过渡期间,我们将废弃这些函数的非挂起版本。(I12880) 
- 向 Image 和 Icon 添加了内容说明参数,用于提供对无障碍服务的说明 (I2ac4c) 
- BasicTextField 收到了一个名为“decorationBox”的新参数。使用此参数,可以向文本字段添加图标、占位符、标签等装饰,并加大其触摸目标区域。(I16996) 
- 从 Modifier.draggable 中移除了 canDrag 参数(Ic4bec、b/175294473) 
- 移除了接受 FlingConfig 的 AnimatedFloat.fling,请改用挂起函数 Animatable.animateDecay。(I4659b、b/177457083) 
- 从以下类中移除了 - data class:- InlineTextContent
- LocaleList
- (I605c7)
 
- 现在可以在组合之外创建可点击项、可切换项和可选择项(I0a130、b/172938345、b/175294473) 
- 废弃了 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)
- 移除了已废弃的 AbsoluteAmalationment。(Iffa96、b/177641870) 
- 已将 propagateMinConstraints 参数添加到 Box,用于指定是否应将传入的最小约束传递给 Box 的内容。默认值为 false。(I0125b、b/152613457) 
bug 修复
- onCommit、onDispose 和 onActive 已废弃,取而代之的是 SideEffect API 和 DisposableEffect API (If760e)
- 已将 WithConstraints 重新设计为 BoxWithConstraints 并移至 foundation.layout。(I9420b、b/173387208)
- 对 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) 
- Density 现在为 Arrangement 接口的接收器范围。(I18aad) 
- TextFieldValue 接受 AnnotatedString。但是,这是只针对 API 的更改,尚未实现多样式文本编辑。 - 从 EditingBuffer 构造函数参数中移除了 initial。(I326d5)
 
- 从 EditingBuffer 构造函数参数中移除了 
- invalidate 和 compositionReference() 现已废弃,取而代之的分别是 currentRecomposeScope 和 rememberCompositionReference。(I583a8) 
- 更改了 AnnotatedString,以从 kotlin.CharSequence 进行扩展。因此,length 和 subSequence 现在是实例函数,并且已移除扩展函数。(Iaf429) 
- Duration 和 Uptime 将替换为 Long 毫秒值,此步骤消除了指针输入对这些类的依赖。(Ia33b2、b/175142755、b/177420019) 
- 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)
- 已将 TransformedText.transformedText 重命名为 TransformedText.text - TransformedText 不再是数据类 (Ie672a)
 
- 以下类不再是数据类: - AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
 
- 移除了实验性 monotonicFrameAnimationClockOf 方法(Ib753f、b/170708374) 
- 废弃了全局坐标方法,并新增了基于窗口的坐标方法。(Iee284) 
- 请使用 ImeAction.None 来代替 ImeAction.NoAction - 请使用 ImeAction.Default 来代替 ImeAction.Unspecified (Ie1bcc)
 
- FocusRequester.createRefs 现在被标记为实验性,因为它可能会发生变化。(I2d898、b/177000821) 
- 已将 SemanticsPropertyReceiver.hidden 重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。已将 AccessibilityRangeInfo 重命名为 ProgressBarRangeInfo。已将 stateDescriptionRange 重命名为 progressBarRangeInfo。已将 AccessibilityScrollState 重命名为 ScrollAxisRange。已将 horizontalAccessibilityScrollState 重命名为 horizontalScrollAxisRange。已将 verticalAccessibilityScrollState 重命名为 verticalScrollAxisRange。(Id3148) 
- 已将 VisualTransformation 变为功能接口 (I3bba4) 
- 在测试中使用 TestCoroutineDispatcher (I532b6) 
- 移除了 PointerInputData 并修改了 PointerInputChange,以为其指定 PointerInputData 的所有字段。已将 PointerInputEvent 和 PointerInputEventData 变成内部类,因为它们不会在任何公共 API 中使用。(Ifff97、b/175142755) 
- 已将 TextInputService.onStateUpdated 重命名为 updateState (Id4853) 
- 移除了 displaySize,以免使用此大小。通常,最好使用 onRoot() 的大小,或者至少使用窗口大小。(I62db4) 
版本 1.0.0-alpha10
2021 年 1 月 13 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha10 和 androidx.compose.foundation:foundation-layout:1.0.0-alpha10。版本 1.0.0-alpha10 中包含这些提交内容。
API 变更
- ImeOptions 和 KeyboardOptions 不再是数据类(I3c898、b/168684531)
- VisualTransformation API 变更
- OffsetMap 已重命名为 OffsetMapping
- OffsetMapping.identityOffsetMap 已重命名为 OffsetMapping.Identity
- PasswordTransformation 不再是数据类
- OffsetMapping 已移至其自己的文件中
- (I0bdf3)
 
- EditOperations API 变更
- EditOperation 已重命名为 EditCommand
- 为 EditOperation 的具体实现添加了 Command 后缀
- EditCommand 不再是数据类
- EditOperation.process 函数已重命名为 applyTo
- InputEventListener 已重命名为 InputEventCallback
- (I0a366)
 
- 修改了 Velocity,现在包含分量部分和数学运算。(Ib0447)
- @ExperimentalTesting 已重命名为 @ExperimentalTestApi,以与类似的实验性 API 注解保持一致(Ia4502、b/171464963)
- 针对 LazyColumn/LazyRow 添加了实验性 stickyHeader 方法 (I0a81d)
- Color.useOrElse() 已重命名为 Color.takeOrElse() (Ifdcf5)
- 废弃了 TestUiDispatcher,改为使用 Dispatchers.Main(Ic171f、b/175385255)
- 向 Foundation Strings.kt 添加了 Toggle(I4a5b7、b/172366489)
- 将 nativeClass 移到了 ui 模块并将其变为内部 API。 更新了 nativeClass 在 equals 实现中的用法,以便改用“is MyClass”。(I4f734)
- FlowRow 和 FlowColumn 已废弃,请改用自定义布局。(I09027)
- 废弃了 Modifier.focus() 和 Modifier.focusRequester(),改为使用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48、b/175160751、b/175160532、b/175077829)
- 引入了 SelectionRegistrar.notifySelectableChange,用于向 SelectionManager 通知 Selectable 更新。(I6ff30、b/173215242)
- fun Dp.isFinite()已改为- val Dp.isFinite(I50e00)
- Constraints#satisfiedBy 已重命名为 isSatisfiedBy。(I9cf5c)
- 针对具有未指定的常量的内联类添加了 isSpecified、isUnspecified 和 useOrElse。(I93f7b、b/174310811)
bug 修复
- 新增了基于协程的 API Animatable,用于确保其动画间的互斥性。新增了 DecayAnimationSpec,用于支持多维衰减动画(I820f2、b/168014930)
- 添加了对已停用和只读文本字段的支持(I35279、b/171040474、b/166478534)
- animate()现已替换为- animateAsState(),后者会返回- State<T>而不是- T。这样可以提高性能,因为失效范围可缩小到读取 State 值的位置。(Ib179e)
- 添加了语义角色 API 并将 Role 作为参数添加到可点击、可选择和可切换的 SemanticsModifier。更改了 Modifier.progressSemantics,使其也可供 Slider 使用。(I216cd)
- 现在可通过 keyEvent.nativeKeyEvent 访问原生 keyEvent(I87c57、b/173086397)
版本 1.0.0-alpha09
2020 年 12 月 16 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha09 和 androidx.compose.foundation:foundation-layout:1.0.0-alpha09。版本 1.0.0-alpha09 中包含这些提交内容。
API 变更
- 添加了 Scrollable 接口 - 如此一来,就可以将 ScrollState 和 LazyListState 视为通用类型,从而跨这两种类型实现自定义滚动。 - 此变更还将 smoothScrollBy 移至 Scrollable 上的扩展函数,充分利用了此功能。(I2153b) 
- 添加了 LazyVerticalGrid。(I17267、b/162213211) 
- 废弃了 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed,改为使用 LazyColumn 和 LazyRow (I5b48c) 
- 针对挂起指针输入 API,已将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。(Idf0a1、b/175142755) 
- 添加了 LazyListState.layoutInfo,用于提供当前可见项目的尺寸和偏移量列表(If8678、b/170472532) 
- 移除了 ExperimentalPointerInput 注解 (Ia7a24) 
- 添加了对 TextField 的 InteractionState 支持。(I61d91) 
- 为 LazyColumn/Row 添加了 reverseLayout 参数,适用于 - true项目要从底部向顶部组成并且- LazyListState.firstVisibleItemIndex == 0表示第一个项目位于底部的情况。(I552ae、b/166589935)
- 为 LazyColumn 添加了 verticalArrangement 参数。为 LaazyRow 添加了 horizontalArrangement 参数。我们可以使用 Arrangement 在项目之间添加间距,并在没有足够项目来填满最小尺寸时指定项目的排列方式。(Icf79a、b/170394300) 
- detectMultitouchGestures 现在只使用一个回调,其中包含合并的形心、平移、缩放和旋转参数。(Ie6e1c) 
- 将 ContentDrawScope 移到了 ui-graphics 模块,以便与 DrawScope 位于同一模块内。(Iee043、b/173832789) 
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) 
- 废弃了 Modifier.focusObserver,改为使用 Modifier.onFocusChanged 或 Modifier.onFocusEvent(I30f17、b/168511863、b/168511484) 
- 现在,Autofill API 为实验性 API,需要选择启用 (I0a1ec) 
- 添加了解构声明,用于创建 FocusRequester 实例(I35d84、b/174817008) 
- 已将 accessibilityLabel 重命名为 contentDescription。将 accessibilityValue 重命名为 stateDescription。(I250f2) 
- 在 SelectionRegistrar 中引入了多个新函数,并且已将 onPositionChange 重命名为 notifyPositionChange。(Ifbaf7) 
- 将 AndroidOwner 变为内部函数(Ibcad0、b/170296980) 
- 新增了用于创建 InfiniteRepeatableSpec 的 infiniteRepeatable 函数 (I668e5) 
- 更改了 - Applier接口,简化了将树的构建方式从自上而下改为自下而上的过程。- insert()方法已重命名为- insertTopDown()。- 添加了新方法 - insertBottomUp()。- applier 可以使用 - insertTopDown()或- insertBottomUp()向正修改的树中插入节点,具体取决于哪个方法的效果更好。- 在构建某些树(例如 - LayoutNode和- View)时,自下而上构建会比自上而下构建效率更高。在做出此变更之前,若想实现自下而上构建,要进行很多插入操作,并需将插入内容复制到需借助自下而上的构建方式来提高性能的每个 applier。通过此变更,- Applier替换- insertBottomUp()即可实现自下而上构建树,替换- insertTopDown()即可实现自上而下构建树。(Icbdc2)
- 添加了 painterResource API,以处理光栅化资源格式(例如 PNG)或 VectorDrawables 中的不透明加载 Painter 对象。使用方无需再预先确定资源类型,并可调用此方法来获取 Painter 对象,以便在 Image 可组合项或 Painter 修饰符中使用。(I2c703、b/173818471) 
- 添加了 buildAnnotatedString 工厂函数,以便构建 AnnotatedString。废弃了 annotatedString 构建器函数。(Idfe0b) 
版本 1.0.0-alpha08
2020 年 12 月 2 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha08 和 androidx.compose.foundation:foundation-layout:1.0.0-alpha08。版本 1.0.0-alpha08 中包含这些提交内容。
API 变更
- 从 CoreTextField中移除了maxLines参数。如果您要按行数限制文本字段的高度,请改用BasicTextField。(Iec002)
- 将 await*TouchSlop()方法改为不检测指针按下状态,并将其重命名为*OrCancellation。此外,不再需要orientationLock参数。(Ie96e1)
- 增加了针对可组合 lambda 参数命名和位置的 lint 检查,旨在检查其命名和位置是否符合 Compose 准则。此外,根据 lint 检查结果和指南,还将一些尾随 lambda 名为 children的 API 迁移到了content。(Iec48e)
- foundation:foundation-textAPI 已移至- foundation:foundation。软件包结构保持不变 (Id3eb2)
- 添加了新的多点触控手势检测器,包括用于检测旋转、缩放和平移的辅助程序。(Ic459d)
- 新增拖动手势检测器挂起指针输入 API,包括屏幕方向锁定。(Icef25)
- 已将 VectorAsset 重命名为 ImageVector。根据 API 委员会准则将 VectorAsset 移到了 Builder 并进行了重命名,使其成为 ImageVector 的内部类。添加了 VectorAssetBuilder 的类型别名,用于关联到 compat 的 ImageVector.Builder。(Icfdc8)
- 已将 ImageAsset 及相关方法重命名为 ImageBitmap。(Ia2d99)
- 将 foundation 语义属性移到了 ui (I6f05c)
- 添加了基于协程的滚动 API: - 添加了 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及针对滚动控件的级别较低的 API。这些 API 可提供挂起接口;在返回前,此接口会一直等待,直到滚动完成为止。(Ie5642) 
- 已将 singeLine 参数添加到 BasicTextField、TextField 和 OutlinedTextField 中。将此参数设为 true 会使文本字段成为可水平滚动的单行。(I57004、b/168187755) 
- 使用新的挂起指针输入添加了针对点按、点按两次、长按和按下指示信号的手势检测器。此外,还添加了几个实用程序,让开发者可以更轻松地编写自己的手势检测器。(I00807) 
- 在 foundation 中添加了 Modifier.focusable。可使用它向组件添加可聚焦的行为(具有正确的语义和无障碍功能)。(I41eb9、b/152525426、b/162865824) 
- 移除了之前废弃的 API:移除了 Border,改为使用 BorderStroke。移除了 Modifier.drawBorder,改为使用 Modifier.border。移除了 Modifier.gravity,改为使用 Modifier.align。移除了 Stack,改为使用 Box(I32c2b、b/172470874) 
- AbsoluteArrangement 已重命名为 Arrangement.Absolute。(If26f2) 
bug 修复
- 将 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)
- 从 SubcomposeLayout 声明中移除了 <T>。现在,您无需指定类型即可使用它。(Ib60c8)
- 将 PointerInputData 的 uptime 字段和 position 字段设为了不可为 null。(Id468a)
- 现在,MaterialTheme 可为选择句柄和选择背景设置正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColor 自定义对所选文字使用的颜色。(I1e6f4、b/139320372、b/139320907)
- 已将 Box 的 alignment 参数重命名为 contentAlignment。(I2c957)
- 已将 offsetPx 修饰符重命名为 offset。现在,它们采用 lambda 参数(而非 State)。(Ic3021、b/173594846)
- 添加了用于检查托管窗口是否已获得焦点的 WindowManager.isWindowFocused,并且添加了提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2a、b/170932874)
- 向 TextInputService#onStateUpdated 添加了 resetInput 参数(I3e8f5、b/172239032、b/171860947)
- 更新了 TextFieldValue API
- 将 TextFieldValue.composition 变为了只读
- 消除了因选择范围无效而抛出的异常(I4a675、b/172239032)
 
- 废弃了名称后缀为 Ambient的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 Compose API 准则)。(I33440)
- 添加了 Android Typeface 封装容器。您可以通过 typeface函数(即typeface(Typeface.DEFAULT))加载 Android Typeface。并且,typefaceFromFontFamily()已重命名为typeface()(I52ab7)
- 添加了 lint 检查,用于检查 Modifier 工厂函数是否在其内使用 androidx.compose.ui.composed {},而不是标记为@Composable。(I3c4bc)
- 添加了 lint 检查,用于检查 Modifier 工厂函数是否已定义为针对 Modifier 的扩展,以便其能够顺利地链接到一起。(I07981)
- 已将语义参数 mergeAllDescendants 重命名为 mergeDescendants。(Ib6250)
- 现在,测试中的时间控件(TestAnimationClock 及其用例)处于实验阶段(I6ef86、b/171378521)
- 移除了旧的 ui-test 模块及其桩 (I3a7cb)
- TextUnit.Inherit 已重命名为 TextUnit.Unspecified,以与其他单位保持一致。(Ifce19)
- Alignment 接口经过了更新,可正常工作。(I46a07、b/172311734)
- foundation:foundation-text模块已合并到- foundation:foundation中 (Idac0f)
- 废弃了 place(Offset) 和 placeRelative(Offset),改为使用具有 int 偏移的重载 (I4c5e7)
- 已针对 LayoutIdParentData将id重命名为layoutId。已将Measurable.id重命名为Measurable.layoutId。(Iadbcb、b/172449643)
版本 1.0.0-alpha07
2020 年 11 月 11 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha07、androidx.compose.foundation:foundation-layout:1.0.0-alpha07 和 androidx.compose.foundation:foundation-text:1.0.0-alpha07。版本 1.0.0-alpha07 中包含这些提交内容。
API 变更
- 与对 Modifier.fillMaxSize[Width|Height]的处理方式类似,我们现在支持在LazyColumn/Row的作用域内的Modifier.fillParentMaxSize[Width|Height]中使用分数(I797e2、b/166586426)
- 从公共 API 中移除了 KeyboardOptions.toImeOptions。(Ic2e45)
- 废弃了 Foundation AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor,请改为使用 Material 库中提供的新版本。对于非 Material 应用,您应改为创建自己的设计系统专属主题上下文环境,以便在您自己的组件中使用。(I74acc、b/172067770)
- 废弃了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
- 向 TextField 添加了 maxLines (Ib2a5b)
- TextField 已更新为接受 KeyboardOptions (Ida7f3)
- 添加了可在 TextField 中使用的 KeyboardOptions (I9ca32)
- 添加了 BasicText,并将其作为在设计上不预设立场的文本 API,可与 BasicTextField 并行运行。(I28268)
- 移除了 ExperimentalLazyDsl 注解。现在,无需添加 @OptIn 即可使用 LazyColumn/LazyRow(Idab7a、b/166584730)
- 废弃了 BaseTextField,请改用 BasicTextField。(I896eb)
- 添加了 BasicTextField,用于替代 CoreTextField 和 BaseTextField (Id4cea)
- 移除了已废弃的 LazyColumnItems/LazyRowItems (I1d8a8)
- 移除了已废弃的用于将尺寸调整到固有测量值的可组合项。(I18537、b/171811496)
- relativePaddingFrom 已重命名为 paddingFrom。为方便指定从布局边界到文本基线的距离,添加了 paddingFromBaseline 修饰符。(I0440a、b/170633813)
- 向 aspectRatio 修饰符添加了 matchHeightConstraintsFirst 参数,可用于将修饰符指定为根据高度限制调整尺寸,然后再试着调整相应宽度。(Ie7c43、b/155290593)
- 移除了废弃的 DpConstraints。(I87884、b/171702471)
bug 修复
- 引入了 ScaleFactor 内联类来表示彼此独立的水平轴缩放比例和垂直轴缩放比例,以便支持非统一缩放用例。
- 向 ContentScale 添加了 computeScaleFactor 方法
- 添加了 ContentScale.FillBounds,用于执行非统一缩放,以便拉伸源边界来占满目标布局。
- 添加了使用 Size 参数计算 ScaleFactor 参数的运算符方法。
- (Ic96a6、b/172291582)
 
- captureToBitmap 已移至 captureToImage。(I86385)
- 已将 CoreText 标记为 @InternalTextApi。请改用 BasicText。(I6aaeb)
- 已将 KeyboardOptions 重命名为 ImeOptions (I82f36)
- KeyboardType 和 ImeAction 已移至 KeyboardOptions (I910ce)
- 已将 CoreTextField 标记为 @InternalTextApi,请改用 BasicTextField (Ie2469)
- 移除了 ExperimentalSubcomposeLayoutApi 注解。现在,无需添加 @OptIn 即可使用 SubcomposeLayout (I708ad)
- 引入了 ui-test-junit4 模块 (Ib91f8)
- 更新了 Icon API,以采用 Color.Unspecified 作为可能的着色颜色,从而在没有 ColorFilter 的情况下绘制提供的资源或 Painter。之前,如果系统尝试使用 Color.Unspecified 忽略着色,则会使用透明颜色进行着色,最终不会渲染到任何内容。(I049e2、b/171624632)
- 已将 MeasureResult 从 MeasureScope 中移出。(Ibf96d、b/171184002)
- 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98、b/170475424)
- androidx.ui.test 已移至 androidx.compose.ui.test (I9ffdb)
- FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 软件包 (Ied2e7)
- 添加了不含回调的 SelectionContainer (Ibfadb)
- 在 SelectionContainer 中添加了对 SelectionHandle 的位置的测试。(Ie93db)
- 添加了键盘自动更正 IME 选项 (I57b8d)
版本 1.0.0-alpha06
2020 年 10 月 28 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha06、androidx.compose.foundation:foundation-layout:1.0.0-alpha06 和 androidx.compose.foundation:foundation-text:1.0.0-alpha06。版本 1.0.0-alpha06 中包含这些提交内容。
API 变更
- 已将 androidx.compose.foundation.Icon 移至 androidx.compose.material.Icon。如果您不想使用 Material 库,还可以将 Image 组件/Modifier.paint() 与 Painter 搭配使用。(I9f622)
- 向 Modifier.scrollable、ScrollableColumn 和 LazyColumnFor 添加了 interactionState(I81566、b/169509805)
- 已将 alignByBaseline 添加至 RowScope,且已将 alignWithSiblings 重命名为 alignBy(I06503、b/170628732)
- Box 已成为内联函数。(Ibce0c、b/155056091)
- 向 CoreTextField 添加了 maxLines(Ibee58、b/143687793)
- 向 CoreTextField 添加了 softwrap。(I21a4b)
bug 修复
- 废弃了 VectorPainter,转为使用 rememberVectorPainter,现在更明确地表明可组合项 API 可在内部利用“remember”跨组合保留数据。(Ifda43)
- 在 ComposeTestRule 中启用了过渡;从 ComposeTestRule 中移除了用于启用闪烁光标的选项。(If0de3)
- 向 CoreTextField 添加了单行键盘选项 (I72e6d)
- Radius API 已重命名为 CornerRadius,更清楚地表明它在整个 Compose 中的使用方式。更新了文档,指出负的圆角半径值被限制为零。(I130c7、b/168762961)
- 添加了在组合修饰符中指定检查器信息的功能(Idee08、b/163494569)
- 添加了 KeyboardCapitalization IME 选项 (I8ac38)
- 修复了 Rtl 布局中的句柄位置。(I6e1e0)
- 重大变更:考虑到指针事件中能够更改的值只能是使用情况数据,我们移除了来自 PointerInputFilter.onPointerEvent(...) 的返回值。现在,您只需改变传入的 PointerEvents 的使用情况数据即可,无需从 PointerInputFilter.onPointerEvent(...) 返回数据。(I6acd0)
- 在选项菜单中添加了 SelectAll 选项 (Ief02b)
版本 1.0.0-alpha05
2020 年 10 月 14 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha05、androidx.compose.foundation:foundation-layout:1.0.0-alpha05 和 androidx.compose.foundation:foundation-text:1.0.0-alpha05。版本 1.0.0-alpha05 中包含这些提交内容。
API 变更
- CoreTextField 现在支持光标功能 (Id23aa)
- 废弃了 contentColor() 和 currentTextStyle() API,并分别用 AmbientContentColor 和 AmbientTextStyle Ambient 替换。与其他任何 Ambient 一样,您可以通过在 Ambient 属性中使用 - .current来访问当前值。进行此项变更是为了确保一致性,并避免可以通过多种方式来实现同一目的。此外,还重命名了一些 Ambient 属性,以更准确地描述它们的用途,如下所示:- ContentColorAmbient -> AmbientContentColor
- TextStyleAmbient -> AmbientTextStyle
- IndicationAmbient -> AmbientIndication
- EmphasisAmbient -> AmbientEmphasisLevels
- RippleThemeAmbient -> AmbientRippleTheme (I37b6d)
 
bug 修复
- 在对内联类的标记值进行标准化的过程中,将 Color.Unset 重命名为 Color.Unspecified,以与其他内联类保持一致(I97611、b/169797763)
- 添加了复制/粘贴/剪切无障碍操作 (I6db4f)
- 引入了 TextOverflow.None。当溢出为 None 时,Text 将不再处理溢出,而是向 LayoutNode 报告其实际大小。(I175c9、b/158830170)
- 将 Size.Unspecified 的参数从 Float.POSITIVE_INFINITY 更新为 Float.NaN。更新了 Painter 实现,以针对 Size.Unspecified 以及是非有限大小进行检查。(I95a7e)
- 添加了 Paging Compose 模块和分页集成 (Ib85da)
- 将 LazyListScope 修改为接收可为 null 的值 (I1765b)
- 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8、b/169083903)
- 添加了 LazyColumn/Row 的示例 (Idc16d)
- 修复了 items 和 itemsIndexed 方法,以允许 emptyList (I06647)
- 添加了一个用于指定检查器信息的 DSL (Ic9a22)
- 将 LongPress 移至 Text。(Iff2bc)
- 在 Text 和一个 Demo 中停用了 Selection。(Ie7e97)
- 支持将 AnnotatedString 转换为SpannableString,以确保可访问性。(Ief907)
- 移除了 PointerInputFilter.onPointerInput(...)。应改为使用PointerInputFilter.onPointerEvent(...)。(I6f04a)
版本 1.0.0-alpha04
2020 年 10 月 1 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha04、androidx.compose.foundation:foundation-layout:1.0.0-alpha04 和 androidx.compose.foundation:foundation-text:1.0.0-alpha04。版本 1.0.0-alpha04 中包含这些提交内容。
API 变更
- Stack 已重命名为 Box。将废弃之前存在的 foundation.Box,改为使用 compose.foundation.layout 中的新 Box。新的 Box 会在存在多个子元素时,在堆栈中将一个子元素放在另一个子元素之上,其行为不同于旧版 Box,后者的行为类似于 Column。(I94893、b/167680279)
- 废弃了 Box 装饰参数。如果您想对框进行装饰/填充,请改为使用 Modifier(Modifier.background、Modifier.border、Modifier.padding)(Ibae92、b/167680279)
- 添加了新的 LazyListState 类。 该类可用于观察和控制 LazyRow 和 LazyColumn 组件的滚动位置。您可以使用 rememberLazyListState() 创建实例,然后将其传递给组件的 state 参数。目前,可在该初始版本中观察第一个可见项和偏移量。(Ic7cb7、b/159307669)
- 现在会在重新创建 activity 的过程中保存并恢复延迟列表位置和滚动偏移量(Ie045f、b/166589058)
- 添加了长按语义操作(I6281b、b/156468846)
- 添加了 MutatorMutex 实用程序,用于在一段时间内保持单个更改器的共享状态,以及按优先级取消存在冲突的更改器 (I3f975)
- 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行了注解,使这些 API 变为内部 API 并隐藏其 KDoc(I554eb、b/168308412)
- 从含有 String 输入的 Text 中移除了 inlineContent 参数。由于 inlineContent 必须与 AnnotatedString 配合使用,因此不会用到该参数。(Ief403)
- 移除了已废弃的自定义 Arrangement API。(Ic576d、b/168297922、b/168297923)
- 在 wrapContentSize 修饰符中添加了 unbounded参数,该参数支持测量最大约束为无穷大的布局元素。(I77951、b/158559319)
- 我们已阻止静态导入布局作用域的内容(例如:RowScope 中的 alignWithSiblings),请改用显式作用域替代项:with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }。(I216be、b/166760797)
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)
 
- 优化了 LazyColumnFor/LazyRowFor 滚动的性能,所做调整为不会在每次滚动时进行不必要的重组(I64f65、b/168293643、b/167972292、b/165028371)
- 修复了在滚动并更改项目后 LazyColumnFor/LazyRowFor 中出现崩溃的问题;并实现了在移除上一个可见项目后自动向上滚动的操作,这样就不会再在最后显示空白间隙(I220ab、b/161480164、b/167855468)
- 不再允许在同一方向的容器(如 ScrollableContainer 和 LazyColumnFor)中嵌套可滚动容器。这种做法从未受到过支持,且破坏了快滑和以及构成 LazyColumnFor 项目的所有延迟 (I6e101)
- 更新了多个图形 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)
 
- 向语义属性添加了 AccessibilityScrollState。(Ifeda9)
- 将 TextRange 变为内联类,以避免创建对象。(Id034b)
- 移除了 ParagraphConstraints。现在,Width 会直接传递给 Paragraph。(Ica712)
版本 1.0.0-alpha03
2020 年 9 月 16 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha03、androidx.compose.foundation:foundation-layout:1.0.0-alpha03 和 androidx.compose.foundation:foundation-text:1.0.0-alpha03。版本 1.0.0-alpha03 中包含这些提交内容。
API 变更
- InnerPadding 已重命名为 PaddingValues。(I195f1、b/167389171)
- gravity 在布局 API 中用到时被一致地重命名为 align 或 alignment。(I2421a、b/164077038)
- 向 Stack 添加了一个 alignment 参数,该参数允许为所有 Stack 子级指定默认对齐方式。(Ie80ca、b/164085265)
bug 修复
- 已废弃 DpConstraints 以及使用它的 API。(I90cdb、b/167389835)
- widthIn的- minWidth和- maxWidth参数已重命名为- min和- max。对- preferredWidthIn、- heightIn和- preferredHeightIn也进行了类似的重命名。(I0e5e1、b/167389544)
- 在 ComposeTestRule 中添加了 onNode 及其他全局方法,因为当前的全局方法即将被废弃。(Ieae36)
- 修复了 GestureScope 中大小和位置的计算问题,该问题会导致生成无效的滑动手势(Iaf358、b/166589947)
- 将 createAndroidComposeRule和AndroidInputDispatcher从androidx.ui.test.android移动到了androidx.ui.test(Idef08、b/164060572)
版本 1.0.0-alpha02
2020 年 9 月 2 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha02、androidx.compose.foundation:foundation-layout:1.0.0-alpha02 和 androidx.compose.foundation:foundation-text:1.0.0-alpha02。版本 1.0.0-alpha02 中包含这些提交内容。
bug 修复
- TestUiDispatcher 已标记为实验性(Iae99d、b/161247083)
- 添加了 - ManualFrameClock.hasAwaiters,用于检查是否有任何内容在等待来自相应时钟的帧;在运行需要 ManualFrameClock 的测试时,- runWithManualClock可用于替代- runBlocking;- TestUiDispatcher.Main可让您轻松访问测试中的主界面调度程序。- 例如: - @Test fun myTest() = runWithManualClock { clock -> // set some compose content withContext(TestUiDispatcher.Main) { clock.advanceClock(1000L) } if (clock.hasAwaiters) { println("The clock has awaiters") } else { println("The clock has no more awaiters") } }
版本 1.0.0-alpha01
2020 年 8 月 26 日
发布了 androidx.compose.foundation:foundation:1.0.0-alpha01、androidx.compose.foundation:foundation-layout:1.0.0-alpha01 和 androidx.compose.foundation:foundation-text:1.0.0-alpha01。版本 1.0.0-alpha01 中包含这些提交内容。
版本 0.1.0-dev
版本 0.1.0-dev17
2020 年 8 月 19 日
发布了 androidx.compose.foundation:foundation:0.1.0-dev17、androidx.compose.foundation:foundation-layout:0.1.0-dev17 和 androidx.compose.foundation:foundation-text:0.1.0-dev17。版本 0.1.0-dev17 中包含这些提交内容。
API 变更
- 为 Row 和 Column 添加了 spacedBy Arrangement,以支持以固定间距排列布局子项。还添加了 aligned Arrangement,以支持根据 Arrangement 方法在 Row/Column 中连续对齐排列布局子项。以前的 Arrangement.Vertical#arrange 和 Arrangement.Horizontal#arrange 方法已废弃,且未来将不支持写入自定义 Arrangement。(I6733d、b/161985975)
- Offset 已成为内联类 (Iaec70)
- 从 TextField 中移除了 onFocusChanged 回调,请改为使用 Modifier.focusObserver。(I51089、b/161297615)
- 废弃了 Modifier.drawBorder,请改为使用 Modifier.border。Border 数据类已替换为 BorderStroke(I4257d、b/158160576)
- VerticalScroller 和 HorizontalScroller 已移除,请改为使用 ScrollableColumn/Row。Modifier.drawBackground 已移除,请使用 Modifier.background(I73b0d、b/163019183)
- 从 LazyItemScope 中移除了标记为已废弃的 fillMax* 修饰符,因为它们增加了为并非 LazyColumnFor 直接子项的项正确添加此类修饰符的难度 (Ifa78d)
- 添加了 LazyColumn/LazyRow 实现作为 DSL (I93cc6)
- Constraints 现已成为内联类 (I88736)
- 添加了使用 fillMaxWidth、fillMaxHeight 和 fillMaxSize 修饰符调整布局尺寸以使其占满一小部分可用空间的功能。(I945bb、b/161562591)
bug 修复
- 向 SelectionContainer 添加了修饰符参数(I4aada、b/161487952)
- 向 SemanticsPropertyKey 添加了 mergePolicy lambda。此 lambda 可用于为 mergeAllDescendants 语义合并定义自定义政策。默认政策为:如果已有父项值则使用父项值,否则使用子项值。(Iaf6c4、b/161979921)
- PlacementScope.placeAbsolute()已重命名为- PlacementScope.place(),以前的- PlacementScope.place()已重命名为- PlacementScope.placeRelative()。因此,- PlacementScope.place()方法将不再自动在从右到左的上下文中镜像位置。如果需要执行此镜像,请改用- PlacementScope.placeRelative()。(I873ac、b/162916675)
- 移除了已废弃的 FilledTextField 组件。请改用 TextField 获取已填充文本字段的 Material Design 实现。(I5e889)
- 为 LinearProgressIndicator 添加了 backgroundColor 参数,并从 CircularProgressIndicator 中移除了内部内边距。新增了 ProgressIndicatorConstants.DefaultProgressAnimationSpec,在值之间添加进度动画时,可将其用作默认的 AnimationSpec(If38b5、b/161809914、b/161804677)
- 为清楚起见,现已废弃 state { ... }可组合项,取而代之的是对remember { mutableStateOf(...) }的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的by mutableStateOf()模式相一致。(Ia5727)
- 将 RRect 重命名为 RoundRect,以使其更适合 Compose 命名模式。创建了与 RRect 类似的函数构造函数,并废弃了 RRect 函数构造函数 (I5d325)
- 移除了 onChildPositioned 和 OnChildPositionedModifier。开发者应改为在子布局上使用 onPositioned 和 OnPositionedModifier。(I4522e、b/162109766)
- IntSize 现已成为内联类 (I2bf42)
- 长按空白区域可进行编辑。(Ib1e5b)
- 点按文本后将隐藏 FloatingToolbar。(If4525)
- 更新所选内容时将隐藏 FloatingToolbar。(I8444c)
- 进行模糊处理时取消选择。(I781a2)
版本 0.1.0-dev16
2020 年 8 月 5 日
发布了 androidx.compose.foundation:foundation:0.1.0-dev16、androidx.compose.foundation:foundation-layout:0.1.0-dev16 和 androidx.compose.foundation:foundation-text:0.1.0-dev16。版本 0.1.0-dev16 中包含这些提交内容。
API 变更
- 为 Lazy 列表的 itemContent 参数添加了 LazyItemScope。它提供了用于填充父项最大尺寸的修饰符,解决了以下用例的问题:该项应该填充视口,但因为该项是使用无限约束测量的,致使常规的 Modifier.fillMaxSize() 不起作用。(Ibd3b2、b/162248854)
- 将 Dialog 移至 UI (I47fa6)
- 添加了 LazyColumnForIndexed/LazyRowForIndexed - LazyColumnFor/LazyRowFor 的版本,用于在 itemCallback 中同时提供索引和项。这在您除了当前项之外还需要了解当前索引时非常有用。(I65ff3)
- Modifier.deternimateProgress 已重命名为 Modifier.progressSemantics (I9c0b4)
- LazyColumnItems 已重命名为 LazyColumnFor。LazyRowItems 已重命名为 LazyRowFor (I84f84)
- 为遵循最佳实践,添加了一些标记/注解。(I66b20)
- foundation.shape.corner 软件包已扁平化为 foundation.share(I46491、b/161887429)
- 为 LazyRowItems/LazyColumnItems 添加了 сrossaxis gravity 参数。LazyRowItems/LazyColumnItems 现在支持封装内容行为。(Ib39fc)
- ZoomableState 已重命名为 ZoomableController。已为 smoothScale 添加自定义曲线支持。已添加 enabled和onZoomStarted功能 (If8b8f)
- Material FilledTextField 已重命名为 TextField,且基础 TextField 已重命名为 BaseTextField,您可轻松寻找并使用所需的最简单的 API(Ia6242、b/155482676)
- 移除了之前已废弃的 AdapterList,请改为使用 LazyColumnItems (I12b9b)
- Modifier.drawBackground 已重命名为 Modifier.background (I13677)
- 移除了旧的 ConstraintLayout DSL。ConstraintSet2 已重命名为 ConstraintSet。(If58d1、b/162450908)
- 添加了 Modifier.absoluteOffset() 和 Modifier.absoluteOffsetPx()。与偏移修饰符不同,绝对偏移修饰符不会在从右到左的上下文中自动镜像。(I3aa21)
- Row和- Column现在属于内联函数,其使用开销将显著降低。(I75c10)
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,并移除了未使用的方法
 
- 添加了 MonotonicFrameAnimationClock,您可将 MonotonicFrameClock 用作 AnimationClockObservable,以消除基于协程的新时钟与仍使用基于旧回调的时钟的 API 之间的差异。 - 现在,ManualAnimationClock 的 MonotonicFrameClock 等效项是 ManualFrameClock。(I111c7、b/161247083) 
- 移除了 - SemanticsNodeInteraction.performPartialGesture。请改用- SemanticsNodeInteraction.performGesture。(Id9b62)
- SemanticsNodeInteraction.getBoundsInRoot()已重命名为- SemanticsNodeInteraction.getUnclippedBoundsInRoot()(Icafdf、b/161336532)
- 更新了 API 对从右到左布局的支持。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3) 
- 已废弃 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的 - Modifier.padding().background() + anotherModifier(Iedd58、b/161529964)
- 添加了 - isFocused()和- isNotFocused()SemanticsMatcher。(I0b760)
- 添加了 RemeasurementModifier。用户可以通过它同步重新测量布局。一般而言,您永远也不需要它,因为重新测量/重新布局会自动发生,但是在 LazyColumnItems 内,滚动期间需要使用它。(I5f331、b/160791058) 
- 按照最新准则,isSystemInDarkTheme 现在会始终考虑系统级深色主题设置,并会忽略 Android Q 之前版本中的省电状态。(I0c10c) 
- 已废弃 OnChildPositioned,改为在子布局上使用 OnPositioned。(I87f95、b/162109766) 
- AndroidComposeTestRule 已重命名为 createAndroidComposeRule。(I70aaf) 
- 添加了用于获取 TextLayoutResult 的无障碍操作(I9d6e6) 
版本 0.1.0-dev15
2020 年 7 月 22 日
发布了 androidx.compose.foundation:foundation:0.1.0-dev15、androidx.compose.foundation:foundation-layout:0.1.0-dev15 和 androidx.compose.foundation:foundation-text:0.1.0-dev15。版本 0.1.0-dev15 中包含这些提交内容。
如需使用 Compose 的 0.1.0-dev15 版本,您需要完成以下操作:
依赖项
- 如需使用 Compose 的 0.1.0-dev15版本,您需要根据上面的声明依赖项部分给出的新代码段来更新依赖项。
API 变更
- 与 ScrollableColumn/ScrollableRow 中的新参数类似,LazyColumnItems/LazyRowItems 现在也有参数 contentPadding,能为裁剪后的内容添加内边距,这项操作只通过修饰符参数是无法完成的。此外,该参数还可以仅在第一项内容之前/最后一项内容之后添加间距。(Ibc24e)
- 文本字段中的 onFocusChange 回调已重命名为 onFocusChanged (Ida4a1)
- 已废弃 VerticalScroller 和 HoriziontalScroller。请使用 ScrollableColumn 和 ScrollableRow 实现内置的 Column/Row 行为和参数体验,或者对您自己的元素使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同样,ScrollerPosition 也已废弃,取而代之的是 ScrollState(I400ce、b/157225838、b/149460415、b/154105299)
- 重新设计了 Modifier.draggable 和 Modifier.scrollable API。移除了 DragDirection,取而代之的是 Orientation。可滚动项必需的 State 已简化。ScrollableState 已重命名为 ScrollableController(Iab63c、b/149460415)
- 单值语义属性现在使用调用样式。例如,“semantics { hidden = true }”现在写为:semantics { hidden() }。(Ic1afd、b/145951226、b/145955412)
- 现在,RoundedCornershape 和 CutCornerShape 使用的角尺寸可以大于 50%(Id2340、b/160400213)
- 将 Image 可组合项的默认 ContentScale 参数从 Inside 改为了 Fit。这样做是为了在布局尺寸大于 Painter 的固有尺寸时让底层 Painter 随着行为放大,同时保持宽高比不变。如果只使用固有尺寸来计算可组合项的大小,那么此方法更符合在不影响默认行为的情况下为 Image 提供固定尺寸的预期。(I40ae3、b/159838006)
- 在顶级 API 中使用 AnimationSpec(而非 AnimationBuilder)来阐明静态动画规范的概念;- 改进了过渡 DSL:创建补间动画、弹簧动画等 AnimationSpec 时无需再指定 lambda 要求,而是直接接受构造函数参数;- 提高了 AnimationSpec 的整体易用性:开放构造函数,而不是依赖于构建器;- 将关键帧和补间动画的时长和延迟时间改为了 Int 类型的值。这样就能消除不必要的类型转换和方法重载(同时支持 Long 和 Int 两种数据类型)。(Ica0b4)
- 移除了 Clickable,改为使用 Modifier.clickable (I84bdf)
- 添加了 LazyRowItems,即 LazyColumnItems 的水平滚动模拟 (Ibbcf7)
- 引入了低级别无状态动画 API。这些 API (I63bf7)
- 废弃了 androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue。还废弃了使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项。请改为使用 androidx.ui.input.TextFieldValue(I4066d、b/155211005)
- 将使用的 IntPx 替换为了 Int。将 IntPxPosition 替换为了 IntOffset。将 IntPxSize 替换为了 IntSize。(Ib7b44)
- 移除了 androidx.ui.foundation.shape.RectangleShape;请改用 androidx.ui.graphics.RectangleShape(I94939、b/154507984)
- 为了整合用于表示大小信息的类的数量,我们对 Size 类(而非 PxSize)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的宽度和高度。(Ic0191)
- 为了整合用于表示位置信息的类的数量,我们对 Offset 类(而非 PxPosition)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的 x 轴和 y 轴偏移量。(I3ad98)
- 添加了 Modifier.zoomable 以实现“双指张合即可缩放”功能 (Id5d63)
- 已废弃 Toggleable 组件,现改用 Modifier.toggleable(I35220、b/157642842)
- 已废弃 MutuallyExclusiveSetItem,请改为使用 Modifier.selectable。(I02b47、b/157642842)
- TestTag 现已废弃,请改为使用 Modifier.testTag。(If5110、b/157173105)
- 向 Text 添加了 fontWeight 参数,之前因意外未添加该参数 (I56937)
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I19d02)
- VerticalScroller 现在提供开箱即用型 Column。HorizontalScroller 现在提供开箱即用型 Row。(Ieca5d、b/157020670)
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Iede0b)
- Modifier.indication 已添加到基础软件包中,可用于在自定义可交互元素上显示按压/拖动/其他指示元素(I8425f、b/155287131)
- 如果在 ScrollerPosition 上设置了 isReversed,VerticalScroller 和 HorizontalScroller 现在支持反向滚动 (I953bd)
- 支持向文本布局中添加可组合项。(I1373c)
- 整合了 CanvasScope 实现,因此现在只有 DrawScope 和 ContentDrawScope。CanvasScope 已重命名为 DrawScope。更新了 DrawScope 以实现 Density 接口并提供 LayoutDirection。删除了 ContentDrawScope 中的 DrawScope 子类。Painter 和 PainterModifier 已更新,不再由自身保留 RTL 属性,因为 DrawScope 已提供此信息,无需手动提供 (I1798e)
- 移除了已废弃的 DrawBackground API,改为在修饰符上使用 drawBackground 扩展 API。重构了颜色、笔刷和涂料 drawBackground 实现,以减少代码路径,并且不再要求在组合过程中创建修饰符。(I0343a)
- 更新了公开画布的更高级别的 Compose API,改为公开 CanvasScope。这样一来,用户便无需再维护自己的渲染对象。对于仍需要访问画布的使用方,可以使用 drawCanvas 扩展程序方法,该方法提供回调以向底层画布发出绘制命令。(I80afd)
- HorizontalScroller 和 VerticalScroller 现在使用保存的实例状态恢复其滚动位置。(Ia0fae、b/155075048)
- 移除了 FocusManagerAmbient。请使用 FocusModifier.requestFocus 来获取焦点。(Ic4826)
- 我们暂时移除了表格布局,之后将通过更新的 API 重新提供。(Id88a7)
- 创建了 CanvasScope API,用于封装 Canvas 对象以公开无状态的声明性绘图 API Surface。转换包含在自身的接收器范围内,大小信息也限定在相应的边衬区范围内。它不需要使用方维护自己的渲染状态对象来配置绘图操作。 - 添加了 CanvasScopeSample 并更新了演示版应用,以包含声明性图形演示 (Ifd86d) 
- ColoredRect 已移除,改用 Box 与 drawBackground 修饰符(I983c7、b/152753731) 
- 将光标颜色自定义项添加到 TextField (I6e33f) 
- 现在可以通过使用 onTextInputStarted 回调提供的 SoftwareKeyboardController 来隐藏/显示软件键盘(I8dc44、b/151860051) 
- 按照以下方式使用时,与 TextField 配合使用的 TextFieldValue 现在可以在重新创建 activity 后继续保留: - var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }(I5c3ce、b/155075724)
- 将常用参数添加到 Text()。如果您当前正在创建本地文本样式以传递少量此类参数(如 - Text(style = TextStyle(textAlign = TextAlign.Center))),则现在可以直接提供参数:- Text(textAlign = TextAlign.Center)(I82768)
- 已将 CoreTextField/TextField focusIdentifier 参数替换为 FocusNode,以便与聚焦子系统集成。(I7ea48) 
- TTextField 更新 - 在水平维度上,它会占用授予它的所有可用空间(Ib08df、b/154638552) 
- 添加了 InteractionState 和 Interaction,可让您更轻松地构建能够响应界面状态变化的组件(例如,按压和拖动)(Icfe25、b/152525426) 
- RectangleShape 从 androidx.ui.foundation.shape.* 移到了 androidx.ui.graphics.* (Ia74d5、b/154507984) 
- 将 API 中使用的所有可为 null 的 Color 替换为非 null 值,并使用 Color.Unset 代替 null (Iabaa7) 
- TextField API 更新 - onFocus 和 onBlur 回调已合并到带参数的单个 onFocusChange(Boolean) 回调中 (I66cd3) 
- 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 相同的结果(I45f09、b/152842521) 
- 移除了 ProvideContentColor,改为直接将 ContentColorAmbient 与 - Providers一起使用 (Iee942)
- 为文本添加了颜色参数,允许替换文本样式的颜色,而无需手动合并主题中提供的样式。(I41a66) 
- 改进了 DrawModifier API: - 确定了 draw() ContentDrawScope 的接收器范围
- 移除了 draw() 上的所有参数
- DrawScope 的接口与之前的 CanvasScope 接口相同
- ContentDrawScope 具有 drawContent() 方法(Ibaced、b/152919067)
 
- 已废弃 ColoredRect,请改用 - Box(Modifier.preferredSize(width, height).drawBackground(color))。(I499fa、b/152753731)
- 形状主题背景系统根据 Material Design 规范进行了更新。现在,您可以提供大多数组件使用的小型、中型和大型形状 (Ifb4d1) 
- 将修饰符以及运算符替换成了出厂扩展函数 (I225e4) 
- 将 Draggable 移到了修饰符(Id9b16、b/151959544) 
- 将 - Text从 androidx.ui.core 移到了 androidx.ui.foundation 软件包。(I87ce5)
- 为 Checkbox、Switch 和 Toggleable 添加了 - enabled参数 (I41c16)
- Ripple 现在是修饰符。在 Clickable 还未转换时,建议使用 - Clickable(onClick = { ... }, modifier = ripple())(Ie5200、b/151331852、b/150060763)
- 添加了 VectorPainter API,以取代矢量图形的现有 subcomposition API。subcomposition 的结果是 VectorPainter 对象,而不是 DrawModifier。废弃了之前的 DrawVector 可组合项,改为使用 VectorPainter。 - Image(Painter)API 已重命名为- PaintBox(Painter)。创建了 Vector 可组合项,其行为类似于 Image 可组合项,只不过使用 VectorAsset,而不是 ImageAsset(I9af9a、b/149030271)
- 创建了 Image 可组合项,除了在屏幕上绘制指定 ImageAsset 之外,还可用于处理尺寸调整/布局。这一可组合项还支持绘制采用固有尺寸的任何一种任意 Painter 实例,另外还支持指定的固定尺寸或最小尺寸 (Ibcc8f) 
- Button、FloatingActionButton 和 Clickable 现在有各自的 - enabled参数。Button 上的某些参数已重命名或重新排序。(I54b5a)
- Image 已重命名为 ImageAsset,以更好地区分 Image 数据和即将推出、用于布置布局及绘制内容的 Image 可组合项。 - 在 android.graphics.Bitmap、 - Bitmap.asImageAsset()的基础上创建了扩展程序方法,该方法可用于创建 ImageAsset 实例,帮助将传统 Android 应用开发与 Compose 框架结合起来。(Id5bbd)
- 移除了 DrawImage 可组合项。请使用 ImagePainter 在现有布局上绘制图像,或使用 SimpleImage 引入占用空间的 Image(I595e1、b/149827027) 
- Stack 组件支持从右向左的方向 (Ic9e00) 
- 添加了 Icon、IconButton 和 IconToggleButton,并移除了 AppBarIcon。您可以直接使用 IconButton 替换目前使用的 AppBarIcon,它们现在将有正确的触摸目标。查看示例了解使用信息,并查看“图标”了解可直接与这些组件一起使用的所提供 Material 图标。(I96849) 
- 移除了 DrawShape 可组合项,请改为使用 DrawBackground 修饰符。(I7ceb2) 
- 添加了 AdapterList,这是一个滚动列表组件,仅用于编写和布局可见项。目前已知问题包括只能处于垂直方向,无法完全处理其子项的所有更改情况。(Ib351b) 
- 已添加 Scrollable 组件,可用于创建自定义滚动条/列表 (I5fd37) 
- 已将 background 重命名为 DrawBackground 并设置为默认记住 (Ia0bd3) 
- 向 Box 添加了内边距、边框、形状和背景参数(I05027、b/148147281) 
- 添加了 Canvas 组件。这一可组合项需占用一定大小(由用户提供),并且您可以使用 CanvasScope 对其进行绘制 (I0d622) 
- 将 - Border修饰符重命名为- DrawBorder(I8ffcc)
- 添加了用于组合布局和绘图常用功能的 Box 组件。(I6e2a7) 
- 滚动条现在展示原生 Android 滑动动作行为。(I922af、b/147493715) 
- 用边框修饰符取代了 DrawBorder (Id335a) 
- Modifier.tag 已重命名为 Modifier.layoutId,以避免与 Modifier.testTag 混淆。(I995f0) 
- 创建 ConstraintLayout 准则时的 percent 参数已重命名为 fraction。(Ida2db) 
- 新增了对 ConstraintLayout 屏障外边距的支持。(I47ffe) 
- 修复了 ConstraintLayout 中的 RTL 支持。添加了 RTL 不感知 API。(I3b1c7) 
- 添加了针对 ConstraintLayout 的新 DSL。如需了解详情,请参阅相关示例。(Icaa9a) 
- 添加了 @ExperimentalLayout 注解。ConstraintLayout、FlowRow 和 FlowColumn 现在带有该标记,用于表明其 API 即将更改。(I412a8) 
- 添加了 - Modifier.padding(InnerPadding)(I94985、b/157133803)
- 移除了 Row 和 Column 中已废弃的 RowAlign、ColumnAlign。(If60d4、b/155858731) 
- 移除了已废弃的 LayoutTag(),请改用 Modifier.tag()。移除了已废弃的 Modifier.matchParent(),请改用 Modifier.matchParentSize()。(If8044) 
- 添加了 offsetPx 布局修饰符,可用于以像素为单位定义(动态)偏移。(I5af57) 
- 已废弃 AlignmentLineOffset 可组合项,请改用 relativePaddingFrom() 修饰符。移除了 CenterAlignmentLine 可组合项。(I60107) 
- 新增了 defaultMinSizeConstraints 布局修饰符,该修饰符仅在未指定传入的相应约束时才将尺寸约束设置为封装的布局(最小约束为 0,最大约束为无穷大)。(I311ea、b/150460257) 
- 已移除 Container,现改用 Box(Ibbc2b、b/151407926) 
- 移除了已废弃的 LayoutWidth/Height/Size 修饰符。(Ib0bc1) 
- 新增了偏移修饰符的默认参数值。(I37f06) 
- 新增了对称内边距修饰符。(I39840) 
- 移除了已废弃的 LayoutAspectRatio 修饰符。(I65a74) 
- 移除了已废弃的 LayoutAlign 修饰符。(I10877) 
- 修复了宽度和高度修饰符中导致封装布局在没有相反轴约束的情况下被测量的 bug。(I210b8、b/154797971) 
- 分别向 Row 和 Column 添加了 verticalGravity 和 horizontalGravity 参数。(I7dc5a) 
- 更新了 wrapContentWidth 和 wrapContentHeight,预计会显示垂直或水平 Alignment,而不是任意 Alignment。Gravity 修饰符已更新为接受垂直或水平 Alignment。更新了 Row、Column 和 Stack,以支持自定义的连续 Alignment。(Ib0728) 
- 允许使用任意值实现对齐实例化。添加了 1D 对齐。(Ia0c05) 
- EdgeInsets 已重命名为 InnerPadding。Material 按钮的 innerPadding 参数已重命名为 paddding。(I66165) 
- alignToSiblings 现在接受 Measured,而非 Placeable。(I5788d) 
- 为固有测量添加了尺寸调整修饰符,并废弃了用于此用途的组件。(I8295d) 
- 添加了对自定义 ConstraintLayout 子项尺寸的支持 (Idb1a5) 
- 移除了已废弃的 Wrap 和 Center 可组合项。(I29e23) 
- 添加了 LayoutModifier2,一个用于定义布局修饰符的新 API;废弃了 LayoutModifier (If32ac) 
- 现在可以在 Row 和 Column 之外访问 RowScope 和 ColumnScope 成员。(I3a641) 
- 已废弃 Container,现改用 Box。(I675ce、b/151407926) 
- 添加了用于偏移布局位置的 LayoutOffset 修饰符 (I0b8a3) 
- 对 Compose 布局中的 RTL 的初步支持 (Ia5519) 
- 更新了 LayoutAlign,使其不再填充可用空间 (I2b14f) 
- 移除了 AspectRatio 可组合项,改为使用修饰符。删除了过时的 FlexColumn、FlexRow 可组合项和间距修饰符 (Iec8a7) 
- 移除了 Row 和 Column 的 LayoutInflexible 修饰符 (I0d820) 
- 实现了拖动选择手柄,用于更改 TextField 的选择。(I27032) 
- 为 TextField 选择实现了 LongPressAndDrag。(I17919) 
bug 修复
- 废弃了 FocusModifier,改为使用 Modifier.focus、Modifier.focusRequester、Modifier.focusObserver。废弃了 FocusState 和 FocusDetailedState,改为使用 FocusState2(I46919、b/160822875、b/160922136)
- runOnIdleCompose已重命名为- runOnIdle(I83607)
- 多个测试 API 已重命名,变得更为直观。所有 findXYZ API 均已重命名为 onNodeXYZ。所有 doXYZ API 均已重命名为 performXYZ。(I7f164)
- 移除了之前已废弃的 Modifier.ripple。现在,可点击项使用涟漪作为默认指示元素(如果您的应用中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用可点击项即可免费获取涟漪指示元素。如果您需要自定义涟漪的颜色/大小/边界参数,您可以手动创建一个 RippleIndication,并将其作为指示参数传递给可点击项。(I663b2、b/155375067)
- 移除了过时的尺寸测试 API。(Iba0a0)
- 将 LayoutNode 变成了实验性 API (I4f2e9)
- 在整个 Compose 中实现了滚动方向锁定功能的版本 1。(I1ce7a、b/150289741)
- 弹出式窗口、对话框和菜单现在继承了上下文 MaterialTheme(Ia3665、b/156527485)
- 从 Layout() 函数的测量块中移除了布局方向参数。但是,可以通过测量范围对象在回调内提供布局方向 (Ic7d9d)
- 添加了 AbsoluteArrangement - 支持在 Row 内排列子项,而无需在 RTL 中自动镜像 (I3a1df)
- 已废弃 @Untracked 注解,替换为 @ComposableContract(tracked=false) (Id211e)
- 在此变更之前,如果存在 @Composable 函数,Compose 编译器插件会以非常复杂的方式拦截对该函数内构造函数的调用(I5205a、b/158123804)
- 添加了 viewModel()可组合项,让您可以创建 ViewModel 或获取已创建的 ViewModel,具体与其在 Activity 或 Fragment 中的工作原理类似 (I5fdd1)
- 已将 Radius 类重构为内联类。移除了伴生创建方法,改为使用带有默认参数的函数构造函数,从而让沿 y 轴的半径与强制要求的 x 轴半径参数相匹配。 - 更新了 DrawScope.drawRoundRect,以针对沿 x 和 y 轴的半径使用单个 Radius 参数,而不是 2 个单独的浮点数值 (I46d1b) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数。删除了整个 Px 类 (I3ff33) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I086f4) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Id3434) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I97a5a) 
- TextField 的光标具有闪烁的动画效果 (Id10a7) 
- 部分手势不再需要传递 GestureToken (Id7ae5) 
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I57bff) 
- Modifier.semantics 已取消废弃,以允许在高层级组件中使用。(I4cfdc) 
- 将 AnnotatedString.Builder.addAnnotationString 重命名为 addStringAnnotation。(I5059e) 
- 更新了 Alignment API 并添加了对绝对对齐的支持(不会在 Rtl 情境中自动镜像)(I38cd3) 
- Layout 和 LayoutModifier 子级可以使用其他布局方向进行测量。(Ibd731) 
- 向 ImagePainter 引入额外的可选 Rect 参数,以支持绘制底层 ImageAsset 的子部分 (I0ea9e) 
- 修复了删除项目时 AdapterList 中出现崩溃的问题(Ic64b0、b/153195921) 
- 我们更改了测量您在 setContent { } 块内放置的第一个布局的方式。之前,该布局必须填满整个 activity 屏幕,现在它的行为方式就像您将自己的布局放在堆栈中一样:它可以比屏幕小,并将放置在屏幕左侧顶部。如果您希望采用原来的行为方式,可以为您的布局应用 Modifier.fillMaxSize()。(Ie88a7、b/153453714) 
- ui-text-compose 模块已重命名为 ui-text。ui-text 现在包含 CoreText 和 CoreTextField 可组合项 (Ib7d47) 
- ui-text 模块已重命名为 ui-text-core (I57dec) 
- 将 ui-framework/CoreText、CoreTextField 可组合项移到了 ui-text-compose 下。您可能需要在项目中添加 ui-text-compose。(I32042) 
- runOnIdleCompose和- runOnUiThread现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)
- [Mutable]State 属性委托运算符移到了扩展,以支持 Kotlin 1.4 属性委托优化。调用方必须添加 import 才能继续使用 - by state { ... }或- by mutableStateOf(...)。(I5312c)
- DrawLayerModifier 和 drawLayer() 现在将 clipToBounds 和 clipToOutline 默认设置为 false。(I0eb8b、b/152810850) 
- LayoutResult 已重命名为 MeasureResult。(Id8c68) 
- 废弃了 Center 可组合项。应使用 LayoutSize.Fill + LayoutAlign.Center 修饰符或应用了适当修饰符的某个 Box 或 Stack 可组合项替换 (Idf5e0) 
- LayoutFlexible 已重命名为 LayoutWeight。“tight”参数已重命名为“fill”。(If4738) 
- 已将 DrawVector 从常规可组合函数更改成返回修饰符 drawVector(),该修饰符将绘制用作布局背景的矢量。(I7b8e0) 
- 将可组合函数 Clip 替换成了修饰符 drawClip()。当您仅需使用矩形裁剪层边界时,DrawClipToBounds 修饰符方便易用。(If28eb) 
- 将 DrawShadow 可组合函数替换成了 drawShadow() 修饰符。现在,阴影是作为 LayerModifier 的一部分绘制的。(I0317a) 
- androidx.compose.ViewComposer 移到了 androidx.ui.node.UiComposer。移除了 androidx.compose.Emittable,它与 ComponentNode 重复。移除了 androidx.compose.ViewAdapters,它们不再是受支持的用例。已废弃 Compose.composeInto,请改为使用 - setContent或- setViewContent。已废弃 Compose.disposeComposition,改用- setContent返回的- Composition的- dispose方法。androidx.compose.Compose.subcomposeInto 已移到 androidx.ui.core.subcomposeInto。ComponentNode#emitInsertAt 已重命名为 ComponentNode#insertAt。ComponentNode#emitRemoveAt 已重命名为 ComponentNode#removeAt。ComponentNode#emitMode 已重命名为 ComponentNode#move (Idef00)
- 废弃了 Wrap 可组合项。它可以替换为 LayoutAlign 修饰符或堆栈可组合项 (Ib237f) 
- 使布局方向可以从父布局节点传递到子布局。添加了布局方向修饰符。(I3d955) 
- Painter.toModifier 已重命名为 Painter.asModifier,因为新创建的修饰符会参考可在多个修饰符实例之间共享的原始 Painter (I7195b) 
- 支持 LayoutPadding 修饰符中从右向左的方向 (I9e8da) 
- Density 和 DensityScope 合并到了一个接口中。现在,您可以使用 DensityAmbient.current 代替 ambientDensity()。只需 with(density) 便可代替 withDensity(density) (I11cb1) 
- 移除了 ValueHolder 类。重构了 AnimatedValue 和 AnimatedFloat 类,使动画值字段抽象化,以便子类可以发现值更新。 - 为 AnimatedValue、AnimatedFloat 等添加了模型类。
- 添加了一组新的轻量级 @Composable API,用于在值之间添加动画。
- (I79530)
 
- Ambient API 重大更改。如需了解详情,请参阅日志和 - Ambient<T>文档(I4c7ee、b/143769776)
- 从 Placeable#get(AlignmentLine) 返回的对齐行 Int 位置值现在为非 null 值。如果缺少查询后的对齐行,则会返回 AlignmentLine.Unspecified。(I896c5、b/158134875) 
- 修复了在重新组合时导致崩溃的 ConstraintLayout bug。(Ibee5a、b/158164341) 
- withConstraints 尾随 lambda API 已更改。现在,除了两个参数之外,它还具有接收器范围,除了约束和 LayoutDirection 之外,还可以在 Dp 中提供 minWidth、maxWidth、minHeight 和 maxHeight 属性(I91b9a、b/149979702) 
- LayoutModifier2 已重命名为 LayoutModifier。(Id29f3) 
- Layout 和 LayoutModifier2 中的固有特性测量函数现在设有 IntrinsicMeasureScope 接收器,它为隐式传播的布局方向提供固有特性查询 API。(Id9945) 
- 废弃了 LayoutDirectionAmbient。如需读取由区域定义的布局方向,请使用 ConfigurationAmbient 上的 localeLayoutDirection (I851b1) 
- 为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。(Icacdd、b/152735784) 
- 废弃了 ParentData 可组合项。如果您只需标记布局子项,以便在测量块内识别它们,那么您应该创建可实现 ParentDataModifier 接口的修饰符,或使用 LayoutTag 修饰符。(I51368、b/150953183) 
- 添加了 OnPositionedModifier 和 OnChildPositionedModifier,以取代 OnPositioned 和 OnChildPositioned 可组合函数。(I2ec8f) 
- 禁止在 LayoutPadding 中使用负内边距。对于反向位置偏移,应改用 LayoutOffset。(Ifb5b1) 
- WithConstraints 获取了 LayoutDirection 参数 (I6d6f7) 
- 已将 - ComposeFlags.COMPOSER_PARAM标记更新为- true,这将改变 Compose 插件的代码生成策略。大体而言,这会导致 @Composable 函数通过其他合成参数生成,该参数会传递到后续 @Composable 调用,以便运行时正确管理执行。这是一项重大的二进制文件更改,但应当在所有获得许可的 Compose 使用情况中保留源代码级别的兼容性。(I7971c)
- 更改了 LayoutCoordinate,使 providedAlignmentLine 成为一个集合,而非映射,并使 LayoutCoordinate 实现了 get() 运算符,而非检索值。这样一来,修饰符可以更轻松地修改集合中的一个或多个值,而无需为每个修饰符创建新的集合。(I0245a) 
- LayoutCoordinate 不再有位置属性。在考虑 LayoutModifier、旋转或缩放时,位置属性没有意义。相反,开发者应使用 parentCoordinate 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个 LayoutCoordinate 的转换。 - LayoutCoordinate 会将 IntPxSize(而不是 PxSize)用于尺寸属性。Layout 将整数像素尺寸用于布局,因此所有布局尺寸都应使用整数,而非浮点值。(I9367b) 
- 改进了 Constraints 的 API Surface (I0fd15) 
- 添加了 TextDirection.Content (I48f36) 
- 调整了工具栏菜单,以正确显示复制、剪切和粘贴选项。(Id3955) 
- 为 TextField 选择添加了 FloatingToolbar。(Ie8b07) 
- TextDirectionAlgorithm 已重命名为 TextDirection (I75ce8) 
- TextDirection 已重命名为 ResolvedTextDirection (I3ff38) 
- 为 TextField 选择添加了 HapticFeedback。(I58050) 
- 为 TextField 选择添加了 Copy、Cut 和 Paste 方法。(Idb70b) 
- 删除了 TestTag 和 Semantics,改为使用 Modifier.testTag 和 Modifier.semantics(I15ff0、b/158841414) 
- 将 Locale 和 LocaleList 的软件包名称从 androidx.ui.text 更改为 androidx.ui.intl (I8132c) 
- API 更改: - AnnotatedString(builder: Builder)已重命名为- annotatedString(builder: Builder)。(Ia6377)
- API 更改: - AnnotatedString.Item已重命名为- AnnotatedString.Range。(I2d44d)
- 为文本相关操作添加了 Toolbar。(I49d53) 
- 新版 LifecycleOwnerAmbient 现已发布。现在,与 Compose UI 一起使用的 activity 应该可以扩展 androidx.activity.ComponentActivity(或 AppCompatActivity)。android.app.Activity 上的 setContent 现已废弃(Idb25a、b/153141084) 
- ui-android-text 软件包名称 (androidx.text) 已替换为 androidx.ui.text.platform,以便与 androidx 政策相符。(I42711) 
