Compose 基础

使用现成的构建块编写 Jetpack Compose 应用,并扩展基础以构建您自己的设计系统组件。
最新更新 稳定版 候选版本 Beta 版 Alpha 版
2024 年 11 月 13 日 1.7.5 - - 1.8.0-alpha06

结构

Compose 是 androidx 中 7 个 Maven 组 ID 的组合。每个组包含一组目标功能子集,每个子集都有自己的一套发行说明。

此表解释了这些组并链接到每一组发行说明。

描述
compose.animation在 Jetpack Compose 应用中构建动画以丰富用户体验。
compose.compiler转换 @Composable 函数并使用 Kotlin 编译器插件启用优化。
compose.foundation使用现成的构建块编写 Jetpack Compose 应用,并扩展基础以构建您自己的设计系统组件。
compose.material使用现成的 Material Design 组件构建 Jetpack Compose UI。这是 Compose 的更高级别入口点,旨在提供与 www.material.io 中描述的组件相匹配的组件。
compose.material3

使用 Material Design 3 组件构建 Jetpack Compose UI,这是 Material Design 的下一代演进。Material 3 包含更新的主题和组件以及 Material You 个性化功能(如动态颜色),旨在与新的 Android 12 视觉风格和系统 UI 保持一致。
compose.runtimeCompose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。
compose.ui与设备交互所需的 Compose UI 的基本组件,包括布局、绘图和输入。

声明依赖项

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

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

Groovy

dependencies {
    implementation "androidx.compose.foundation:foundation:1.7.5"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.foundation:foundation:1.7.5")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

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

创建新问题

有关更多信息,请参阅问题跟踪器文档

版本 1.8

版本 1.8.0-alpha06

2024 年 11 月 13 日

androidx.compose.foundation:foundation-*:1.8.0-alpha06已发布。版本 1.8.0-alpha06 包含这些提交

API 更改

  • 添加了stylusHoverIcon修饰符。(Iff20ab/331289114
  • 已弃用AnchoredDraggableStateconfirmValueChange。不应在活动锚集中禁止锚,而不是否决状态更改,并且应使用OverscrollEffect来指示请求的操作不可用。(Ia717f
  • 将自动填充管理器更改为接口。(I84914b/376080755
  • 添加了OverscrollEffect#withoutDrawingOverscrollEffect#withoutEventHandling API - 这些 API 创建提供的滚动效果的包装实例,分别不绘制/处理事件,这允许在与分派事件的组件不同的组件中渲染滚动。例如,禁用在懒惰列表内绘制滚动,然后在顶部/其他位置单独绘制滚动。(Idbb3db/266550551b/204650733b/255554340b/229537244
  • 在文本工具栏中添加自动填充支持。(Ie6a4c
  • 已弃用OverscrollConfigurationLocalOverscrollConfiguration,并添加了rememberPlatformOverscrollFactory以创建默认滚动实现的实例/自定义参数。要禁用滚动,请使用LocalOverscrollFactory provides null,而不是LocalOverscrollConfiguration provides null。要更改辉光颜色/填充,请使用LocalOverscrollFactory provides rememberPlatformOverscrollFactory(myColor, myPadding),而不是LocalOverscrollConfiguration provides OverscrollConfiguration(myColor, myPadding)。(Ie71f9b/255554340b/234451516
  • OverscrollEffect上的effectModifier属性更改为node: DelegatableNode,与其他 API 保持一致。(Ic0b46b/255554340
  • 删除了实验性的GlobalAssertions API。它的预期用途是运行可访问性检查,请改用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),然后查看您的文本大小如何适应可用空间!(Ice7e0b/139320827
  • 添加了OverscrollFactoryLocalOverscrollFactory API 以允许在层次结构中配置滚动。通过LocalOverscrollFactory提供的值将默认用于创建OverscrollEffect。要从当前提供的工厂创建和记住效果,请使用rememberOverscrollEffect()。(I51ca4b/255554340

API 更改

  • 引入CompositionLocal,可用于修改自动填充成功填充突出显示的色相。(I32092
  • 删除了ScrollableDefaults.overscrollEffect - 而是应该使用rememberOverscrollEffect。这将使用LocalOverscrollFactory提供的当前滚动实现创建实例。(I1651ab/255554340),(b/234451516
  • 引入了新的AutofillManager接口,可用于微调用户的自动填充流程,以及一个isSemanticAutofillEnabled标志以打开此新版本的自动填充。(I9d484
  • 删除了CombinedClickableNode。此实验性 API 暂时公开以解除性能工作的阻塞,但现在不再需要。相反,您应该像其他修饰符 API 一样直接使用Modifier.combinedClickable。(I4b658
  • horizontalScrollverticalScrollLazyColumnLazyRowLazyHorizontalGridLazyVerticalGridLazyHorizontalStaggeredGridLazyVerticalStaggeredGridHorizontalPagerVerticalPager添加了重载,支持指定自定义OverscrollEffect。提供的OverscrollEffect将接收事件,并在这些组件的边界内呈现。请注意,不支持两次绘制相同的OverscrollEffect - 因此您不能使用Modifier.overscroll单独绘制提供给其中一个组件的相同OverscrollEffect。将来将单独解决在这些组件的边界之外绘制滚动的用例。(I2dc42b/266550551b/234274772b/224572538b/353805117

版本 1.8.0-alpha04

2024年10月16日

androidx.compose.foundation:foundation-*:1.8.0-alpha04已发布。版本 1.8.0-alpha04 包含这些提交

API 更改

  • 添加了DelegatableNode#onDensityChangeDelegatableNode#onLayoutDirectionChange回调以允许在这些更改时更新节点状态。(I04f3eb/340662451
  • 段落和ParagraphIntrinsics现在采用应用于AnnotatedString的所有注释的列表,以前它只有一个SpanStyles列表。(I12f80
  • 引入了PointerInputModifierNode#touchBoundsExpansion,可用于扩大单个指针输入修饰符的触摸范围。(Iccf02b/335339283

错误修复

  • 修复了在某些情况下未正确考虑传递给AnchoredDraggableDefaults.flingBehavior的位置阈值的问题。(Ifdf0db/367660226
  • 修复了在正在进行的抛掷过程中从节点树中删除的嵌套可滚动的问题。现在这些节点将取消抛掷并使用剩余的速度正确发送onPostFling事件。我们还引入了标志NewNestedScrollFlingDispatchingEnabled来控制在出现回归情况下的行为。该标志将在 Beta 版之前删除。(I05c37b/371168883
  • 修复了传递给Modifier.anchoredDraggableOverscrollEffects接收二维增量而不是一维增量的问题。(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
  • 引入了标志DraggableAddDownEventFixEnabledI848d5
  • 引入了名为 Carousel 的新语义角色,以模拟 Pager 中的列表行为,供 a11y 服务使用。(Id354bb/354109776b/239672673
  • BasicText可组合项中删除了隐式graphicsLayer修饰符。添加了实验性ComposeFoundationFlags.RemoveBasicTextGraphicsLayerEnabled标志以能够恢复到旧行为。(Ie478d

  • 添加了 Modifier.recalculateWindowInsets() 以允许层次结构中的子项即使在父项未使用 consumeWindowInsets() 对齐它们时也能使用 insetsPadding。(I7f9e4

错误修复

  • detectDragGestures、可拖动项和可滚动项中实现手势拾取。现在,如果子可拖动项放弃了手势,则父项有机会拾取它。这允许更连续和集成的姿态处理。(Ic88fe
  • 更新可滚动项中的抛掷取消行为。现在,如果可滚动项抛掷并到达边界,它将正确地将抛掷速度传递给链中的下一个可滚动项,而不是继续驱动抛掷。(I9326a

版本 1.8.0-alpha02

2024年9月18日

androidx.compose.foundation:foundation-*:1.8.0-alpha02 已发布。版本 1.8.0-alpha02 包含 这些提交

API 更改

  • TextOverflow.StartEllipsisTextOverflow.MiddleEllipsis 现已可用,允许在单行文本的行首或行中放置省略号(I38913b/185418980

版本 1.8.0-alpha01

2024年9月4日

androidx.compose.foundation:foundation-*:1.8.0-alpha01 已发布。版本 1.8.0-alpha01 包含 这些提交

版本 1.7

版本 1.7.5

2024年10月30日

androidx.compose.foundation:foundation-*:1.7.5 已发布。版本 1.7.5 包含 这些提交

错误修复

  • 确保固定项在内容填充区域中不会被两次子组合。(Ic6224

版本 1.7.4

2024年10月16日

androidx.compose.foundation:foundation-*:1.7.4 已发布。版本 1.7.4 包含 这些提交

错误修复

  • 修复了导致文本字段中罕见崩溃的错误。(I475c6b/313010266
  • 删除了 ReusableContentHost 在 Lazy 布局项的根目录。这是“在停用的节点上调用测量”崩溃的潜在根本原因。(Id6e60

版本 1.7.3

2024年10月2日

androidx.compose.foundation:foundation-*:1.7.3 已发布。版本 1.7.3 包含 这些提交

错误修复

  • 修复了当 minLines 设置为非默认值时 BasicText 出现的内存泄漏。

版本 1.7.2

2024年9月18日

androidx.compose.foundation:foundation-*:1.7.2 已发布。版本 1.7.2 包含 这些提交

错误修复

  • 修复了可拖动项缺少按下事件的问题,该问题导致抛掷看起来比正常速度慢。

版本 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.clickableModifier.focusableModifier.indicationModifier.scrollableModifier.draggable 的性能已显着提高。作为此工作的一部分,除了内部更改外,还进行了以下 API 更改
    • 添加了一个新的 Indication API,IndicationNodeFactory。与以前的(现已弃用)rememberUpdatedInstance API 相比,这带来了更高性能的 Indication 实现。有关迁移信息,请参阅 developer.android.com
    • clickable / combinedClickable / selectable / toggleable 现在接受一个可为空的 MutableInteractionSource 参数。如果为 null,并且提供的 Indication 是一个 IndicationNodeFactory,则仅在需要时才能延迟创建 Indication,从而提高性能。如果您没有提升和使用 MutableInteractionSource,建议传递 null 而不是传递 remember { MutableInteractionSource() }
    • Indication#rememberUpdatedInstance 已弃用。它具有很高的不可避免的性能损失,并且阻止了其他优化。相反,您应该使用新的 IndicationNodeFactory API。
  • 使用 TextFieldStateBasicTextField 现在是稳定的,我们建议所有调用站点都开始从 BasicTextField(value, onValueChange) 迁移到 BasicTextField(TextFieldState)
  • ClickableText 已弃用。要向文本添加可点击链接,请在您的 AnnotatedString 中使用新的 LinkAnnotation 注释与 BasicText 配合使用。LinkAnnotation 允许根据链接状态(例如,聚焦、悬停)进行自定义样式。
  • 引入 ContextualFlowRowEnhanced FlowRow/Column 以及 MaxLinesOverflow。我们很高兴地宣布对实验性 FlowRowFlowColumn 进行增强,现在具有 maxLines 和溢出支持,以及 ContextualFlowRowContextualFlowColumn 的首次亮相。此更新旨在提供性能最佳的组件,其中 ContextualFlow* 非常适合大量使用少量 maxLines 配置和动态 +N “查看更多”按钮的项目,而 FlowRowFlowColumn 非常适合少量项目,少于 100 个项目。重要提示:为了在 FlowRowFlowColumn 中保持现有行为,其中所有项目都进行组合,而不管它们是否适合横轴最大值,请在初始化期间将溢出设置为 FlowRowOverflow.VisibleFlowColumnOverflow.Visible。探索 ContextualFlowRowSampleFlowRowSample 以了解这些新功能的示例。(Ib9135b/293577082
  • 项外观和消失动画支持已添加到 LazyColumnLazyRow 中。以前,可以添加 Modifier.animateItemPlacement() 修饰符以支持放置(重新排序)动画。我们弃用了此修饰符并引入了一个新的非实验性修饰符,称为 Modifier.animateItem(),它允许您支持所有三种动画类型:外观(淡入)、消失(淡出)和重新排序。(I2d7f7b/150812265
  • 使用官方 Android API(ScrollCaptureCallback)实现了 Compose 滚动容器中长屏幕截图的实验性支持。
  • NestedScroll 源拖动和抛掷正在被 UserInputSideEffect 替换,以适应这些源的扩展定义,这些源现在包括动画(副作用)以及鼠标滚轮和键盘(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 包含 这些提交

错误修复

  • 修复了一个回归问题,该问题在任何元素位于可聚焦(或可点击)且禁用的父级内部时发生崩溃。(b/317561689

版本 1.7.0-beta07

2024年8月7日

androidx.compose.foundation:foundation-*:1.7.0-beta07 已发布。版本 1.7.0-beta07 包含 这些提交

错误修复

  • 文本输入相关的 SemanticsNodeInteraction 函数 performTextReplacementperformTextInputperformTextClearance 现在将在它们在只读 TextFields 上被调用时抛出断言错误。(I4ae8f
  • 修复了超链接中的视觉故障。(I23311
  • 修复了 contentReceiver 修饰符与某些 IME 不起作用的问题。
  • 速度生成:防止在 Compose UI 和 Foundation 中传播 NaN 值。

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

错误修复

  • 修复了 SnapFlingBehavior 和 Pager 中对 Nan 值的处理。

版本 1.7.0-beta04

2024年6月26日

androidx.compose.foundation:foundation-*:1.7.0-beta04 已发布。版本 1.7.0-beta04 包含 这些提交

错误修复

  • 避免在测量非常大的文本行(例如 10k 个字符)时发生崩溃(8157ab
  • 修复了导致新 BasicTextField 中崩溃的非常大文本的测量问题(6b7575
  • 恢复了 Row/Column 测量中的行为更改,该更改在某些情况下会破坏 Text 的使用(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,用于配置类似于现有 LazyLists 实验性 API 的 LazyGrids 预取行为。这包括支持在嵌套的 LazyGrids 中预取项目。类似于 LazyListPrefetchStrategy,实现默认值是预取每个网格的前 2 个嵌套项目,但这可以通过新的 LazyGridPrefetchStrategy(nestedPrefetchItemCount)LazyListPrefetchStrategy#onNestedPrefetch API 进行配置。(I591c4
  • SemanticsProperties.Editable 重命名为 IsEditable,并将 SemanticsPropertyReceiver.editable 更改为 val isEditable。该属性现在是一个布尔值,并且始终由文本字段指定。(I8acd8
  • basicMarquee 默认值移动到 MarqueeDefaults 对象中。(I12ff6
  • basicMarqueedelayMillis 参数重命名为 repeatDelayMillis。(I12ff6
  • 更新了样式化链接的 API:将 TextLinkStyles 移动到 TextStyle 中,并从 material 中删除了 TextDefaultsI5477b

错误修复

  • LayoutCoordinates.introducesFrameOfReference 重命名为 LayoutCoordinates.introducesMotionFrameOfReference 以更好地反映其目的。重命名了基于该标志计算坐标的相关函数。(I3a330
  • MarqueeDefaults 属性中删除了“Default”。(I1d8a0
  • MarqueeDefaults 属性中删除了“Marquee”。(Iad4f4
  • TextStyle 类中删除了 TextLinkStyles。相反,TextLinkStylesLinkAnntation 构造函数和 AnnotatedString.fromHtml 方法的一部分(I90b2b
  • 修复了一个错误,该错误会导致 Pager 在已在边界处稳定时向边界轻弹时发生卡顿。(I9f373b/339171222
  • BTF2 现在具有正确的鼠标选择手势。(Ibe8c6

外部贡献

  • 重新提交“使 compose/measure 时间计算在预取中基于内容类型以提高准确性”(Iea622
  • 使 compose/measure 时间计算在预取中基于内容类型以提高准确性(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
  • 用非挂起回调替换了 onDragStartedonDragStopped。(I59de8

错误修复

  • 修复了一个错误,该错误会导致 Pager 在 contentPadding 大于传入约束时崩溃。Pager 现在会将 PageSize 返回的负值强制为 0。(Iba5d8b/314008560

版本 1.7.0-alpha08

2024年5月1日

androidx.compose.foundation:foundation-*:1.7.0-alpha08 已发布。版本 1.7.0-alpha08 包含这些提交

新功能

  • BasicTextFieldSelectionContainer 添加了右键上下文菜单,其中包含剪切、复制、粘贴和全选操作的项目。(If8c93Ia2b49I6f268

API 更改

  • LazyLayout 预取请求现在可以标记为紧急,这意味着我们预计下一帧需要此项,并希望忽略帧预算以确保提前执行更多工作(Id513f
  • isPositionedByParentWithDirectManipulation 重命名为 introducesFrameOfReference。请注意,它现在具有相反的效果,这意味着默认情况下,大多数 LayoutCoordinates 会引入参考系,并且只有在直接操作下放置时,该属性才会为 false。要仅查询引入参考系的那些坐标,请使用 positionInLocalFrameOfReference(...)。或从 LookaheadScope 中使用 positionInLocalLookaheadFrameOfReference。(Ifc5f7
  • onClicked 重命名为 onClick,位于 LinkInteractionListener 内部。(Iaa35c
  • 根据 API 委员会的反馈更改 getScrollViewportLength 的操作 lambda。(Ibc74a
  • 重命名了触控笔手写委托 API。(Ica45fb/327271923
  • TextInclusionStrategy.isInside 重命名为 isIncluded。使 Paragraph/MultiParagraph#getRangeForRect() 返回类型为非空。(I51f26

错误修复

  • SelectionContainer 中的所有文本上下文菜单中添加了“全选”。(Ib750eb/240143283
  • 修复了具有 reverseScrolling=true 的滚动容器的长截图捕获。(I7c59c
  • 修复了一个问题,即当接近状态边界时,AnchoredDraggableStatecurrentValue 会发生变化。(Iea30bb/333846848

外部贡献

  • PrefetchExecutor 重命名为 PrefetchScheduler 以更好地反映其职责。(Ib9154
  • 添加了对在嵌套的 LazyLists(例如渲染嵌套 LazyRowsLazyColumn)中预取项目的支持。此更改预计会减少这些 LazyLists 滚动期间的帧下降。实现默认值是预取前 2 个嵌套项目,但是可以通过新的 LazyLayoutPrefetchStrategy(nestedPrefetchItemCount)LazyListPrefetchStrategy#onNestedPrefetch API 控制此行为。(I51952

版本 1.7.0-alpha07

2024年4月17日

androidx.compose.foundation:foundation-*:1.7.0-alpha07 已发布。版本 1.7.0-alpha07 包含这些提交

新功能

  • 添加了一个 TextDefaults 对象,其中包含用于构建 LinkAnnotation 和解析 HTML 标记字符串的方法,这些方法将 MaterialTheme 应用于链接。(I98532b/139312671
  • 项目出现和消失动画支持已添加到 LazyVerticalGridLazyHorizontalGrid 中。以前,可以添加 Modifier.animateItemPlacement() 修饰符以支持放置(重新排序)动画。我们弃用了此修饰符,并引入了一个新的非实验性修饰符,称为 Modifier.animateItem(),它允许您支持所有三种动画类型:出现(淡入)、消失(淡出)和重新排序。(Ib7d12b/330510929
  • 项目出现和消失动画支持已添加到 LazyVerticalStaggeredGridLazyHorizontalStaggeredGrid 中。以前,可以添加 Modifier.animateItemPlacement() 修饰符以支持放置(重新排序)动画。我们弃用了此修饰符,并引入了一个新的非实验性修饰符,称为 Modifier.animateItem(),它允许您支持所有三种动画类型:出现(淡入)、消失(淡出)和重新排序。(I69bc9b/330511290

API 更改

  • 添加了 ContextMenuColors 和关联的 LocalContextMenuTheme ProvidableCompositionLocal。可以通过提供组合本地来修改文本字段和可选文本上上下文菜单的颜色。(Ifa154
  • 文本链接除了正常的样式、悬停和焦点外,还获得了按下状态样式选项。(I5f864b/139312671
  • 为手写手势引入 ViewConfiguration.HandwritingGestureLineMargin。支持 BasicTextField 的手写手势。(Ie6e13b/325660505
  • 删除了 DelegatableNode.scrollIntoView,用于 1.7 版本,因为我们没有时间完成其余相关 API 表面的稳定工作。此函数将在 1.8 中重新引入(I6cf61b/333421581b/332900232

  • 在查询布局坐标时,您现在可以使用 excludeDirectManipulationOffset 参数来排除由父布局设置的偏移量,这些父布局使用 Placeable.PlacementScope.withDirectManipulationPlacement 来放置其子元素。类似地,经常更改其子元素位置的布局现在可以使用 withDirectManipulationPlacement 来放置它们(例如,默认情况下实现的 Scroll)。这有助于基于 approachLayout 的动画更加直观,因为现在有机会区分要动画化的偏移量以及在决定动画其接近方式时要直接应用的偏移量。(I60ec7
  • LazyStaggeredGrid 引入 requestScrollToItem。对于每个测量传递,客户端现在可以选择通过调用 requestScrollToItem 来选择不基于键维护索引。除非调用 requestScrollToItem,否则这不会以任何方式更改现有行为。(I63983
  • 在 Pager 中引入 requestScrollToPage。对于每个测量传递,客户端现在可以选择通过调用 requestScrollToPage 来选择不基于键维护索引。除非调用 requestScrollToPage,否则这不会以任何方式更改现有行为。(Ic4213
  • LazyGrids 引入 requestScrollToItem。对于每个测量传递,客户端现在可以选择通过调用 requestScrollToItem 来选择不基于键维护索引。除非调用 requestScrollToItem,否则这不会以任何方式更改现有行为。(I0a7a0
  • ClickableText 已标记为已弃用。要向文本添加链接,请使用与您的链接相对应的 LinkAnnotation 创建一个 AnnotatedString,并将此 AnnotatedString 传递给 Text 可组合项(I34d4bb/323346994
  • UrlAnnotation 已弃用,请改用 LinkAnnotation.Url。如果您使用的是 Material 主题,则可以使用 TextDefaults 对象创建带有应用 Material 主题的注释(I8d180b/323346545
  • String.parseAsHtml 重命名为 AnnotatedString.Companion.fromHtmlI43dcd
  • parseAsHtml 方法添加了样式参数(linkStylefocusedLinkStylehoveredLinkStyle)和链接交互侦听器。使用 <a> 标记解析 HTML 标记字符串时,该方法将为每个此类标记构造一个 LinkAnnotation.Url,并将样式对象和链接交互侦听器传递给每个注释。(I7c977
  • LinkAnnotation 现在采用基于状态的样式参数和 LinkInteractionListener。将此注释添加到 AnnotatedString 以获取超链接。通过传递 focusedState 和/或 hoveredState,您可以定义链接在获得焦点和/或悬停时的视觉配置。(I81ce4b/139312671
  • 长屏幕截图的功能标志已删除。(I28648b/329128246
  • LazyColumn 现在将在长屏幕截图中正确呈现粘性标题。(I8d239b/329296635
  • 稳定了与新的 BasicTextField 一起引入的大多数剩余实验性 API。(I714e2
  • BasicSecureTextField 添加了 textObfuscationCharacter 参数,用于控制在模糊内容时使用的字符。(I0588b
  • NestedScroll 的拖动和抛掷来源正在被 UserInputSideEffect 替换,以适应这些来源的扩展定义,这些来源现在包括动画(副作用)以及鼠标滚轮和键盘(UserInput)。(I40579
  • 引入 LocalBringIntoViewSpec,这是一种依赖于平台的焦点滚动行为,应用于可滚动修饰符层。(I27aa5b/317453911
  • 删除了 TextFieldCharSequenceTextFieldBuffer.originalValuesTextFieldBuffer.originalTextTextFieldBuffer.originalSelection 替换。(I2c7d6
  • ImeOptions.hintLocales 现在不再可为空。如果您想传递一个空的 Locale 列表,请使用 LocaleList.Empty。(Ic5bc4
  • getOffsetFractionForPage 重命名为 getOffsetDistanceInPages。(Ia05e2

错误修复

  • InputTransformationsnext 连接时,它们的 KeyboardOptions 现在使用新的 KeyboardOptions.merge 方法通过各个选项正确合并。(Ie5304b/295951492
  • AnchoredDraggableStatetargetValue 现在不再考虑位置阈值。它现在有一个隐含的 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 包含 这些提交

新功能

  • 项外观和消失动画支持已添加到 LazyColumnLazyRow 中。以前,可以添加 Modifier.animateItemPlacement() 修饰符以支持放置(重新排序)动画。我们弃用了此修饰符并引入了一个新的非实验性修饰符,称为 Modifier.animateItem(),它允许您支持所有三种动画类型:外观(淡入)、消失(淡出)和重新排序。(I2d7f7b/150812265
  • LazyColumn/LazyRow 的客户端现在可以通过调用非挂起 LazyListState.requestToScroll 来选择退出在即将到来的测量传递中基于键维护索引。(I98036b/209652366
  • 为样式化字符串添加了 parseAsHtml 方法:它允许将用 HTML 标记标记的字符串转换为 AnnotatedString。请注意,并非所有标记都受支持,例如,您目前还无法显示项目符号列表。(I84d3d
  • 使用官方 Android API (ScrollCaptureCallback) 在 Compose 滚动容器中实现了对长屏幕截图的实验性支持。此功能为实验性功能,目前可能无法正确处理所有情况。因此,它目前默认处于禁用状态。要选择加入,请将 ComposeFeatureFlag_LongScreenshotsEnabled 标志设置为 true。此标志将在 1.7 Beta 版之前删除。(I2b055b/329296471
  • 引入新的 GraphicsLayer API,以在 GraphicsLayer 实例的放置和渲染方面提供更大的灵活性,并支持内在渲染功能,而无需与 Composable 实现协调以指定 GraphicsLayer 修饰符实例。

API 更改

  • 所有 KeyboardOptions 参数现在默认具有未指定的值。添加了 KeyboardOptions.merge 方法。
  • KeyboardOptions.autoCorrect 重命名为 autoCorrectEnabled 并将其设为可为空,其中 null 表示未指定任何值。(Ia8ba0b/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,用于支持在“伪造”文本输入字段上手写笔手写。(I9c09cb/327271923
  • KeyboardOptions.shouldShowKeyboardOnFocus 重命名为 showKeyboardOnFocus。(Ib4b7ab/295951492
  • 删除了 Modifier.contentReceiver 中的 hintMediaTypes 参数。开发人员已经被鼓励检查接收到的 TransferableContent 的媒体类型,因为它可能与配置的 hintMediaTypes 不兼容。(I82f99
  • 重新排序了 BasicSecureTextField 的参数。删除了 keyboardTypeimeAction 参数,转而使用完整的 KeyboardOptions 类,同时保留适合 BasicSecureTextField 的相同默认值。还删除了 scrollState 参数。(Ibbfa9
  • TextFieldState.text 的类型已从 TextFieldCharSequence 更改为仅 CharSequence。因此,添加了 TextFieldState.selection: TextRangeTextFieldState.composition: TextRange? 以直接从状态对象读取当前选择和组合值。

  • 移除了 TextFieldState.forEachTextValue。(Idb2a2)
  • 移除了 ClipboardManager.getClipMetadataClipboardManager.hasClip 函数。请使用 clipEntry.getMetadata() 读取当前剪贴板条目的元数据。还可以检查 ClipboardManager.getClip 的结果是否为 null,以了解剪贴板是否有当前剪贴内容。(I50498)
  • ClipboardManager.setClip 现在接受 null 以便清空剪贴板。(I7d2e9)
  • ReceiveContentListener 已转换为函数接口。同时,由于 ReceiveContentListener 现在是函数接口,因此移除了接受 lambda 的 Modifier.receiveContent 重载。
  • Modifier.receiveContent 重命名为 Modifier.contentReceiver。(I1e6af)
  • TransferableContent.consumeEach 重命名为 TransferableContent.consume。(I1e462)
  • rememberTextFieldState 已升级为稳定 API。(I37999)

错误修复

  • 修复了 BasicTextField(state) 变体无法与 CJK(基于组合)键盘配合使用的错误。(I54425)
  • 修复了在某些情况下,Modifier.dragAndDropTarget() 会引用过时数据,且 Modifier.Node 重用导致的错误。(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)
  • 移除了 TextFieldStateTextFieldBuffer 下与代码点相关的函数和属性。还从剩余的选择和组合相关 API 中移除了 inChars 后缀。(Ief7ce)
  • AnchoredDraggablecurrentValue 现在将在通过锚点时更新。使用 settledValue 来接收以前的 currentValue 语义,仅在锚定位置稳定时更新。进度现在作为函数(需要起点和终点)公开,而不是属性。(Ibe6e8, b/318707189, b/298271489, b/294991954)
  • BasicTextField(state)TextFieldStateInputTransformationOutputTransformationTextFieldLineLimitsTextFieldDecorator 已升级为稳定版。(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
  • hintLocales 添加到 KeyboardOptions 中,以使 TextFields 能够用特定语言环境提示 IME 以预设首选语言。(Id18c2)
  • 移除了使用 value: StringonValueChange: () -> String 参数的实验性 BasicTextField2BasicSecureTextField 重载。(I568b4)
  • InputTransformation 添加了一个可选的 applySemantics 函数,以影响应用于它的 BasicTextField2 的语义。(I74a2f, b/170648072)
  • 在此 CL 中,我们添加了 GetScrollViewportLength 语义操作,以便我们可以将有关 Compose 中正在滚动的组件的信息传递到 a11y 系统。此 CL 还应用了在 Foundation 可滚动列表中使用该属性的方法。(Ic5fa2)
  • BasicTextField2 重命名为 BasicTextField。(Ie5713)
  • FocusRequester.createRefs 现在是稳定的(I4d92c, b/261436820)
  • 引入了 DelegatableNode.scrollIntoView() 以允许修饰符节点直接发出 scrollIntoView 请求。(I2b3b7, b/299939840)
  • 引入了 DelegatableNode.requireView() 以允许修饰符节点获取当前的 Android View,而无需读取组合本地。(I40768)
  • 在上下文流行范围和上下文流列范围中引入上下文布局信息,其中包含行索引、位置以及最大宽度和高度的约束,以保持在指定位置。超过最大宽度/高度的项目可能会根据溢出设置流到下一行或被省略。(Id13f8, b/292114798)

错误修复

  • 修复了在某些条件下切换 TextFieldenabledreadOnly 属性会导致崩溃的错误。(Iae17b)

版本 1.7.0-alpha03

2024 年 2 月 21 日

androidx.compose.foundation:foundation-*:1.7.0-alpha03 已发布。版本 1.7.0-alpha03 包含这些提交。

API 更改

  • 引入了 DelegatableNode.requireLayoutCoordinates() 作为一种方法,用于获取 Modifier.Node 的当前 LayoutCoordinates,而无需重写 onPlaced 并自己将坐标存储在属性中。(Ia8657)
  • 引入了 DelegatableNode.currentLayoutCoordinates 作为一种方法,用于获取 Modifier.Node 的当前 LayoutCoordinates,而无需重写 onPlaced 并自己将坐标存储在属性中。(Iaebaa)
  • AnchoredDraggable 使用的 DraggableAnchors 进行了性能优化。(I89cff)
  • BasicTextField2androidx.compose.foundation.text2 包下的相关 API 已移动到 androidx.compose.foundation.text。(I9f635)
  • BasicTextField2 不再接受 CodepointTransformation 参数。请使用 BasicSecureTextFieldOutputTransformation。(Id34ff)
  • 添加了仅比较两个 AnnotatedStrings 的注释的方法。(I32659)
  • 引入 ContextualFlowRow 和增强的 FlowRow/Column,带有 MaxLinesOverflow。我们很高兴地宣布对实验性 FlowRowFlowColumn 进行增强,现在具有 maxLines 和溢出支持,以及 ContextualFlowRowContextualFlowColumn 的首次亮相。此更新旨在提供性能最佳的组件,其中 ContextualFlow* 非常适合大量使用少量 maxLines 配置和动态 +N 查看更多按钮的项目,而 FlowRowFlowColumn 非常适合少量项目,少于 100 个项目。重要提示:为了在 FlowRowFlowColumn 中保持现有行为,其中所有项目都已组合,无论它们是否适合交叉轴最大值,请在初始化期间将 overflow 设置为 FlowRowOverflow.VisibleFlowColumnOverflow.Visible。探索 ContextualFlowRowSampleFlowRowSample 以了解这些新功能的示例。(Ib9135, b/293577082)

错误修复

  • 光标动画不再在开和关状态之间请求帧。(Ia2253)
  • KeyboardOptions 的已弃用复制构造函数现在将正确复制所有属性。(If12de)

版本 1.7.0-alpha02

2024 年 2 月 7 日

androidx.compose.foundation:foundation-*:1.7.0-alpha02 已发布。版本 1.7.0-alpha02 包含这些提交。

API 更改

  • HorizontalPagerVerticalPagerPagerState 已升级为稳定版。(I67660, b/316966909)
  • 添加了 LocalTextLinkStyle 组合局部,允许更改应用中所有文本链接的样式。如果应用中使用了自定义主题,则应根据主题设置此组合局部。使用 Material 主题时,链接颜色默认设置为 Material 的主要颜色。(I7eb10
  • 引入了 receiveContent 修饰符,为开发者提供了一种在 Jetpack Compose 中 接收富文本内容 的方法。
  • receiveContentBasicTextField2 集成,以接受软件键盘或通过剪贴板粘贴操作提供的富文本内容。(I81b72
  • 在此更改中,我们正在分页器中用 TargetedFlingBehavior 替换 SnapFlingBehavior,以解锁其他用例并提供更大的灵活性。(I762ea
  • 在此更改中,我们正在使 Snapping API 稳定。我们还清理了一些测试代码,并为 Snapping 添加了更多示例。(Id8da9
  • 引入了 TargetedFlingBehavior,这是一种 FlingBehavior,允许传播有关正在进行的动画状态及其目标滚动偏移的信息。(I6a207

错误修复

  • BasicTextField2 现在在输入时会将光标保持在视野中,即使它已滚动出视野或由于输入而将要滚动出视野。(Ieb856b/237190748

外部贡献

  • 添加了一个用于配置 LazyList 预取行为的实验性 API。(I022a4

版本 1.7.0-alpha01

2024 年 1 月 24 日

androidx.compose.foundation:foundation-*:1.7.0-alpha01 已发布。版本 1.7.0-alpha01 包含这些提交。

新功能

  • 添加了一个新的 Indication APIIndicationNodeFactory。与之前的(现已弃用)rememberUpdatedInstance API 相比,这使得 Indication 实现的性能更高。有关迁移信息,请参阅 developer.android.com
  • clickable / combinedClickable / selectable / toggleable 现在接受一个可为空的 MutableInteractionSource 参数。如果为 null,并且提供的 IndicationIndicationNodeFactory,则 Indication 仅在需要时才被延迟创建,从而提高了性能。如果不提升并使用 MutableInteractionSource,建议传递 null。

API 更改

  • AnchoredDraggable 中引入 DecayAnimation,此更改为 AnchoredDraggable 添加了一个 decayAnimationSpec 参数,允许在稳定到其中一个锚点时使用衰减动画。此更改还包括将现有的 animationSpec 重命名为 snapAnimationSpec,以帮助理解每个规范的用例。
  • BasicTextField2 可用于实验性使用。它应该与 BasicTextField 的功能大致相同,行为应该已准备好投入生产。但是,API 目前仍处于实验阶段。在稳定之前,它将被重命名为 BasicTextField 并移动到同一个包中。
  • BasicTextField2 引入了 OutputTransformation API 的第一个草稿。此 API 替换了旧版 BasicTextFieldVisualTransformation 的大多数用例。但是它还没有完成,有些事情无法正常工作,但我们感谢您对 API 在您的用例中的可用性的任何反馈。(aosp/2708848
  • 引入了 LinkAnnotation,允许在文本中添加链接和可点击元素。链接功能尚未完成,并且即将进行更多 API 更改。
  • 引入了 receiveContent 修饰符,为开发者提供了一种在 Jetpack Compose 中 接收富文本内容 的方法。
  • receiveContentBasicTextField2 集成,以接受软件键盘或通过剪贴板粘贴提供的富文本内容。
  • KeyboardOptions.shouldShowKeyboardOnFocus 允许禁用 BasicTextField 在获得焦点时请求软件键盘的默认行为。
  • TextInputServiceLocalTextInputService 现已弃用。请改用 PlatformTextInputModifierNode 直接与平台 IME API 集成。(aosp/2862698
  • Indication#rememberUpdatedInstance 已弃用。它具有很高的不可避免的性能损失,并且阻止了其他优化。相反,您应该使用新的 IndicationNodeFactory API。

错误修复

  • BasicTextField 现在会在传递 VisualTransformation 时预先验证少量偏移映射。这有助于捕获导致后续测量或绘制过程中出现不可恢复异常的常见编码错误。通过在组合期间抛出异常,开发人员更有可能在开发过程中看到这些错误,从而避免生产崩溃。(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 包含 这些提交

错误修复

  • 修复了在某些条件下切换 TextFieldenabledreadOnly 属性会导致崩溃的错误。(Iae17b)

版本 1.6.5

2024 年 4 月 3 日

androidx.compose.foundation:foundation-*:1.6.5 已发布。版本 1.6.5 包含 这些提交

错误修复

版本 1.6.4

2024 年 3 月 20 日

androidx.compose.foundation:foundation-*:1.6.4 已发布。版本 1.6.4 包含 这些提交

错误修复

  • 在拖动的第一帧中移出文本布局边界的长按然后拖动选择手势不再崩溃。(Icdf90b/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 包含这些提交。

错误修复

  • 修复 AnimateContentSize 未正确重置的问题。(I07051
  • 修复了文本的 intrinsicHeight 在某些情况下会被过度缓存的问题。(3cd398b/217910352

版本 1.6.1

2024 年 2 月 7 日

androidx.compose.foundation:foundation-*:1.6.1 已发布。版本 1.6.1 包含这些提交。

错误修复

  • 修复滚动超过限制时的交错网格测量。(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 迁移。
  • 已添加应用和组件之间的拖放功能。请参阅 DragAndDropTargetModifier.dragAndDropSource 和其他 API 以开始使用。
  • Modifier.draggable2D 是新的修饰符,它允许轻松地进行 2d 拖动支持。请参阅 示例
  • AndroidExternalSurfaceAndroidEmbeddedExternalSurface 已添加,以便更轻松地在 Compose 中添加基于表面的组件。
  • PagersnapFlingBehaviour 中的各种 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 包含以下提交。

错误修复

  • 修复了使用无限约束测量非常大文本时导致的崩溃。(I1a7dfb/312294386
  • PlatformImeOptions 现在是具体类而不是接口。(If40a4

版本 1.6.0-beta02

2023年11月29日

androidx.compose.foundation:foundation-*:1.6.0-beta02 已发布。版本 1.6.0-beta02 包含以下提交。

错误修复

  • 修复了 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 表示。更新了文档,使其更清楚地说明 maximumFlingVelocity 的单位。(I8adc7
  • DragAndDropModifierNode 工厂中的 onDragAndDropStart 已重命名为 acceptDragAndDropTransfer

    acceptsDragAndDropTransfer 已添加到 dragAndDropTarget Modifier 中,用于从拖放会话中接收。如果对拖放会话感兴趣,此 lambda 会返回一个可行的 DragAndDropTarget。其他用于处理拖放事件的 lambda 已被此替换。

    添加了一个 DragAndDropTarget 工厂函数,用于从拖放会话中接收。(Iebf3a

  • AnchoredDraggable 中公开 startDragImmediately 可用于控制在使用时检测拖动手势。在小部件动画到目标锚点时设置它很有用。请参阅 示例。(Ie6d13b/285139987

  • Foundation 工具提示 API 现在为 @ExperimentalFoundationApiI30b0b

  • 已移除 DragAndDropInfo 作为类型,DragAndDropModifierNode.drag 现在采用 transferData、装饰大小和拖动装饰 DrawScope lambda 的参数。

    DragAndDropTarget 具有特定拖放事件的方法,而不是单个抽象方法。

    DragAndDropModifierNode 工厂函数中的 onDragAndDropEvent 已重命名为 onDragAndDropStart,以便更好地传达提供的 DragAndDropTarget 仅对给定的拖放会话有效。

    DragAndDropEventType 已被移除。(I645b1

  • PlatformTextInputModifierNode.runTextInputSession 重命名为 establishTextInputSession。(I03cd0

  • TextSubstitution 替换 OriginalText。(Ifa5a8

  • PlatformTextInputModifierNode.textInputSession 重命名为 runTextInputSession。(Ie9c6b

  • SubcomposeLayout(以及基于它的 LazyColumn 等布局)保留以在将来重用的子项被视为已停用。引入了新的 assertIsDeactivated() 测试 API 来测试此类节点。其余的测试 API 默认会过滤掉已停用的节点。(I2ef84b/187188981

  • Modifier.magnifierclippingEnabled 参数已重命名为 clip

  • Modifier.magnifiermagnifierCenter 参数变为可空,保留相同的默认行为。(I6aa66

  • Material SwipeToReveal API(用于卡片和芯片)现在依赖于基于槽的 API(如 Compose 所推荐)而不是基于数据类的实例来创建这些槽。这是一个重大更改,请参阅演示和示例代码以了解如何使用新的 API。(Ia8943

错误修复

  • PageSize.Fixed 实现 equals 和 hashcode。(Ie3edeb/300134276
  • 修复了一个错误,该错误会导致 BasicText 布局在 minWidth 更改且 minWidth 小于初始测量约束 maxWidth 时不收缩。(Idb19c
  • ArcLine 中添加对扫描渐变的渲染器支持。(I4d5bb
  • 修复与窗口插入更改相关的二进制兼容性问题。(Iee695
  • 删除 Material3 芯片/按钮的 Material 核心层,因为微基准测试表明没有它性能更好。(I55555

版本 1.6.0-alpha08

2023年10月18日

androidx.compose.foundation:foundation-*:1.6.0-alpha08 已发布。版本 1.6.0-alpha08 包含以下提交。

新功能

  • Modifier.draggable2D 是新的修饰符,可以轻松支持 2D 拖动。请参阅 示例Id95f5b/214412658

API 更改

  • Modifier.dragAndDrawSourceonDrawDragShadow lambda 已重命名为 drawDragDecorationDragAndDropInfo 的大小参数已重命名为 dragDecorationSize。(Id0e30b/303904810
  • BasicTextField2decorationBox 参数已重命名为 decorator。其类型也更改为等效的函数接口 TextFieldDecorator。(I23c1c

错误修复

  • 改进了有关 BasicTextField 的文档,涉及 onValueChange 要求。(I90fc9b/160257648

版本 1.6.0-alpha07

2023年10月4日

androidx.compose.foundation:foundation-*:1.6.0-alpha07 已发布。版本 1.6.0-alpha07 包含以下提交。

API 更改

  • 引入了 PlatformTextInputMethodTestOverride 用于编写自定义文本编辑器的测试。(Id159b
  • GraphicsSurface 重命名为 AndroidExternalSurfaceI11680
  • 添加了 DisableNonLinearFontScalingInCompose 临时标志以禁用非线性字体缩放。如果您需要时间清理测试,请在测试中设置 DisableNonLinearFontScalingInCompose = true。此标志将在 Compose 1.6.0-beta01 中移除。(Ic9486
  • 添加了 ColorListColorSet 集合,以避免分配。(I744bd
  • 此更改删除了 shortSnapVelocityThreshold,该阈值已转变为 SnapLayoutInfoProvider 实现的实现细节。(I65f6d
  • 添加了 dragAndDropSource 修饰符以启动拖放会话,以及 dragAndDropTarget 修饰符以从拖放会话中接收。(Ib7828b/286038936
  • 更新了 SnapPositionInLayout 文档和位置方法。在 SnapPositionInLayout 中的位置方法中引入了内容填充。(Id7938b/300116110
  • UndoState 添加到 TextFieldState 中,该状态提供撤消/重做用户所做更改的功能。(Icc024

错误修复

  • 修复了速度更改后 basicMarquee 不动画的问题。(Id2e77b/297974036

版本 1.6.0-alpha06

2023年9月20日

androidx.compose.foundation:foundation-*:1.6.0-alpha06 已发布。版本 1.6.0-alpha06 包含以下提交。

新功能

  • 用于 SurfaceViewTextureView 的新的 Composable 包装器:GraphicsSurface()EmbeddedGraphicsSurface()。这是一个实验性 API,可能会发生更改和修改。(I9ddb2

  • Modifier.magnifier() 现已成为稳定 API。这包括删除 MagnifierStyle,转而使用修饰符本身的内联参数。(I83becb/298381260b/262367109b/261438887

API 更改

  • ScrollScope 中引入了 updateCurrentPageupdateTargetPage,这些是允许通过 PagerState.scroll 自定义动画滚动的最后必要部分。(I9cad5b/267744105b/243786897
  • SnapFlingBehavior 中删除密度。所有 SnapLayoutInfoProvider 的实现都已有一种访问密度的方法,接收器范围可以删除,这将导致 SnapFlingBehaviorSnapLayoutInfoProviders 的实现都变得不那么复杂。(I153c3
  • 更多修饰符标记为稳定。(I56af1b/298046462
  • SnapLayoutInfoProvider 中删除了 SnapStepSize。应使用布局信息并通过捕捉偏移量的方法来计算。(If320c

行为变更

  • Compose 现在使用非线性字体缩放以获得更好的可读性和可访问性。当系统设置中字体缩放比例 > 100% 时,小文本的尺寸会正常增加,但较大的文本只会稍微增加。此外,以 SP 定义的行高会自动调整以保持与 100% 缩放比例的预期高度成比例。有关更多信息,请参阅 字体缩放最佳实践。(I11518

错误修复

  • 删除了对工具提示使用 rememberSaveable 的操作。(Icc131b/299500338

版本 1.6.0-alpha05

2023 年 9 月 6 日

androidx.compose.foundation:foundation-*:1.6.0-alpha05 已发布。版本 1.6.0-alpha05 包含这些提交。

API 更改

  • BasicSecureTextField 添加了重载,这些重载接受一个不可变的值和一个更改该值的回调,就像当前的 BasicTextField API 一样。(Ia4882
  • 添加 Modifier.preferKeepClear() 以将可组合项标记为优先避免在 API 33 及更高版本上与浮动窗口重叠。(Ib51d5b/297260115
  • ScrollViewRecyclerView 等 View 组件中的抛掷速度上限为 ViewConfiguration.ScaledMaximumFlingVelocity。Compose 现在包含了自己的 maximumFlingVelocity 版本,该版本现在应用于 Draggable。(Ibf974
  • 删除了已弃用的 PagerPagerState 重载。(Iea07e
  • BasicTooltipBox 添加到 compose.foundation 并更新了 PlainTooltipBoxRichTooltipBox 以使用 TooltipBox 以及新的 PlainTooltipRichTooltip 可组合项。(I79e1d

版本 1.6.0-alpha04

2023 年 8 月 23 日

androidx.compose.foundation:foundation-*:1.6.0-alpha04 已发布。版本 1.6.0-alpha04 包含这些提交。

API 更改

  • 添加 ReusableComposition 接口用于管理子组合的生命周期和重用。(I812d1b/252846775
  • Modifier.focusGroup 已提升为稳定 API。(I7ffa3
  • BasicTextField2 添加了重载,这些重载接受一个不可变的值和一个更改该值的回调,就像当前的 BasicTextField API 一样。(I3f2b8
  • GridItemSpan::currentLineSpan 现在是一个稳定的 API。(Icc29c
  • 接受 contentDescription 的 Canvas 现在是一个稳定的 API。(Ib3d29
  • ScrollState 中引入了 viewportSize,这是一种在测量发生后了解使用 ScrollState 的组件的 viewPort 大小的方法。(I8b85ab/283102682
  • 修复了 Pager 中预取行为与 Views 中的行为不匹配的问题。(I93352b/289088847
  • Modifier.consumeWindowInsets(PaddingValues) 现在是稳定的。
    • Deprecated Modifier.consumedWindowInsets API 现已删除。请改用 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

错误修复

  • 修复了当 readOnly 为 true 时,文本字段显示键盘并可编辑的问题。还修复了当 readOnly 从 true 更改为 false 且处于焦点状态时,键盘不显示的问题。(I34a19b/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 中单个已测量的页面的信息。(Iad003b/283098900
  • 其他注释以指定可组合项的允许输入(I51109
  • 添加了 SemanticsNodeInteraction.requestFocus 作为一种更方便且更易于发现的在测试中请求焦点的途径。(Ie8722
  • 完全重新设计了 PlatformTextInput* API。(I6c93ab/274661182b/267235947b/277380808
  • SoftwareKeyboardControllerLocalSoftwareKeyboardController 现在不再是实验性的。LocalSoftwareKeyboardController 现在也是一个正确的 CompositionLocal。(I4c364
  • Modifier.transformable 现在在 canPan 参数中提供了平移增量,以帮助确定平移的方向以允许或不允许它。(I692aab/266829800
  • 更新了修饰符 consumeWindowInsets 以扩展超类 AbstractComposeViewIacd74b/269479941

版本 1.6.0-alpha01

2023 年 6 月 21 日

androidx.compose.foundation:foundation-*:1.6.0-alpha01 已发布。版本 1.6.0-alpha01 包含这些提交。

新功能

  • 在 Foundation 中引入了新的 AnchoredDraggable API。它可用于构建可以在离散状态之间拖动的组件,例如模态底部工作表。此 API 替换了 Material 的 Swipeable API。(I4a2ed

API 更改

  • 支持 InputConnection#requestCursorUpdatesI0c69b
  • 引入了 scrollAnimationSpec 以允许自定义动画规范。将 BringIntoViewCalculator 更新为 BringIntoViewScroller。(Idb741
  • 添加 ResourceResolutionException 类型以包装在尝试加载位图资产时抛出的可抛出对象,并包含对无法加载的资产路径的描述。(I19f44b/230166331b/278424788
  • 添加了语义属性和操作以支持文本翻译。(I4a6bc
  • 引入了 BringIntoViewCalculator API,可用于自定义 Scrollable 等组件如何响应 bringIntoView 请求。更改了可滚动项的重载以可选地接受 BringIntoViewCalculator 的实例。(Iaf5af

错误修复

  • 添加了一个 lint 检查,如果在组合中创建 MutableInteractionSource 而没有记住它,则会发出警告,类似于创建可变状态 / Animatable 的 lint 检查。(I5daae
  • 添加了对鼠标选择的支持。基于触摸的选择将按单词扩展,并按字符缩小。(Ic0c6cb/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 包含以下提交。

错误修复

  • 修复了文本中的一个错误,该错误在某些情况下当语义无效时会导致崩溃。

版本 1.5.1

2023 年 9 月 6 日

androidx.compose.foundation:foundation-*:1.5.1 已发布。 版本 1.5.1 包含以下提交。

错误修复

  • 修复了当 readOnly 为 true 时,文本字段显示键盘并可编辑的问题。还修复了当 readOnly 从 true 更改为 false 且处于焦点状态时,键盘不显示的问题。(I34a19b/246909589

版本 1.5.0

2023 年 8 月 9 日

androidx.compose.foundation:foundation-*:1.5.0 已发布。 版本 1.5.0 包含以下提交。

自 1.4.0 以来重要更改

  • 许多基础修饰符,包括 Modifier.clickableModifier.draggableModifier.scrollable、布局修饰符等,已迁移到 Modifier.Node API,减少了初始组合的开销。
  • Pager 稳定性改进。许多错误已得到解决。
  • pageCount 参数现在位于 PagerState 中,而不是 Pager 本身。

版本 1.5.0-rc01

2023 年 7 月 26 日

androidx.compose.foundation:foundation-*:1.5.0-rc01 已发布。 版本 1.5.0-rc01 包含以下提交。

错误修复

  • 提供了一个可选检查,建议将 mutableStateOf() 调用迁移到其相应的原始类型专用类型。其 lint ID 为 AutoboxingStateCreation。之前,此检查默认情况下对所有项目启用。要在 Android Studio 的编辑器和项目的 lint 输出中查看此警告,请将其严重性从信息更改为警告(或更高),方法是在模块的 build.gradlebuild.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 以提供心率和每日步数。 SensorGateway 接口已从公共 API 中移除。(I55b84)

错误修复

  • 减少惰性列表/网格等测量期间的分配 (Iaf9e2)
  • 应用快照时减少分配 (I65c09)
  • 移除弹簧动画中的分配 (Ie9431)
  • 移除 TextLayout 中的分配 (I0fd11)
  • 移除指针速度跟踪中的多个分配 (I26bae)

版本 1.5.0-alpha04

2023年5月10日

androidx.compose.foundation:foundation:1.5.0-alpha04androidx.compose.foundation:foundation-layout:1.5.0-alpha04 已发布。 版本 1.5.0-alpha04 包含以下提交。

API 更改

  • 添加了使用完整参数列表的优化 TextStyle.merge(...)。(Iad234b/246961787)
  • 引入一个 SnapLayoutInfoProvider,可与 LazyGridState 一起使用。(I92134b/269237141b/260914964)
  • 为惰性交错网格项目范围添加了实验性 Modifier.animateItemPlacement()。您可以将其应用于项目以实现自动化位置更改/重新排序动画。(I4b62db/257034719)
  • GridCells.FixedSize 提升为稳定版。 FixedSize 定义了一个 LazyGrid,其中每个单元格在交叉轴上占用精确大小,剩余空间由交叉轴排列分配。(I8542f)
  • 为 Pager 引入接收器范围 PagerScope 和一个用于计算给定页面偏移量的实用程序函数。(If2577)
  • 在创建捕捉抛掷行为时引入 snapPositionalThreshold。使用此参数指定位置阈值以在 Pager 中进行短捕捉。(If8f7f)
  • SnapLayoutInfoProvider.calculateSnappingOffsetBounds 替换为 calculateSnappingOffset。在此新方法中,我们只需请求要捕捉到的下一个偏移量。边界的计算应在实现级别执行,因为这可能因捕捉发生方式的不同而异。(I923a4)
  • LazyStaggeredGrid API 已提升为稳定版。(I633a5)
  • Horizontal/VerticalPager 中移除 pageCount。这应该在状态创建时提供。更新 PagerStaterememberPagerState 以接受 pageCount。(Ieb52db/266965072)
  • Horizontal/VerticalPager 中移除 pageCount。这应该在状态创建时提供。更新 PagerStaterememberPagerState 以接受 pageCount。(Ifa3cbb/266965072)
  • 在 Pager 的 SnapFlingBehavior 中引入 shortSnapVelocityThreshold。(I7379eb/275579012)
  • 添加了 FlowRowScopeFlowColumnScope。(I54fe2)

错误修复

  • 当约束具有 minWidthminHeight 时,在 Text 上获取语义的调用不再崩溃。(Ibd072)
  • 修复了回归问题,即在未由 Dialog 可组合项创建的对话框内的文本字段中未显示键盘。(I82551b/262140644)

版本 1.5.0-alpha03

2023年4月19日

androidx.compose.foundation:foundation:1.5.0-alpha03androidx.compose.foundation:foundation-layout:1.5.0-alpha03 已发布。 版本 1.5.0-alpha03 包含以下提交。

此版本为 Compose 启用了新的文本渲染堆栈。新堆栈经过性能优化,您应该看不到任何可见的变化。

如果您确实看到了渲染文本的变化,可以通过设置 NewTextRendering1_5 = false 来调试以确认行为差异。设置此项将强制重新组合。请将任何行为差异作为错误提交。

调试标志将在 1.5 beta01 版本之前移除。(Iada23b/246960758)

API 更改

  • 使 FlowColumn/FlowRow 内联。(Idab37)

版本 1.5.0-alpha02

2023年4月5日

androidx.compose.foundation:foundation:1.5.0-alpha02androidx.compose.foundation:foundation-layout:1.5.0-alpha02 已发布。 版本 1.5.0-alpha02 包含以下提交。

API 更改

  • 添加了对 LazyGrid 中固定大小单元格的支持,并使用交叉轴排列进行排列。(I83ed9b/235121277b/267942510)
  • 添加了对 LazyStaggeredGrid 中固定大小通道的支持,并使用交叉轴排列进行排列。(I7d519)
  • AnnotatedString 中的 UrlAnnotation 现在可以通过辅助功能服务(如 TalkBack)打开。(If4d82b/253292081)
  • 添加了文本字段的 InsertTextAtCursor 语义操作。(I11ed5)
  • 文本相关的测试操作(例如 performTextInput)现在将直接使用语义操作请求焦点,而不是点击该字段。(I6ed05)
  • 添加了使用 FlowRow 中的 verticalArrangementFlowColumn 中的 horizontalArrangement 进行交叉轴间距/排列的支持。我们还删除了 FlowRow/FlowColumn 中的顶级 verticalAlignmenthorizontalAlignment。开发人员可以使用 Modifier.align 代替。这减少了 verticalAlignmentverticalArrangement 的命名约定之间的混淆。(I87b60b/268365538)

版本 1.5.0-alpha01

2023年3月22日

androidx.compose.foundation:foundation:1.5.0-alpha01androidx.compose.foundation:foundation-layout:1.5.0-alpha01 已发布。 版本 1.5.0-alpha01 包含以下提交。

API 更改

  • 文本和 BasicText 已重构以使用新的修饰符系统。这在许多情况下带来了显著的性能改进。不应该有任何可见的变化。(If1d17b/246961435)
  • 添加了 PerformImeAction 语义操作以在文本编辑器节点上调用 IME 操作。(Ic606fb/269633506)

错误修复

  • 更新了 Modifier.hoverable 的内部结构。只有在启用 hoverable 修饰符时,它才会显示在检查器中。(I82103)

版本 1.4

版本 1.4.3

2023年5月3日

androidx.compose.foundation:foundation:1.4.3androidx.compose.foundation:foundation-layout:1.4.3 已发布,无任何更改(仅版本号更新)。

版本 1.4.2

2023年4月19日

androidx.compose.foundation:foundation:1.4.2androidx.compose.foundation:foundation-layout:1.4.2 已发布。 版本 1.4.2 包含这些提交。

版本 1.4.1

2023年4月5日

androidx.compose.foundation:foundation:1.4.1androidx.compose.foundation:foundation-layout:1.4.1 已发布。 版本 1.4.1 包含这些提交。

版本 1.4.0

2023年3月22日

androidx.compose.foundation:foundation:1.4.0androidx.compose.foundation:foundation-layout:1.4.0 已发布。 版本 1.4.0 包含这些提交。

自 1.3.0 以来重要的更改

  • 将 Emoji 兼容性集成到 TextTextField 以及更低级别的 Paragraph 中。当配置 emojicompat 时,默认情况下启用它。
  • 可以使用 PlatformParagraphStyle 在特定的 Text 上配置 EmojiCompat
  • LazyStaggeredGrid 添加了整行跨度支持 (I28252)
  • ClickableText 添加实验性的 onHover (I6938f)
  • 引入了 runComposeUiTest 函数和 create*ComposeRule 函数的新实验性重载,这些函数接受 CoroutineContext 参数。该上下文将用于测试组合以及组合中的任何 LaunchedEffectrememberCoroutineScope() 调用。(I10614b/265177763
  • FlowRowFlowColumn 现在可用作 @ExperimentalFoundationApi,允许更灵活地基于行和列布局组件,如果主轴上没有足够的空间,则会换行。(I3a7b2
  • Modifier.basicMarquee() 作为实验性功能提供,用于显示带有滚动字幕效果的内容。(I2df44b/139321650

版本 1.4.0-rc01

2023 年 3 月 8 日

androidx.compose.foundation:foundation:1.4.0-rc01androidx.compose.foundation:foundation-layout:1.4.0-rc01 已发布。 版本 1.4.0-rc01 包含这些提交。

API 更改

  • 引入了新的低级 PlatformTextInputAdapter API,用于构建直接与平台 API 交互的自定义文本输入实现。(I58df4
  • LazyStaggeredGrid 添加了反向布局支持。(I3ef4a

错误修复

  • BasicTextFieldSetText 语义操作现在将使用与 IME 更新和测试函数(例如 performTextReplacement)相同的代码路径来更新文本缓冲区。
  • 文本测试函数 performTextClearanceperformTextReplacementperformTextSelection 现在使用 SemanticsActions。(I0807db/269633168b/269624358

版本 1.4.0-beta02

2023 年 2 月 22 日

androidx.compose.foundation:foundation:1.4.0-beta02androidx.compose.foundation:foundation-layout:1.4.0-beta02 已发布。 版本 1.4.0-beta02 包含这些提交。

API 更改

  • 添加了一个新的 Modifier.Node.onReset() 回调,允许您重置某些本地状态以正确处理 Layout 将被重用的情况(例如作为 LazyColumn 的一项)。修复了 FocusTargetModifierNode 以正确重置聚焦状态。(I65495b/265201972
  • DrawScope.drawTextParagraph.paintMultiParagraph.paint 方法添加了 BlendMode 参数,以便在 Canvas 上绘制文本时支持不同的混合算法。(I57508
  • 删除了 modifierElementOf() API。请改为直接从 ModifierNodeElement 扩展。(Ie6d21

错误修复

  • 调整选择句柄现在不能再选择部分字符。(Idedd1
  • 修复了在空 TextField 上按 ctrl+backspace 时发生的崩溃。(I0427fb/244185537

版本 1.4.0-beta01

2023 年 2 月 8 日

androidx.compose.foundation:foundation:1.4.0-beta01androidx.compose.foundation:foundation-layout:1.4.0-beta01 已发布。 版本 1.4.0-beta01 包含这些提交。

新功能

  • 自 1.3 以来,将 Emoji 兼容性集成到 TextTextField 以及更低级别的 Paragraph 中。当配置 emojicompat 时,默认情况下启用它。
  • 可以使用 PlatformParagraphStyle 在特定的 Text 上配置 EmojiCompat

API 更改

  • 添加了所有 LazyLayouts 中使用的 PinnableContainer API 的通用实现,以保留退出组合但仍需要处于活动状态的项。(If45a4
  • PinnableContainer.PinnedHandle.unpin() 已重命名为 release()I4667a

外部贡献

  • LazyListLayoutInfoLazyGridLayoutInfoLazyStaggeredGridItemInfo 添加了 mainAxisItemSpacing 属性(I52fad

版本 1.4.0-alpha05

2023 年 1 月 25 日

androidx.compose.foundation:foundation:1.4.0-alpha05androidx.compose.foundation:foundation-layout:1.4.0-alpha05 已发布。 版本 1.4.0-alpha05 包含这些提交。

新功能

  • LazyStaggeredGrid 添加了整行跨度支持(I28252
  • ClickableText 添加实验性的 onHoverI6938f
  • 引入了 runComposeUiTest 函数和 create*ComposeRule 函数的新实验性重载,这些函数接受 CoroutineContext 参数。该上下文将用于测试组合以及组合中的任何 LaunchedEffectrememberCoroutineScope() 调用。(I10614b/265177763

API 更改

  • OverscrollEffect 的预/后 API 合并到组合的“装饰器”applyToScrollapplyToFling 函数中。有关如何使用新的 API 形状实现过度滚动效果的示例,请参阅文档中更新的示例。(I8a9c4b/255554340
  • 更多内联/已弃用隐藏函数的类型/可空性(I24f91
  • TextStyle 中的 LineBreakHyphens API 已升级到稳定版本。(Ic1e1d

错误修复

  • 即使在禁用动画时,文本字段中的光标现在也将继续闪烁。(I95e70b/265177763
  • Modifier.basicMarquee 现在即使在系统设置中禁用了动画时也会进行动画处理。(I23389b/262298306b/265177763

外部贡献

  • TextInputSessionTextInputService 中的 notifyFocusedRect 方法不再弃用。(I23a04b/262648050

版本 1.4.0-alpha04

2023 年 1 月 11 日

androidx.compose.foundation:foundation:1.4.0-alpha04androidx.compose.foundation:foundation-layout:1.4.0-alpha04 已发布。 版本 1.4.0-alpha04 包含这些提交。

新功能

  • FlowRowFlowColumn 现在可用作 @ExperimentalFoundationApi,允许更灵活地基于行和列布局组件,如果主轴上没有足够的空间,则会换行。(I3a7b2
  • Modifier.basicMarquee() 作为实验性功能提供,用于显示带有滚动字幕效果的内容。(I2df44b/139321650

API 更改

  • FocusRequesterModifier 已弃用,建议使用 FocusRequesterNodeI7f4d7b/247708726b/255352203b/253043481b/247716483b/254529934b/251840112b/251859987b/257141589
  • 带有 variationSettingsAndroidFont 构造函数现在是稳定的 API,可用于创建新型字体描述符。(I5adccb/261565807

  • 引入了由惰性列表通过组合本地传播的 PinnableContainer api,允许固定当前项。这意味着当该项滚动到视图之外时,它不会被释放。例如,Modifier.focusable() 将通过此机制固定当前获得焦点的项。(Ib8881b/259274257b/195049010
  • 重写了可滚动内容响应 bringIntoViewRequesters 和可聚焦元素的方式,以更好地模拟这些操作的复杂性并处理更多边缘情况。(I2e5feb/241591211b/192043120b/237190748b/230756508b/239451114
  • 更多已弃用隐藏函数的返回类型可空性 (Ibf7b0
  • TextStyle 中添加了实验性的 TextMotion 以定义文本是 Static(默认) 还是动画。如果文本将通过动画进行缩放、平移或旋转,请使用 TextMotion.Animated。(I24dd7
  • 添加 TextFieldFocusModifier 以修复 Android 平台的焦点导航行为 (I00303
  • drawText 中的 maxSize: IntSize 参数替换为 size: Size,以与其他 DrawScope 函数保持一致。size 默认设置为 Size.Unspecified,这不会改变之前的默认行为。(Icd27d

错误修复

  • 调整了 SnapFlingBehaviour 中的吸附物理特性,使其感觉更自然。

已知问题

  • androidx.compose.foundation:1.4.0-alpha03 更新到 androidx.compose.foundation:1.4.0-alpha04 时,您可能会遇到 java.lang.NoSuchFieldError 错误。此处 是最初报告该问题的位置。已提交修复程序,并将包含在下一个 Compose 更新中。作为解决方法,请将您的 androidx.compose.materialandroidx.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-alpha03androidx.compose.foundation:foundation-layout:1.4.0-alpha03 已发布。版本 1.4.0-alpha03 包含这些提交。

API 更改

  • 在使用 Compose 规则的 UI 测试中,在 withFrameNanos 回调期间恢复的延续将不会分派,直到所有帧回调都完成运行。这与 Compose 在正常运行时的行为相匹配。但是,依赖于旧行为的测试可能会失败。这只会影响直接调用 withFrameNanoswithFrameMillis 且在传递给这些函数的回调之外具有逻辑的代码,并且可能需要将这些逻辑移动到回调内部。请参阅 此 CL 中的动画测试更改以获取示例
  • TestMonotonicFrameClock 构造函数和工厂函数添加了可选的 onPerformTraversals: (Long) -> Unit 参数,以便在 withFrameNanos 回调之后但在恢复调用者的协程之前运行代码。(Idb413b/254115946b/222093277b/255802670
  • 引入页面辅助功能操作:PageUpPageDownPageLeftPageRight。请注意,这些仅在 API 29 及更高版本中可用。(Ida4ab
  • 引入 HorizontalPagerVerticalPager,一种以 Pager 方式显示可组合项的方法。引入了 PagerState 来控制 Pager 以及查询有关 Pager 当前状态的信息。引入了 PageSize,一种控制 Pager 页面大小的方法,可用于创建类似轮播的 Pager。引入了 PagerSnapDistance,一种控制 Pager 抛掷行为中吸附方式的方法。(I01120
  • SnapFlingBehavior.performFling 中引入了重载,以帮助理解抛掷将在哪里停止。(I569f6
  • 删除了 OverscrollEffect#isEnabled。无需记住和设置此标志,只需在不需要显示过度滚动的情况下不向过度滚动效果分派事件(例如,如果 ScrollableState#canScrollForward/backward 都返回 false)。(I1a4b0b/255554340b/255557085
  • 添加了 ScrollableState#canScrollForwardScrollableState#canScrollBackward 以查询 ScrollableState 是否有空间在任一方向滚动(无论它是否在其范围的最小值/最大值)。默认情况下,为了与现有的 ScrollableState 实现向后兼容,此值设置为 true。使用者可以使用它向用户显示仍有空间滚动的指示,这也可以用于避免向在给定方向上没有空间滚动的 ScrollableStates 分派增量,以减少不必要的工作。(Idf1a0b/255557085
  • 添加了一个 Modifier API 来查询祖先滚动信息。(I2ba9db/203141462
  • Clickable 中使用,以在手势可能变成滚动事件时正确延迟按下交互。
  • 修复了 ClickablesScrollable ViewGroup 内使用时没有正确延迟波纹的问题。
  • 更新了抽屉和表单,以在手势可能变成滚动事件时正确延迟按下。
  • 更新 snapStepSize 的命名,使其与 SnapLayoutInfoProvider 中的其他方法保持一致。(Ife67c
  • EmojiCompat 添加到 Compose (Ibf6f9b/139326806
  • consumedWindowInsets() 重命名为 consumeWindowInsets(),将 withConsumedWindowInsets() 重命名为 onConsumedWindowInsetsChanged(),并将 Modifier 设为公开。(Ie44e1

错误修复

  • 修复了 Modifier.animateItemPlacement() 和惰性网格导致的崩溃问题。它发生在某些条件下,当新项的数量小于之前数量时。(I0bcacb/253195989

版本 1.4.0-alpha02

2022 年 11 月 9 日

androidx.compose.foundation:foundation:1.4.0-alpha02androidx.compose.foundation:foundation-layout:1.4.0-alpha02 已发布。版本 1.4.0-alpha02 包含这些提交。

API 更改

  • awaitFirstDownwaitForUpOrCancellation 现在接受 PointerEventPass 以获得更大的灵活性。(I7579ab/212091796
  • 撤销 Lazy* API 中的 beyondBoundCount API (I12197
  • 在 Lazy API 中引入参数以组合和放置视口外的项 (I69e89b/172029355
  • BasicTextBasicTextField 添加了 minLines 参数。它允许根据行数设置这些可组合项的最小高度 (I24294b/122476634

版本 1.4.0-alpha01

2022 年 10 月 24 日

androidx.compose.foundation:foundation:1.4.0-alpha01androidx.compose.foundation:foundation-layout:1.4.0-alpha01 已发布。版本 1.4.0-alpha01 包含这些提交。

API 更改

  • 添加了一种新的方法 awaitEachGesture() 用于手势检测器。它的操作类似于 forEachGesture(),但对手势的循环完全在 AwaitPointerEventScope 内进行,因此事件不会在迭代之间丢失。
  • forEachGesture() 已弃用,建议使用 awaitEachGesture(),因为它允许事件在手势之间丢失。(Iffc3fb/251260206

  • 添加了WindowInsets.imeAnimationSource 和 WindowInsets.imeAnimationTarget 来确定动画进度,并了解 IME 在动画完成后将位于何处。(I356f1b/217770337)

版本 1.3

版本 1.3.1

2022 年 11 月 9 日

androidx.compose.foundation:foundation:1.3.1androidx.compose.foundation:foundation-layout:1.3.1 已发布。 版本 1.3.1 包含这些提交。

错误修复

  • 修复了 BeyondBoundsLayout 中的性能问题(aosp/2255266)
  • ContentInViewModifier 只有在附加时才会读取布局坐标(aosp/2241316)

版本 1.3.0

2022 年 10 月 24 日

androidx.compose.foundation:foundation:1.3.0androidx.compose.foundation:foundation-layout:1.3.0 已发布。 版本 1.3.0 包含这些提交。

自 1.2.0 以来重要更改

  • 引入了 LazyVerticalStaggeredGridLazyHorizontalStaggeredGrid 的实验版本。
  • SnapFlingBehaviorrememberSnapFlingBehavior 和其他相应的 API 作为实验性添加。
  • Modifier.clickableModifier.toggleableModifier.selectable 现在如果使用键盘或遥控器上的方向键点击,则会显示波纹。

版本 1.3.0-rc01

2022 年 10 月 5 日

androidx.compose.foundation:foundation:1.3.0-rc01androidx.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-beta03androidx.compose.foundation:foundation-layout:1.3.0-beta03 已发布。 版本 1.3.0-beta03 包含这些提交。

API 更改

  • 添加选项以自定义文本中的换行。(I86907)
  • BringIntoViewResponder 现在能够在处理请求时获取请求的最新边界。(If86a5b/241591211)
  • 为实验性 Staggered Grid 引入对项目之间间距的支持(I10b82)
  • 为实验性 Staggered Grid 引入内容填充(I342ea)
  • TextMeasurer.measure 方法中将 size:IntSize 参数更改为 constraints: Constraints 以支持最小宽度约束。(I37530b/242707525)
  • 添加了 Modifier.withConsumedWindowInsets() 以获取已使用的 WindowInsets 以供 windowInsetsPadding 之外使用。
  • 添加了 MutableWindowInsets 以允许轻松更改 WindowInsets 而无需重新组合。(I7fd28b/237019262b/243119659)

版本 1.3.0-beta02

2022 年 9 月 7 日

androidx.compose.foundation:foundation:1.3.0-beta02androidx.compose.foundation:foundation-layout:1.3.0-beta02 已发布。 版本 1.3.0-beta02 包含这些提交。

API 更改

  • 实验性 StaggeredGrid 的初始版本(Ia48be)
  • FocusDirection.InFocusDirection.Out 重命名为 FocusDirection.EnterFocusDirection.Exit(Ia4262b/183746982)
  • 引入了一个 rememberSnapFlingBehavior 重载,它提供了一种在 LazyLists 中启用捕捉的快速方法。(Ifb48a)
  • snapFlingBehavior 工厂替换为具体的 SnapFlingBehavior 类。将 SnapLayoutInfoProvider 方法的范围限定为 Density,以便 API 用户更轻松地进行 Dp<->Px 转换。(I54a11)
  • 更新 LazyLayoutMeasureScope.measure 以返回可放置项列表,突出显示返回值的所需不变性。(I48b7c)
  • 引入了 SnapLayoutInfoProvider,它接受 LazyListState 以创建 SnapLayoutInfoProvider 的实例,该实例可用于为 LazyLists 启用捕捉 FlingBehavior。(I2dd10)

错误修复

  • 重构 AwaitPointerEventScope#awaitLongPressOrCancellation 以匹配其他 await 函数(I646e6)

版本 1.3.0-beta01

2022 年 8 月 24 日

androidx.compose.foundation:foundation:1.3.0-beta01androidx.compose.foundation:foundation-layout:1.3.0-beta01 已发布。 版本 1.3.0-beta01 包含这些提交。

API 更改

  • OverscrollEffect 中删除了 pointerPosition - 关心指针位置的效果可以使用 Modifier.pointerInput { }effectModifier 中获取当前指针位置。(I9f606b/241239306)
  • 公开 AwaitPointerEventScope#awaitLongPressOrCancellation 作为更复杂的姿态检测的额外构建块(I04374b/181577176)
  • 引入了 lazyListSnapLayoutInfoProvider 以在 Lazy 列表中启用捕捉。(I3ecdf)
  • 引入了 SnapFlingBehavior,这是一种启用列表捕捉的弹动行为。提供一个包含有关捕捉布局信息的 SnapLayoutInfoProvider 实例。(Ie754c)

版本 1.3.0-alpha03

2022 年 8 月 10 日

androidx.compose.foundation:foundation:1.3.0-alpha03androidx.compose.foundation:foundation-layout:1.3.0-alpha03 已发布。 版本 1.3.0-alpha03 包含这些提交。

API 更改

  • 资源字体现在支持设置字体变体设置 (API 26+)。(I900ddb/143703328)
  • DeviceFontFamilyNameFont 中支持可变字体(Ic1279b/143703328)
  • 删除了 PlatformTextStyleLineHeightStyle 的实验性注释。(I64bef)
  • VisualTransformation 提供的 OffsetMapping 返回无效索引时,文本字段现在将抛出更详细的异常。(Ie73f9b/229378536)
  • 引入实验性 API 以在 Lazy 布局之间共享项目提供程序逻辑。(Ic891c)
  • ScrollableDefaults.reverseDirection() 不再是实验性的。(Iba646)
  • 已弃用 SemanticsModifier.id 并将语义 ID 移至 LayoutInfo.semanticsId。(Iac808b/203559524)
  • checkScrollableContainerConstraints() 不再是实验性的。(I2c290)
  • Modifier.clipScrollableContainer() 不再是实验性的。(Ia2b44)
  • 已弃用 TextInputService.show|hideSoftwareKeyboard。请在应用代码中使用 SoftwareKeyboardController,在 IME 管理代码中使用 TextInputSession。(I14e4cb/183448615)

版本 1.3.0-alpha02

2022 年 7 月 27 日

androidx.compose.foundation:foundation:1.3.0-alpha02androidx.compose.foundation:foundation-layout:1.3.0-alpha02 已发布。 版本 1.3.0-alpha02 包含这些提交。

API 更改

  • DrawScope 上添加了 drawText 扩展函数,以提供一种在可组合项和在 DrawScope 上操作的修饰符(如 CanvasdrawBehind)上绘制多样式文本的方法。(I16a62b/190787898)

错误修复

  • 当文本字段处于聚焦状态但被禁用时,软键盘现在将被隐藏。(I6e3e4b/237308379)
  • InputEventChange 事件添加到速度跟踪器时,我们现在将考虑增量而不是位置,这将保证在所有情况下都能正确计算速度,即使目标元素移动(Icea9db/216582726b/223440806b/227709803)
  • 当可滚动项具有聚焦的子项时,现在将正确滚动以使聚焦的子项保持在视图中,即使其大小减小,即使大小正在动画化。(I80867b/230756508b/220119990)
  • 修复了 TextField 在选择处于活动状态时被清除并重新填充时发生的崩溃。(I1235bb/208655565b/214253689)

版本 1.3.0-alpha01

2022 年 6 月 29 日

androidx.compose.foundation:foundation:1.3.0-alpha01androidx.compose.foundation:foundation-layout:1.3.0-alpha01 已发布。 版本 1.3.0-alpha01 包含这些提交。

API 更改

  • 引入了 UrlAnnotation 注解类型和相关方法,以支持 TalkBackAnnotatedString 中链接支持。(I1c754b/231495122

错误修复

  • BasicTextFieldcursorBrush 现在可以在不重新启动光标计时器的情况下进行动画。(I812e6b/236383522

版本 1.2

版本 1.2.1

2022 年 8 月 10 日

androidx.compose.foundation:foundation:1.2.1androidx.compose.foundation:foundation-layout:1.2.1 已发布。版本 1.2.1 包含这些提交。

版本 1.2.0

2022 年 7 月 27 日

androidx.compose.foundation:foundation:1.2.0androidx.compose.foundation:foundation-layout:1.2.0 已发布。版本 1.2.0 包含这些提交。

自 1.1.0 以来的重要更改

  • LazyVerticalGridLazyHorizontalGrid 现在是稳定的。
  • 您现在可以为 Lazy 列表和网格中的项目指定内容类型。这将使组件能够更有效地重用元素。
  • Lazy 列表和网格现在具有 userScrollEnabled 参数,允许通过用户手势禁用滚动。
  • 添加了一个名为 LazyLayout 的新的实验性 API。它是我们在内部用来为 Lazy 列表和网格提供支持的 API。
  • OverscrollEffect API 作为实验性 API 引入。您可以定义自定义的过度滚动效果,以及向自定义可滚动容器添加标准平台过度滚动效果。
  • 嵌套滚动互操作性 API 已引入,以允许视图和 Compose 滚动参与者之间的互操作性。
  • 所有滚动容器都添加了鼠标和触控板滚动。

版本 1.2.0-rc03

2022 年 6 月 29 日

androidx.compose.foundation:foundation:1.2.0-rc03androidx.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-rc02androidx.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-rc01androidx.compose.foundation:foundation-layout:1.2.0-rc01 已发布。版本 1.2.0-rc01 包含这些提交。

API 更改

  • 引入了实验性的 OverscrollEffect 以允许自定义过度滚动效果,以及接受它的 Modifier.scrollable 重载。
  • 实验性的 LocalOverScrollConfiguration 已从 foundation.gesture 移动到 foundation 包中,并重命名为 LocalOverscrollConfigurationIf19fbb/204650733
  • Compose 库中的接口现在使用 JDK8 默认接口方法构建(I5bcf1
  • 引入了一个实验性 API checkScrollableContainerConstraints(),它允许检查我们是否嵌套了可滚动容器。当您通过 LazyLayout 创建自己的可滚动 Lazy 布局时,可以使用它。(Id6fabb/233352497
  • androidx.compose.foundation.lazy 包中删除了已弃用的 LazyVerticalGrid。新的稳定 API 位于 androidx.compose.foundation.lazy.grid 中(I73c76b/225192009

版本 1.2.0-beta03

2022 年 6 月 1 日

androidx.compose.foundation:foundation:1.2.0-beta03androidx.compose.foundation:foundation-layout:1.2.0-beta03 已发布。版本 1.2.0-beta03 包含这些提交。

API 更改

  • 添加了新的实验性 IntervalListMutableIntervalList。它允许通过多个区间来表示一些值的列表。当您想定义自己的 DSL(类似于 LazyColumn 使用的 DSL)时,它将非常有用,其中列表项可以通过多个 item/items 调用来定义。(I2d05eb/228580728

错误修复

  • 阐明了 WindowInsets.ime 的文档,说明早在 API 23 中就报告了 ime 内嵌,但仅在 30+ 上进行 *动画*。(Ia7fc0b/230756508
  • 当光标位于文本字段末尾时,按下向后删除键将不再崩溃。
  • DeleteSurroundingTextCommandDeleteSurroundingTextInCodePointsCommand 现在要求它们的构造函数参数为非负数。(Ica8e6b/199919707

版本 1.2.0-beta02

2022 年 5 月 18 日

androidx.compose.foundation:foundation:1.2.0-beta02androidx.compose.foundation:foundation-layout:1.2.0-beta02 已发布。版本 1.2.0-beta02 包含这些提交。

  • 以前不会更改 Text 或 TextField 布局大小的可下载字体解析不会重新绘制,导致字体显示过时。此错误修复确保文本布局始终触发重新绘制 (b/229727404)。(I1d49eb/229727404

版本 1.2.0-beta01

2022 年 5 月 11 日

androidx.compose.foundation:foundation:1.2.0-beta01androidx.compose.foundation:foundation-layout:1.2.0-beta01 已发布。版本 1.2.0-beta01 包含这些提交。

新功能

  • 这是 1.2 的第一个 Beta 版本!

API 更改

  • 添加了实验性的 BeyondBoundsInterval,当自定义实现的 LazyList 在可见边界之外布局项目时可以使用它(Ifabfbb/184670295
  • LineHeightBehavior 重命名为 LineHeightStyle
  • LineVerticalAlignment 重命名为 LineHeightStyle.Alignment
  • 重命名 LineHeightTrim 重命名为 LineHeightStyle.Trim
  • 删除了 LineHeightStyle 的默认构造函数值(I582bfb/181155707
  • LazyLayoutItemProvider 接口的可选项添加了默认值。(Iba8a0
  • LazyLayoutItemProvider API 中,我们不再使用工厂根据索引返回可组合的 lambda,而是使用了一个更简单的可组合函数 Item 来接受索引。(Id2196
  • LazyLayoutItemsProvider 重命名为 LazyLayoutItemProvider(I0638c
  • LazyLayoutItemsProvider.itemsCount 重命名为 itemCountId409c
  • TextStyleSpanStyle 添加了 Brush,以提供使用渐变颜色绘制文本的方法。(I53869b/187839528
  • trimFirstLineToptrimLastLineBottom 属性已从 LineHeightBehavior 更改为单个枚举:LineHeightTrimLineHeightTrim 有 4 个状态的值由两个布尔值定义:FirstLineTopLastLineBottom、Both 和 None(Ifc6a5b/181155707
  • TextStyleParagraphStyle 添加了 LineHeightBehaviorLineHeightBehavior 控制行高是否应用于第一行的顶部和最后一行的底部。它还定义了在 TextStylelineHeight)提供的空间中行的对齐方式。

    例如,可以通过 LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false) 获得类似于 CSS 定义的行为。

  • trimFirstLineToptrimLastLineBottom 配置仅在 includeFontPadding 为 false 时才能正常工作。(I97332b/181155707

  • 添加了实验性的 imeNestedScroll() 修饰符,以便开发人员可以通过滚动控制 IME。(I60759

错误修复

  • 修复了文本字段在聚焦时从组合中删除时不会隐藏键盘的回归问题。(I7a410b/230536793b/225541817
  • 当高度受限且无法容纳所有文本行时,支持省略号(Ie528cb/168720622
  • BringIntoViewRequester.bringIntoView 现在将始终挂起,直到请求完成或被更新的、不重叠的请求中断。重叠的请求将排队。(I43e7fb/216790855
  • 对于完全重叠的矩形的并发 BringIntoViewRequester.bringIntoView 调用,现在将仅满足较大矩形的请求。(I34be7b/216790855b/184760918
  • 已启用默认的 includeFontPadding。可以通过 TextStyle.platformTextStyle 属性关闭 includeFontPadding。在不久的将来,我们将更改默认行为,但在那之前,这使我们能够更好地集成行高改进 (aosp/2058653) 并解决 TextField 剪裁问题。(I01423b/171394808
  • Modifier.bringIntoViewRequester 不再使用 onGloballyPositioned。(I630f5

外部贡献

  • 如果我们在 Android 上垂直滚动,MouseInjectionScope.scroll(delta = someDelta) 现在会被反转(如果 someDelta 为正,它将向下滚动)(Ifb697b/224992993

版本 1.2.0-alpha08

2022 年 4 月 20 日

androidx.compose.foundation:foundation:1.2.0-alpha08androidx.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。(I380feb/156048036b/226441992
  • Paragraph 和 MultiParagraph 现在接受 Constraints 参数。目前传递 Constraints.maxHeight 没有任何作用,但将来可以进行一些计算,例如基于高度进行省略。(I6afeeb/168720622
  • SubcomposeSlotReusePolicy.getSlotsToRetain() 现在接受一个自定义的类似 MutableSet 的类,该类不允许在其中添加新项。(Icd314
  • PointerInputChange 中已弃用部分使用(向下或位置)。您可以使用 consume() 完全使用更改。您可以使用 isConsumed 来确定其他人是否已使用更改。
  • PointerInputChange::copy() 现在始终进行浅拷贝。这意味着,如果其中一个副本被使用,则 PointerInputChange 的副本将被使用一次。如果您想创建一个不受约束的 PointerInputChange,请改用构造函数。(Ie6be4b/225669674
  • 引入了新的实验性 LazyLayout API。这使您可以构建自己的组件,例如 LazyColumnLazyVerticalGrid。请注意,该 API 处于早期阶段,可能会在将来的版本中更改。(Iba2bcb/166591700
  • AndroidFont 现在将 typefaceLoader 作为构造函数参数。(I2c971
  • WindowInsets 伴随对象现在公开了可见性(无论它们是否与窗口相交,它们是否在屏幕上)以及如果它们在设备上可用但当前未激活,则它们可能具有的尺寸。(I65182b/217770337

版本 1.2.0-alpha07

2022 年 4 月 6 日

androidx.compose.foundation:foundation:1.2.0-alpha07androidx.compose.foundation:foundation-layout:1.2.0-alpha07 已发布。版本 1.2.0-alpha07 包含这些提交。

API 更改

  • 添加了一个 PinnableParent API,允许惰性布局的子项阻止当前组合的项被释放(Ibbdd0b/184670295
  • LazyListLayoutInfoLazyGridLayoutInfo 现在具有 beforeContentPaddingafterContentPadding 字段(I3b628b/200920410
  • 添加了 KeyboardType.Decimal 作为 Keyboard.Number 的替代方案,用于在 IME 中专门包含小数分隔符。(Iec4c8b/209835363
  • 添加新的字体描述符 Font(DeviceFontFamilyName),以便在字体回退链期间可选地查找系统安装的字体。(I30468b/219754572
  • PointerEventType.ScrollPointerEvent.scrollDelta 现在是稳定的 API(I574c5b/225669674
  • TextStyle/ParagraphStyle 中添加了 includeFontPadding 的临时兼容性配置。可以通过 TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false)) 更改 includeFontPadding。这是一个临时的配置选项以启用迁移,并将被删除。(If47beb/171394808
  • 更新了 FontFamily.Resolver 以集成系统范围的粗体文本辅助功能设置(I6c1e7
  • ComposeViewconsumeWindowInsets 扩展属性允许开发人员禁用 Android WindowInsets 的使用。这允许层次结构中单独的 ComposeViews 分别应用 WindowInsets 而不相互干扰。(I0ef08b/220943142

版本 1.2.0-alpha06

2022 年 3 月 23 日

androidx.compose.foundation:foundation:1.2.0-alpha06androidx.compose.foundation:foundation-layout:1.2.0-alpha06 已发布。版本 1.2.0-alpha06 包含这些提交。

API 更改

  • 添加了 RequestFocus 语义操作以请求可聚焦目标的焦点。(I17b71
  • FocusOrder 现已合并到 FocusProperties 中,并且 focusProperties() 现在具有 focusOrder() 的所有功能。FocusOrderfocusOrder() 已弃用。接受 focusRequesterfocusOrder() 应替换为与 focusProperties() 结合使用的 focusRequester() 修饰符。这使得修饰符能够更好地分离关注点。(I601b7
  • 添加了 WindowInsets.asPaddingValues(Density) 以允许开发人员进行转换,而无需在组合中。(I94c35
  • 更新了矢量可绘制对象的解析以支持自动镜像,如果当前布局方向为 RTL,则翻转 VectorPainter 的内容。(I79cd9b/185760237

错误修复

  • 滚动修饰符(Modifier.verticalScroll()Modifier.horizontalScroll()Modifier.scrollable())现在将滚动以保持已聚焦的可组合项可见,如果滚动区域已调整大小并且已聚焦的可组合项以前可见。
  • 当 TextFields 获得焦点且显示键盘时,如果位于非惰性可滚动区域内且软输入模式为 ADJUST_RESIZE,则 TextFields 现在将保持在键盘上方。(I4a485b/190539358b/192043120b/216842427

版本 1.2.0-alpha05

2022 年 3 月 9 日

androidx.compose.foundation:foundation:1.2.0-alpha05androidx.compose.foundation:foundation-layout:1.2.0-alpha05 已发布。版本 1.2.0-alpha05 包含这些提交。

API 更改

  • LazyVerticalGridLazyHorizontalGrid 现在是稳定的。(I307c0
  • LazyGridItemInfo.Unknown 已替换为单独的 LazyGridItemInfo.UnknownRowLazyGridItemInfo.UnknownColumnI56d51
  • LazyVerticalGrid/LazyHorizontalGrid 和所有相关 api 已移动到 .grid 子包中。请将您的导入从 androidx.compose.foundation.lazy 更新到 androidx.compose.foundation.lazy.grid。(I2d446b/219942574
  • 文本:includeFontPadding 现在默认关闭。已处理 includeFontPadding=false 导致的剪裁问题,高脚本不应出现剪裁。(I31c84b/171394808
  • 测量的接口现在公开了 parentData 属性(I3313f
  • 引入了实验性的 Modifier.onFocusedBoundsChanged 以允许观察子级可聚焦项的边界。(I14283b/220030968b/190539358b/192043120b/216842427
  • 添加了 LazyHorizontalGrid。(I61ae7b/191238807)
  • 添加了一个新的 LazyVerticalGrid API 来定义横轴大小(I17723)
  • 添加了 FocusGroup 修饰符(I64bc0b/213508274b/184670295)

错误修复

  • WindowInsets.toString() 现在将显示正确的值。(I1585d)

外部贡献

  • 更新为使用 Kotlinx 协程 1.6.0(I3366d)

版本 1.2.0-alpha04

2022年2月23日

androidx.compose.foundation:foundation:1.2.0-alpha04androidx.compose.foundation:foundation-layout:1.2.0-alpha04 已发布。版本 1.2.0-alpha04 包含这些提交。

API 更改

  • BringIntoViewResponders 不再需要手动将请求传递到父响应者,而是需要立即返回他们希望其父级显示到视图中的矩形。(I8e66a)
  • 在 Text 中支持异步字体加载(I77057b/214587005)
  • LazyVerticalGrid 现在支持在项目前面进行 换行,这些项目的跨度不适合当前行。(I05c40b/207462103)
  • excludeFromSystemGestures 重命名为 systemGesturesExclusion(I19526)
  • LazyVerticalGrid 现在支持 reverseLayout。(I6d7d7b/215572963b/211753558)
  • 添加 WindowInsets.only() 方法,允许开发人员仅包含 WindowInsets 中的尺寸。(I14c94b/217768486)
  • 添加了 ComposableTargetComposableTargetMarkerComposableOpenTarget,允许在编译时报告可组合函数何时被调用以针对它未设计使用的应用器。

    在大多数情况下,注释可以由 Compose 编译器插件推断出来,因此直接使用这些注释的情况应该很少。无法推断的情况包括创建和使用自定义应用器、抽象可组合函数(例如接口方法)、可组合 lambda 的字段或全局变量(局部变量和参数会被推断),或者在使用 ComposeNode 或相关的可组合函数时。

    对于自定义应用器,调用 ComposeNodeReusableComposeNode 的可组合函数需要为该函数和任何可组合 lambda 参数类型添加 CompoableTarget 注释。但是,建议创建一个用 ComposableTargetMarker 注释的注释,然后使用标记的注释而不是直接使用 ComposableTarget。用 ComposableTargetMarker 标记的可组合注释等效于 ComposbleTarget,其中属性类的完全限定名称作为应用器参数。有关使用 ComposableTargetMarker 的示例,请参阅 anroidx.compose.ui.UiComposable。(I38f11)

错误修复

  • 现在允许将负滚动偏移量传递到 LazyGridState.scrollToItem()LazyGridState.animateScrollToItem() 中。(I025c6b/211753558)
  • 支持 TextField 的异步字体加载。(Icc4bfb/214587005)

版本 1.2.0-alpha03

2022年2月9日

androidx.compose.foundation:foundation:1.2.0-alpha03androidx.compose.foundation:foundation-layout:1.2.0-alpha03 已发布。版本 1.2.0-alpha03 包含这些提交。

API 更改

  • TextInputSessionTextInputService 中的 notifyFocusedRect 方法现在已弃用,并且不会被调用。请改用 BringIntoViewRequester。(Ia4302b/192043120b/216842427b/178211874)
  • 为具有 Modifier.animateItemPlacement() 的惰性网格的项目启用了动画。(Ib6621b/211753218)
  • BringIntoViewRequester 现在将请求传播到托管的 Android View。(Ia7a51)
  • FontFamilyResolver 现在可以通过 LocalFontFamilyResolver.current 获取。
    • 添加了 createFontFamilyResolver(context)createFontFamilyResolver(context, coroutineScope) 以在 Compose 使用范围之外创建新的 FontFamily 解析器。
    • Paragraph 和 MultiParagraph 现在采用 FontFamily.Resolver
    • TextLayoutResult.layoutInput.fontFamilyResolver 现在包含用于此布局的解析器,已弃用 TextLayoutResult.layoutInput.resourceLoader,因为它不再使用。(Id5a45b/174162090)
  • 添加了 AndroidFont,这是一个新的低级 API,用于在 Android 上提供新型的字体资源描述符。例如,从特定于应用程序的后端加载字体,或者选择性地在设备上定位预安装的字体,或者从当前字体工厂未提供的资源加载字体。
    • 扩展了 Font.ResourceLoaded API 以支持可选和异步字体加载。不建议应用程序开发人员直接使用此 API。要添加新型字体,请参阅 AndroidFont。
    • Font.AndroidResourceLoader 扩展函数允许在组合之外构造 Font.ResourceLoader
    • 向基于资源的字体添加了 loadingStrategy 参数,以便在资源字体引用可下载字体 XML 时允许异步加载。(Ie5aeab/174162090)
  • Typeface(FontFamily) 构造函数已弃用。这以前用于预加载字体,对于可下载字体,这可能需要长达 10 秒的时间。对于可下载字体,此调用可能会阻塞 10 秒。请改用 FontFamilyResolver.preload
    • fontResource(FontFamily): Typeface 已弃用。这以前用于预加载字体,对于可下载字体,这可能需要长达 10 秒的时间。请改用 FontFamilyResolver.preload(If8e7cb/174162090)
  • 您现在可以为 LazyVerticalGrid 的项目指定内容类型 - LazyGridScope 上的 item/items 函数现在接受此类参数。提供此类信息有助于项目组合重用逻辑,使其更有效率,并且仅重用类似类型项目之间的内容。(I7b355b/215372836)
  • LazyListLayoutInfoLazyGridLayoutInfo 现在具有新的属性:viewportSizeorientationreverseLayout(Ifc8edb/200920410)
  • 您现在可以为 LazyColumn/LazyRow 的项目指定内容类型 - LazyListScope 上的 item/items 函数现在接受此类参数。提供此类信息有助于项目组合重用逻辑,使其更有效率,并且仅重用类似类型项目之间的内容。(I26506)
  • SubcomposeLayoutState 接受 maxSlotsToRetainForReuse 的构造函数现在已弃用。取而代之的是一个新的构造函数,它接受 SubcomposeSlotReusePolicy - 一个新的接口,允许更细粒度地控制哪些插槽应保留以供将来重用。(I52c4d)
  • 为 WindowInsets 添加了修饰符,用于填充和调整大小。这允许某些内容扩展到内嵌区域,并且主要内容仍保持在内嵌区域之外。例如,windowInsetsPadding 可用于填充内容区域以避免可能完全或部分覆盖的区域。(Id0395b/213942085)

错误修复

  • 当文本字段获得焦点并显示键盘时,文本字段现在将保持在键盘上方,当软输入模式为 ADJUST_PAN 时。(I8eaebb/190539358b/192043120)
  • 桌面使用组合本地 FontFamily.Resolver
    • 桌面 FontLoader 已弃用
    • 桌面上的新 createFontFamilyResolver 工厂(I6bbbbb/174162090)
  • 在文本字段之间更改焦点时,软键盘输入类型不再闪烁。(I1bf50b/187746439)
  • 当光标句柄显示时,文本字段不再需要额外的后退键。(Ideb4bb/205726883)
  • 文本选择放大镜行为已进行改进,以匹配平台放大镜。(Idd918b/206833278)

版本 1.2.0-alpha02

2022年1月26日

androidx.compose.foundation:foundation:1.2.0-alpha02androidx.compose.foundation:foundation-layout:1.2.0-alpha02 已发布。版本 1.2.0-alpha02 包含这些提交。

API 更改

  • 添加了 NonRestartableComposable 到没有复杂逻辑的现有方法的重载方法中。这减少了所有在内部调用的函数中重复的参数的编译器生成的记忆化检查(等于)。(I90490)
  • 添加了 excludeFromSystemGesture 修饰符,以便轻松访问 Android 的 setSystemGestureExclusionRects(I46f07)

错误修复

  • 文本选择放大镜行为已进行改进,以匹配平台放大镜。(Idd918b/206833278)
  • LazyColumnLazyRowModifier.verticalScroll 和其他使用 Modifier.scrollable 的容器现在支持鼠标滚轮滚动。(I2b5e1b/198214718)

版本 1.2.0-alpha01

2022年1月12日

androidx.compose.foundation:foundation:1.2.0-alpha01androidx.compose.foundation:foundation-layout:1.2.0-alpha01 已发布。版本 1.2.0-alpha01 包含这些提交。

API 更改

  • LazyColumnLazyRowLazyVerticalGrid 中添加了新的参数 userScrollEnabled,以便用户能够临时或永久禁用通过触摸手势或辅助功能操作的用户启动的滚动。通过状态上的方法以编程方式滚动仍然允许。(I7eae9b/201150093
  • onSizeChanged 回调添加到放大镜修饰符。(I6879f
  • 现在,在 SelectionContainer 中拖动选择句柄时,会显示放大镜小部件。(I30b38b/139320979

错误修复

  • 修复了 TextField 光标句柄在滚动到视图之外时未隐藏的问题。(I14552b/208883748

依赖项更新

  • 现在依赖于 Kotlin 1.6.10

版本 1.1

版本 1.1.1

2022年2月23日

androidx.compose.foundation:foundation:1.1.1androidx.compose.foundation:foundation-layout:1.1.1 已发布。版本 1.1.1 包含这些提交。

错误修复

  • 修复 androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList 处的 NullPointerExceptionaosp/1947059b/206677462
  • 修复了在 Android 上从剪贴板读取时,剪贴板内容导致的崩溃。(I06020b/197769306
  • 修复了 LazyVerticalGrid 中的 RTL 问题(aosp/1931080b/207510535

版本 1.1.0

2022年2月9日

androidx.compose.foundation:foundation:1.1.0androidx.compose.foundation:foundation-layout:1.1.0 已发布。版本 1.1.0 包含这些提交。

自 1.0.0 以来重要更改

  • 稳定支持 Android 12 的 过度滚动效果
  • 触摸目标大小的改进
  • 请注意,相对于 Compose 1.0,Material 组件将扩展其布局空间以满足 Material 辅助功能指南 中关于 触摸目标大小 的要求。例如,即使您将 Button 的大小设置为更小,Button 触摸目标也将扩展到 48x48dp 的最小尺寸。这使 Compose Material 与 Material Design Components 的行为保持一致,如果您混合使用视图和 Compose,则可以提供一致的行为。此更改还确保在使用 Compose Material 组件创建 UI 时,将满足触摸目标辅助功能的最低要求。
  • 稳定支持 导航栏
  • 将许多以前实验性的 API 提升到稳定版
  • 支持更新版本的 Kotlin

版本 1.1.0-rc03

2022年1月26日

androidx.compose.foundation:foundation:1.1.0-rc03androidx.compose.foundation:foundation-layout:1.1.0-rc03 已发布。版本 1.1.0-rc03 包含这些提交。

错误修复

  • 更新以支持 Compose Material 1.1.0-rc03

版本 1.1.0-rc01

2021 年 12 月 15 日

androidx.compose.foundation:foundation:1.1.0-rc01androidx.compose.foundation:foundation-layout:1.1.0-rc01 已发布。版本 1.1.0-rc01 包含这些提交。

错误修复

  • 现在允许将负滚动偏移量传递到 LazyListState.scrollToItem()LazyListState.animateScrollToItem() 中。(Iceb90b/184252837
  • 修复了一个导致缺少辅助功能滚动操作的错误(I7cbfb

版本 1.1.0-beta04

2021 年 12 月 1 日

androidx.compose.foundation:foundation:1.1.0-beta04androidx.compose.foundation:foundation-layout:1.1.0-beta04 已发布。版本 1.1.0-beta04 包含这些提交。

新功能

  • 更新为兼容 Kotlin 1.6.0

API 更改

  • 清理了 androidx.core.view 中的可空性(I7078ab/204917439
  • 添加了允许整体使用 PointerInputchange 或检查其是否已被使用的新实验性 API。(I2e59d
  • 在文本字段内拖动光标或选择句柄时,显示放大镜小部件。(I5391eb/203781358

错误修复

  • 修复了 IME 可见性更改时文本句柄不动的问题。(I25f2e

版本 1.1.0-beta03

2021 年 11 月 17 日

androidx.compose.foundation:foundation:1.1.0-beta03androidx.compose.foundation:foundation-layout:1.1.0-beta03 已发布。版本 1.1.0-beta03 包含这些提交。

API 更改

  • 已将水平跨度支持添加到 LazyVerticalGrid。(I7e2fab/176758183
  • 添加了动画 Lazy 列表项位置的实验功能。在 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.itemLazyListScope.items 提供键时,此修饰符将启用项重新排序动画。除了项重新排序之外,由事件(如排列或对齐更改)导致的所有其他位置更改也将被动画化。(I59e7bb/150812265

版本 1.1.0-beta02

2021 年 11 月 3 日

androidx.compose.foundation:foundation:1.1.0-beta02androidx.compose.foundation:foundation-layout:1.1.0-beta02 已发布。版本 1.1.0-beta02 包含这些提交。

错误修复

  • 涟漪和其他指示现在将仅在它们位于 Modifier.scrollable() 容器内时才会延迟,而不是始终针对按下事件延迟。(Ibefe0b/203141462
  • 添加了实验性的 BringIntoView API,它允许您向父级发送请求,以便它们滚动以将项目带入视图(Ib918db/195353459

外部贡献

  • 添加了 Modifier.pointerHoverIconI95f01

版本 1.1.0-beta01

2021 年 10 月 27 日

androidx.compose.foundation:foundation:1.1.0-beta01androidx.compose.foundation:foundation-layout:1.1.0-beta01 已发布。版本 1.1.0-beta01 包含这些提交。

错误修复

  • 添加了实验性的 BringIntoView API,它允许您向父级发送请求,以便它们滚动以将项目带入视图(Ib918db/195353459

版本 1.1.0-alpha06

2021 年 10 月 13 日

androidx.compose.foundation:foundation:1.1.0-alpha06androidx.compose.foundation:foundation-layout:1.1.0-alpha06 已发布。版本 1.1.0-alpha06 包含这些提交。

API 更改

  • 添加了 Layout 的一个没有子级的重载,并提高了效率(Ib0d9a
  • SemanticsNodeInteraction.performSemanticsAction 现在返回调用该函数的 SemanticsNodeInteraction。(I9e5db
  • 添加了 performScrollToNode(matcher: SemanticsMatcher),该函数将可滚动容器滚动到由给定匹配器匹配的内容。(Ic1cb8

版本 1.1.0-alpha05

2021 年 9 月 29 日

androidx.compose.foundation:foundation:1.1.0-alpha05androidx.compose.foundation:foundation-layout:1.1.0-alpha05 已发布。版本 1.1.0-alpha05 包含这些提交。

API 更改

错误修复

  • 修复了可滚动项(惰性和非惰性)在滚动方面的辅助功能支持(I6cdb0

版本 1.1.0-alpha04

2021 年 9 月 15 日

androidx.compose.foundation:foundation:1.1.0-alpha04androidx.compose.foundation:foundation-layout:1.1.0-alpha04 已发布。版本 1.1.0-alpha04 包含这些提交。

API 更改

  • 已弃用 performGestureGestureScope,它们已被 performTouchInputTouchInjectionScope 替换。(Ia5f3fb/190493367
  • touchBoundsInRoot 添加到 SemanticsNode 中,其中包括最小触摸目标大小,以便开发人员可以确保触摸目标满足辅助功能的最低要求。(I2e14bb/197751214

错误修复

  • 已在 Android 12 设备上添加了拉伸过度滚动的支持。(Iccf3cb/171682480

版本 1.1.0-alpha03

2021 年 9 月 1 日

androidx.compose.foundation:foundation:1.1.0-alpha03androidx.compose.foundation:foundation-layout:1.1.0-alpha03 已发布。版本 1.1.0-alpha03 包含这些提交。

新功能

  • 更新 Compose 1.1.0-alpha03 以依赖于 Kotlin 1.5.30。(I74545

API 更改

  • 已添加滚动的辉光效果。已添加新的实验性 OverScrollConfiguration API 以允许配置过度滚动视觉效果。提供 null 以关闭过度滚动效果。(I0c304b/171682480
  • AwaitPointerEventScope 现在具有 withTimeout() 和 withTimeoutOrNull()(I507f0b/179239764b/182397793
  • 添加了测试方法以获取裁剪的边界。(I6b28e

  • 为语义和指针输入中的 ViewConfiguration 添加了最小触摸目标大小,以确保可访问性。(Ie861c

版本 1.1.0-alpha02

2021年8月18日

androidx.compose.foundation:foundation:1.1.0-alpha02androidx.compose.foundation:foundation-layout:1.1.0-alpha02 已发布。 版本 1.1.0-alpha02 包含以下提交。

API 更改

  • Modifier.sizerequiredSize 添加了 DpSize 版本(I3fc7eb/194219828

版本 1.1.0-alpha01

2021年8月4日

androidx.compose.foundation:foundation:1.1.0-alpha01androidx.compose.foundation:foundation-layout:1.1.0-alpha01 已发布。 版本 1.1.0-alpha01 包含以下提交。

API 更改

  • 更新了使用源和目标矩形的 DrawScope#drawImage 方法,以使用可选的 FilterQuality 参数。这对于在按像素进行缩放时旨在像素化的像素艺术很有用。更新 BitmapPainter + Image 可组合项以同样使用可选的 FilterQuality 参数(Ie4fb0b/180311607
  • 当按下后退按钮时,TextField 现在会清除选择,这与 Android EditText 行为相匹配。(I3ca16b/174173645
  • 添加光标句柄。(I07a82b/173016579

错误修复

  • 现在,通过语义操作(针对惰性列表和常规滚动组件)进行滚动是带动画的(Id9066b/190742024

外部贡献

  • LazyVerticalGrid 现在同时接受水平和垂直排列参数。(If9c92

版本 1.0

版本 1.0.5

2021 年 11 月 3 日

androidx.compose.foundation:foundation:1.0.5androidx.compose.foundation:foundation-layout:1.0.5 已发布。 版本 1.0.5 包含以下提交。

错误修复

  • 修复了跟踪派生状态的 derivedStateOf 实例时发生的崩溃。(aosp/1792247

版本 1.0.4

2021 年 10 月 13 日

androidx.compose.foundation:foundation:1.0.4androidx.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.3androidx.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.2androidx.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.1androidx.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.0androidx.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-rc02androidx.compose.foundation:foundation-layout:1.0.0-rc02 已发布。 版本 1.0.0-rc02 包含以下提交。

  • 更新了通用形状的边框渲染,以解决使用固定尺寸定义的路径出现的问题。(aosp/1748871b/191817116

版本 1.0.0-rc01

2021年7月1日

androidx.compose.foundation:foundation:1.0.0-rc01androidx.compose.foundation:foundation-layout:1.0.0-rc01 已发布。 版本 1.0.0-rc01 包含以下提交。

API 更改

  • Canvas 现在支持用于可访问性的 contentDescription 参数。(Ib547c

错误修复

  • 禁用的按钮、卡片、复选框以及整体 Modifier.clickable(enabled=false) 将阻止点击传递到父级。(Ic2c3bb/183908811

版本 1.0.0-beta09

2021年6月16日

androidx.compose.foundation:foundation:1.0.0-beta09androidx.compose.foundation:foundation-layout:1.0.0-beta09 已发布。 版本 1.0.0-beta09 包含以下提交。

API 更改

  • 已删除 ManualFrameClock。如果您需要控制动画,请改用 composeTestRule.mainClock。(I3c3e8b/189951065
  • 将枚举 Role 和 LiveRegionMode 更改为具有私有构造函数的内联类(Id1890
  • KeyboardCapitalization 已转换为内联类。(Id5a1c
  • TextOverflow 已更改为内联类。(I433af

错误修复

  • 现在,当您为 LazyColumn/Row 项目指定唯一键时,将根据键维护滚动位置,这意味着如果您在当前可见项目之前添加/删除项目,则具有给定键的项目将保留为第一个可见项目。(Id263fb/184257857
  • 键常量目前为 @ExperimentalComposeUiApi。在稳定之前,使用代码可以声明私有常量。(Ia5d48
  • 已将 IdlingStrategy 添加到 AndroidComposeTestRule,测试框架可以使用它来安装替代机制以等待或实现静止状态。在测试开始之前,使用 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

配置文件规则是什么?

  • 库的配置文件规则在文本文件 baseline-prof.txt 中指定,该文件位于 src/main 或等效目录中。该文件每行指定一个规则,在这种情况下,规则是用于匹配库中方法或类的模式。这些规则的语法是用于使用 adb shell profman --dump-classes-and-methods ... 时的人类可读 ART 配置文件格式的超集。这些规则采用以下两种形式之一来定位方法或类。

  • 方法规则将具有以下模式

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • 类规则将具有以下模式

    <CLASS_DESCRIPTOR>
    
  • 这里 <FLAGS> 是一个或多个字符 HSP,用于指示是否应将此方法标记为“热”、“启动”或“启动后”。

  • <CLASS_DESCRIPTOR> 是目标方法所属类的描述符。例如,类 androidx.compose.runtime.SlotTable 将具有描述符 Landroidx/compose/runtime/SlotTable;

  • <METHOD_SIGNATURE> 是方法的签名,包括方法的名称、参数类型和返回类型。例如,LayoutNode 上的方法 fun isPlaced(): Boolean 的签名为 isPlaced()Z

  • 这些模式可以包含通配符(***?),以便单个规则包含多个方法或类。

这些规则的作用是什么?

  • 具有标志 H 的方法表示此方法是“热”方法,应提前编译。

  • 具有标志 S 的方法表示它是在启动时调用的方法,应提前编译以避免在启动时编译和解释方法的成本。

  • 具有标志 P 的方法表示它是在启动后调用的方法。

  • 此文件中存在的类表示它在启动期间使用,应在堆中预分配以避免类加载的成本。

这是如何工作的?

  • 库可以定义这些规则,这些规则将打包在 AAR 工件中。当构建包含这些工件的应用时,这些规则会合并在一起,合并后的规则用于构建特定于应用的紧凑二进制 ART 配置文件。然后,ART 可以在应用安装到设备上时利用此配置文件,以便提前编译应用的特定子集,以提高应用的性能,尤其是在首次运行时。请注意,这不会对可调试应用产生任何影响。

版本 1.0.0-beta08

2021 年 6 月 2 日

androidx.compose.foundation:foundation:1.0.0-beta08androidx.compose.foundation:foundation-layout:1.0.0-beta08 已发布。 版本 1.0.0-beta08 包含以下提交。

API 更改

  • NestedScrollSource 枚举被内联类替换。(Ie321bb/187055290)
  • 将枚举用法重构为内联类,以避免在添加新的枚举值时出现详尽的 when 语句问题。(I2b5eb)
  • 为可点击/可切换添加了点击超时,以防止在滚动/拖动期间显示波纹(Ia2704b/168524931)
  • ContentDescription 和 Text 语义属性不再是单个值,而是列表。这使得可以合并它们,而不是进行连接。还提供了更好的测试 API 来利用这些更改(Ica6bfb/184825850)
  • Modifier.focusModifier() 已弃用,并替换为 Modifier.focusTarget()(I6c860)
  • KeyboardType 枚举被内联类替换。(I73045b/187055290)
  • FocusState 枚举替换为 FocusState 接口(Iccc1ab/187055290)
  • ImeAction 枚举被内联类替换。(I18be5b/187055290)
  • AnnotatedString.withAnnotation 函数现在是 ExperimentalTextApi 而不是 ExperimentalComposeApi。(I0cd0a)
    • 带有 TextUnitType 的 TextUnit 构造函数现在是 ExperimentalTextApi 而不是 ExperimentalComposeApi。
  • PaddingValues 现在是 @Stable 而不是 @Immutable(I88c50)

错误修复

  • 修复了在非空文本中长按空白区域导致崩溃的问题。(I33ab5b/187437299)
  • 在全选后显示工具栏(I495d9b/185919613)
  • 修复了可滚动容器在其横轴上剪切子项的问题。如果您有一个包含 Card 项的 LazyRow,则很容易重现。现在阴影将不会被剪切。(Icb635b/186318448)
  • 修复了在使用 Modifier.combinedClickable 时波纹/其他指示有时会在长按时卡住的问题(I2298cb/186223077)
  • 现在 detectDragGesuresdetectVerticalGesturesdetectHorizontalGestures 将自动使用位置更改,无需在 onDrag 回调中调用 change.consumePositionChange(I42fc4b/185096350b/187320697)
  • Modifier.onGloballyPositioned() 已更改为报告修饰符链中此修饰符的坐标,而不是应用所有修饰符后的布局坐标。这意味着现在修饰符的顺序会影响要报告的坐标。(Ieb67db/177926591)

版本 1.0.0-beta07

2021 年 5 月 18 日

androidx.compose.foundation:foundation:1.0.0-beta07androidx.compose.foundation:foundation-layout:1.0.0-beta07 已发布。 版本 1.0.0-beta07 包含以下提交。

API 更改

错误修复

  • LazyColumn/Row 现在将最多保持 2 个以前可见的项处于活动状态(不会被释放),即使它们已经被滚动出去了。这允许组件在需要合成新项时重用活动子合成,从而提高滚动性能。(Ie5555)
  • 删除 paintBackground。(I38660)
  • 使用 DrawScope 绘制选择背景。(I73c61b/186674472)
  • 修复了影响使用 spacedBy 排列来布局加权子项的 Row/Column 的 beta06 回归问题。(Ifaf8cb/187326588)

版本 1.0.0-beta06

2021 年 5 月 5 日

androidx.compose.foundation:foundation:1.0.0-beta06androidx.compose.foundation:foundation-layout:1.0.0-beta06 已发布。 版本 1.0.0-beta06 包含以下提交。

API 更改

  • 解决与导航手势的冲突(I1145e)
  • 添加了 CollectionInfo 和 CollectionItemInfo 可访问性 API,允许为可访问性服务标记集合及其项(Id54efb/180479017)
  • 添加了 SemanticsActions.ScrollToIndex 以将具有索引项的列表滚动到具有特定索引的项,以及 SemanticsProperties.IndexForKey 以获取具有键的项在列表中的索引。这两个操作都由 LazyList 实现。
    • 添加了 SemanticsNodeInteraction.performScrollToIndex,它将列表滚动到给定索引,以及 SemanticsNodeInteraction.performScrollToKey,它将列表滚动到具有给定键的项。(I4fe63b/178483889b/161584524)
  • AnnotatedString 保存支持到 TextFieldValue.Saver。向 AnnotatedString.Builder 添加了 addTtsAnnotation 和 withAnnotation 实用程序函数(I8cbdcb/178446304)
  • PaddingValues(horizontal, vertical) 添加了默认 0.dp 参数值(I05571b/181336792)

错误修复

  • 具有 weight(fill = false) 的 Row & Column 子项不再使父项填充整个可用的主轴空间。(Ied94db/186012444b/184355105)

版本 1.0.0-beta05

2021 年 4 月 21 日

androidx.compose.foundation:foundation:1.0.0-beta05androidx.compose.foundation:foundation-layout:1.0.0-beta05 已发布。 版本 1.0.0-beta05 包含以下提交。

API 更改

  • FlingBehavior 接口现在标记为 @Stable。所有实现都应符合 @Stable 合同。(I93354b/184830577)

错误修复

  • 修复了 ACTION_SCROLL_FORWARDACTION_SCROLL_BACKWARDaccessibilityActionScrollLeftaccessibilityActionScrollUpaccessibilityActionScrollRightaccessibilityActionScrollDown 可访问性滚动操作。它现在不会滚动到可滚动区域的末尾,而是会沿给定方向滚动一个屏幕。(Ieccb0)
  • 来自 ui-test-manifest 和 ui-tooling-data 的 AndroidManifest 文件现在与 Android 12 兼容(I6f9deb/184718994)

版本 1.0.0-beta04

2021 年 4 月 7 日

androidx.compose.foundation:foundation:1.0.0-beta04androidx.compose.foundation:foundation-layout:1.0.0-beta04 已发布。 版本 1.0.0-beta04 包含以下提交。

API 更改

  • 将 SoftwareKeyboardController 上的 hideSoftwareKeyboard 和 showSoftwareKeyboard 分别重命名为 hide()show()
    • 为 LocalSoftwareKeyboardController 提供完整的 CompositionLocal 接口,允许设置它(尤其是在测试中很有用)(I579a6)
  • TextOverflow.Visible 已引入。(Ic8f89)
  • 已删除 RowScopeColumnScopeBoxScopeBoxWithConstraintsScope 的公共实例。(I4e83eb/181869067)

错误修复

  • 修复了当 LazyColumn/LazyRow 的项位于边缘时,在快速抛掷后位置错误的问题(Ie4d13b/183877420)
  • 在此更改之前,局部可组合函数可以根据其参数跳过。在此更改之后,没有局部可组合函数将跳过。进行此更改是因为局部函数通常会捕获来自父项的参数,并且预期它们会捕获,跳过是错误的常见来源。

    总而言之,请考虑以下示例

    @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-beta03androidx.compose.foundation:foundation-layout:1.0.0-beta03 已发布。 版本 1.0.0-beta03 包含以下提交。

API 更改

  • DefaultMonotonicFrameClock 已弃用。现在,如果在调用 withFrameNanosRecomposer.runRecomposeAndApplyChanges 时未提供 MonotonicFrameClock,则会抛出 IllegalStateException 异常。(I4eb0d

错误修复

  • FlingBehavior.performFling() 现在即使速度为 0 也会被调用(I0b6e5b/181237123

版本 1.0.0-beta02

2021 年 3 月 10 日

androidx.compose.foundation:foundation:1.0.0-beta02androidx.compose.foundation:foundation-layout:1.0.0-beta02 已发布。版本 1.0.0-beta02 包含这些提交。

API 更改

  • 添加了多个 LazyColumn 测量逻辑的小优化(Ic6889
  • 添加了新的 LocalSoftwareKeyboardController 组合本地 API,以替换 TextField 上之前的 SoftwareKeyboardController 接口。(I5951eb/168778053
  • 添加了新的 LocalSoftwareKeyboardController 组合本地 API,以替换 TextField 上之前的 SoftwareKeyboardController 接口。(I84472b/168778053

错误修复

版本 1.0.0-beta01

2021 年 2 月 24 日

androidx.compose.foundation:foundation:1.0.0-beta01androidx.compose.foundation:foundation-layout:1.0.0-beta01 已发布。版本 1.0.0-beta01 包含这些提交。

这是 Compose 1.0.0 Beta 的第一个版本。

API 更改

  • 已将 onStart 回调添加到 detectDragGestures 中(I67269b/179995594
  • 用于调整大小到固有尺寸的修饰符不再是实验性的。(I15744
  • 已删除 dp 断言(I798d2
  • 已从所有文本字段中删除 SoftwareKeyboardController 回调,并将很快由新的 API 替换。(Iae869b/168778053
  • MeasureBlocks 已重命名为 MeasurePolicy,后者已成为一个函数接口。布局 API 已更新/简化为使用 MeasurePolicy。(Icab48b/167662468b/156751158
  • InteractionState 已替换为 [Mutable]InteractionSource
    • 接口负责发出/收集交互事件。
    • 不要将 interactionState = remember { InteractionState() } 传递给诸如 ButtonModifier.clickable() 之类的组件,而是使用 interactionSource = remember { MutableInteractionSource() }
    • 不要使用 Interaction.Pressed in interactionState,而是应该使用 InteractionSource 上的扩展函数,例如 InteractionSource.collectIsPressedAsState()。
    • 对于复杂用例,可以使用 InteractionSource.interactions 来观察交互流。有关更多信息,请参阅 InteractionSource 文档和示例。
    • I85965b/152525426b/171913923b/171710801b/174852378
  • 已删除弃用的 LayoutCoordinates 方法,使用函数而不是属性来获取 positionInParent 和 boundsInParent(I580edb/169874631b/175142755
  • 为来自低级文本组件(如 CoreTextField)的输入会话创建了新的 TextInputSession。(I8817fb/177662148
  • Placeable 现在公开了 measuredSize,表示子布局实际测量的尺寸。此尺寸可能不符合测量约束。(Ib2729b/172560206b/172338608
  • 添加 selectionGroup 修饰符,允许为辅助功能目的标记选项卡或单选按钮的集合(Ie5c29
  • 添加 LazyListState.animateScrollToItem

    此方法平滑滚动到列表中的特定项目。(I4bfd7

  • ScrollableState.smoothScrollBy() 已重命名为 animateScrollBy() LazyListState.snapToItemIndex() 已重命名为 scrollToItem() ScrollState.smoothScrollTo() 已重命名为 animateScrollTo()(I35ded

  • Modifier.zoomable 已替换为 Modifier.transformable。已添加 smoothPanBy、smoothRotationBy 作为功能。(Ifc32bb/175294473

  • compositionLocalOfstaticCompositionLocalOfdefaultFactory 现在是必需的,而不是可选的。

    此更改消除了在未提供默认工厂时,不可为空类型可能出现的类型错误。以前,这将为不可为空类型提供空引用。

    对于可为空类型,请考虑提供 { null } 作为默认工厂。

    我们不建议使用不可为空类型的本地变量,除非可以提供合理的默认值。如果不存在合理的默认值,则 defaultFactory lambda 应抛出异常。但是,抛出异常意味着本地变量的使用者将对其被提供有一个隐式依赖关系,而类型系统不会强制执行此依赖关系。(Ifbd2a

  • 已将 Indication#createIndication() 更改为 Indication#rememberUpdatedIndication(InteractionState),并从 IndicationInstance#drawIndication() 中删除了 InteractionState 参数。IndicationInstance 仅应负责绘制视觉效果,而不应响应 InteractionState 更改而启动动画/写入状态。这些动画和状态写入应该在 rememberUpdatedIndication() 中发生。 Modifier.indication 中的 indication 参数也已更改为必填参数。(Ic1764b/152525426

  • 文本操作现在会自动检查焦点(I13777b/179648629

  • 已删除 runBlockingWithManualClockI15cdcb/179664814

  • Modifier.verticalScroll()/horizontalScroll() 中的滚动位置现在使用 Int 表示(I81298

  • smoothScrollBy 和 scrollBy 方法的包已更改为 androidx.compose.foundation.gestures.*I3f7c1b/175294473

  • FlingConfig 已重命名为 FlingBehavior,现在允许自定义挂起动画,而不是预定义的衰减。(I02b86b/175294473

  • 尺寸修饰符已重命名。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。(I5b414

  • defaultMinSizeConstraints 已重命名为 defaultMinSize。(I4eaae

  • Modifier.tapGestureFilter 已删除。请改用 Modifier.pointerInput { detectTapGestures(...) }。(I266edb/175294473

  • 已从指针输入系统中删除部分消耗。协调部分消耗的推荐方法是 Modifier.nestedScroll。(Ie9c9b

  • Orientation 已移动到 foundation 包中。VelocirtTracker 已从 ui.gesture 移动到 ui.input.pointer。(Iff4a8b/175294473

  • AnimationClockObservable 及其子类已删除。AnimatedFloat 已删除。(Icde52b/177457083

  • drawerState.open() 和 drawerState.close() 现在是挂起函数。使用 rememberCoroutineScope() 获取组合的范围以调用它们(I16f60b/175294473

  • Providers 已重命名为 CompositionLocalProvider

    • Composition 构造函数不再接受 key 参数,并且已被弃用。
    • currentCompositeKeyHash 已变为可组合的顶级属性,而不是可组合的顶级函数。
    • CompositionData 和 CompositionGroup 已移动到 androidx.compose.runtime.tooling 命名空间
    • ComposableLambda 已成为接口,而不是具体类,并且不再具有类型参数。
    • ComposableLambdaN 已成为接口,而不是具体类,并且不再具有类型参数。
    • snapshotFlow 函数已移动到 androidx.compose.runtime 命名空间
    • SnapshotMutationPolicy 的 merge 方法不再是实验性的
    • 已删除 @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)

错误修复

  • 添加了新的 LocalSoftwareKeyboardController 组合本地 API 以替换 TextField 上之前的 SoftwareKeyboardController 接口。 (I658b6, b/168778053)

版本 1.0.0-alpha12

2021 年 2 月 10 日

androidx.compose.foundation:foundation:1.0.0-alpha12androidx.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 作为参数改进的子字符串测试 API (Icbe78)
  • 引入了 InfiniteAnimationPolicy 协程上下文元素,该元素将在无限动画中应用。默认情况下,不会安装任何策略,除非在使用 ComposeTestRule 运行测试时。 (I50ec4, b/151940543)
  • Animatable.snapTo 和 Animatable.stop 现在是挂起函数 (If4288)
  • ComponentActivity.setContent 已移动到 androidx.activity.compose.setContent,位于 androidx.activity:activity-compose 模块中。 (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)

  • 重命名了 Ambients 以匹配 Ambient -> CompositionLocal 的重命名。Ambients 以前命名为 AmbientFoo,现在 CompositionLocals 命名为 LocalFoo。 (I2d55d)

  • Selection 已移动到 foundation。 (I7892b)

  • 类似于我们之前如何删除 state { 0 } 可组合项,现在提倡使用 remember { mutableStateOf(0) },我们将删除 savedInstanceState { 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)

  • Recomposers 现在可以关闭了。已关闭的 recomposers 将继续重新组合,直到组合子协程完成。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 包中。内部方法 RestorableStateProvider 已重命名为 SaveableStateProvider。泛型已移除,因此您可以将 Any 作为键传递。不再需要实验性注解。 (I0902e, b/174598702)

  • Saver、listSaver()、mapSaver()、autoSaver 已从 androidx.compose.runtime.savedinstancestate 移动到 androidx.compose.runtime.saveable (I77fe6)

  • 工件 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,以便支持形状在 rtl 方向上的自动镜像。引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape,用于不需要自动镜像的情况。 (I61040, b/152756983)

  • Modifier.scrollable 中已删除 canDrag。 (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()` 获取协程作用域。(I3d39cb/178169563

  • 已弃用 `androidx.compose.foundation.layout.ConstraintLayout`,推荐使用 `androidx.constraintlayout.compose.ConstraintLayout`。您需要添加对 `androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01` 的依赖。(I87adc

  • 已弃用 `tapGestureFilter`、`doubleTapGestureFilter`、`longPressGestureFilter` 和 `pressIndicaitonGestureFilter`。请改用 `Modifier.clickable` 或 `Modifier.pointerInput` 配合 `detectTapGestures` 函数。(I6baf9b/175294473

  • 移除 `Recomposer.current()`。[抽象]ComposeView 现在默认使用延迟创建的、窗口范围的 Recomposers,由窗口的 ViewTreeLifecycleOwner 驱动。当主机 Lifecycle 停止时,重组和基于 `withFrameNanos` 的动画滴答将暂停。(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` 参数。(Ic4becb/175294473

  • 已移除接受 `FlingConfig` 的 `AnimatedFloat.fling`。请改用挂起函数 `Animatable.animateDecay`。(I4659bb/177457083

  • 已从以下类中移除 `data class`

    • InlineTextContent
    • LocaleList
    • I605c7
  • 现在可以在合成外部创建 `clickable`、`toggleable` 和 `selectable`。(I0a130b/172938345b/175294473

  • 已弃用 `ScrollableColumn/Row`。当您有大量滚动内容时,使用 `ScrollableColumn` 的效率低于 `LazyColumn`,因为使用 `LazyColumn` 我们只需要合成/测量/绘制可见元素。为了防止用户走上低效的道路,我们决定弃用 `ScrollableColumn` 和 `ScrollableRow`,并推广使用 `LazyColumn` 和 `LazyRow`。用户仍然可以决定他们不需要延迟行为,并像这样直接使用修饰符:`Column(Modifier.verticalScroll(rememberScrollState()))`(Ib976bb/170468083

  • 为 `LazyColumn/LazyRow/LazyVerticalGrid` 的作用域添加了新的 `items(count: Int)` 工厂方法。`items(items: List)` 和 `itemsIndexed(items: List)` 现在是扩展函数,因此在使用时需要手动导入。为数组添加了新的扩展重载:`items(items: Array)` 和 `itemsIndexed(Array)`(I803fcb/175562574

  • 已移除已弃用的 `AbsoluteArrangement`。(Iffa96b/177641870

  • 已在 `Box` 中添加 `propagateMinConstraints` 参数,用于指定是否将传入的最小约束传递给 `Box` 的内容。默认值为 `false`。(I0125bb/152613457

错误修复

  • 已弃用 `onCommit`、`onDispose` 和 `onActive`,推荐使用 `SideEffect` 和 `DisposableEffect` API。(If760e
  • 已将 `WithConstraints` 重构为 `BoxWithConstraints` 并移动到 `foundation.layout`。(I9420bb/173387208
  • 对 `Font/FontFamily/Typeface` 的工厂函数进行更改

    • 添加了以大写字母开头的工厂函数
    • 弃用以前以小写字母开头的工厂函数
    • 新的工厂函数返回 `FontFamily` 而不是子类
    • 隐藏子类的构造函数,以便只能通过工厂函数构造它们。
    • 将 `Font.asFontFamily` 重命名为 `Font.toFontFamily`
    • I42aa7
  • 引入 `ComposeContentTestRule`,它扩展了 `ComposeTestRule` 并定义了 `setContent`,后者已从 `ComposeTestRule` 中移除。添加了一个工厂方法 `createEmptyComposeRule()`,它返回一个 `ComposeTestRule` 并且不会为您启动 Activity。当您希望在测试期间启动 Activity 时(例如,使用 `ActivityScenario.launch`)请使用此方法。(I9d782b/174472899

  • `animateAsState` 现在是 `animateFooAsState`,其中 `Foo` 是正在动画化的变量的类型。例如 `Float`、`Dp`、`Offset` 等(Ie7e25

  • `Density` 现在是 `Arrangement` 接口的接收器作用域。(I18aad

  • `TextFieldValue` 接受 `AnnotatedString`。但是,这只是一个 API 更改,尚未实现多样式文本编辑。

    • 已从 `EditingBuffer` 构造函数参数中移除 `initial`。(I326d5
  • `invalidate` 和 `compositionReference()` 现在已弃用,推荐使用 `currentRecomposeScope` 和 `rememberCompositionReference`。(I583a8

  • `AnnotatedString` 已更改为扩展自 `kotlin.CharSequence`。因此,`length` 和 `subSequence` 现在是实例函数,扩展函数已移除。(Iaf429

  • `Duration` 和 `Uptime` 将替换为 `Long` 毫秒,此步骤消除了指针输入对这些类的依赖。(Ia33b2b/175142755b/177420019

  • `RememberObserver` 替换了 `CompositionLifecycleObserver`,`CompositionLifecycleObserver` 现已弃用。

    `RememberObserver` 是 `CompositionLifecycleObserver` 的替代品,具有修改后的语义和重命名的方法。对于仅记住一次的对象(这是并且仍然是推荐的做法),可以机械地更改为新的 API。但是,如果在合成中多次记住了一个引用,则对每个引用都会调用 `onRemembered`,而 `onEnter` 仅调用一次。如果该对象在子合成中使用,例如 `WithConstraints` 和 `Scaffold`,则 `onEnter` 将被多次调用,这使得对单个 `onEnter` 调用的保证不可靠,并且已从 `RememberObserver` 中移除。

    `RememberObserver` 添加了 `onAbandoned`,如果从传递给 `remember` 的回调中返回 `RememberObserver` 实例但未在合成状态中记住,则会调用此函数,因此,永远不会调用 `onRemembered`。如果异常在完成前终止合成或由于正在为其生成合成的状态不再当前或不再需要而丢弃合成,则可能发生这种情况。如果上面遵循单个引用建议的 `RememberObserver` 实例正在跟踪外部资源,则 `onForgotten` 和 `onAbandoned` 都表示不再需要该资源。如果该对象正在跟踪在 `onRemembered` 中启动的工作或分配的资源,则可以忽略 `onAbandoned`,因为如果调用 `onRemembered`,则不会调用它。(I02c36

  • 将 `TransformedText.transformedText` 重命名为 `TransformedText.text`

    • `TransformedText` 不再是 `data class`(Ie672a
  • 以下类不再是 `data class`

    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput(Iaff99
  • 移除实验性的 `monotonicFrameAnimationClockOf` 方法。(Ib753fb/170708374

  • 弃用全局坐标方法并创建了新的基于窗口的坐标方法。(Iee284

  • 请使用 `ImeAction.None` 代替 `ImeAction.NoAction`

    • 请使用 `ImeAction.Default` 代替 `ImeAction.Unspecified`(Ie1bcc
  • `FocusRequester.createRefs` 现在标记为实验性,因为它可能会发生变化。(I2d898b/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 中使用。(Ifff97b/175142755

  • 将 TextInputService.onStateUpdated 重命名为 updateState (Id4853)

  • 移除 displaySize,因为它应该避免使用。通常情况下,最好使用 onRoot() 的大小或至少窗口大小。(I62db4)

版本 1.0.0-alpha10

2021年1月13日

androidx.compose.foundation:foundation:1.0.0-alpha10androidx.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)
  • 将 Toggle 添加到 foundation Strings.kt 中 (I4a5b7, b/172366489)
  • 将 nativeClass 移至 ui 模块并将其设为内部。更新了 equals 实现中 nativeClass 的用法,以改用 'is MyClass'。(I4f734)
  • FlowRow 和 FlowColumn 已弃用。请改用自定义布局。(I09027)
  • Modifier.focus() 和 Modifier.focusRequester() 已弃用。请改用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48, b/175160751, b/175160532, b/175077829)
  • 引入 SelectionRegistrar.notifySelectableChange 以将 Selectable 更新通知给 SelectionManager。(I6ff30, b/173215242)
  • fun Dp.isFinite() 更改为 val Dp.isFinite (I50e00)
  • Constraints#satisfiedBy 已重命名为 isSatisfiedBy。(I9cf5c)
  • 为具有 Unspecified 常量的内联类添加了 isSpecified、isUnspecified 和 useOrElse。(I93f7b, b/174310811)

错误修复

  • 新的基于协程的 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 现在可以通过 keyEvent.nativeKeyEvent 访问 (I87c57, b/173086397)

版本 1.0.0-alpha09

2020年12月16日

androidx.compose.foundation:foundation:1.0.0-alpha09androidx.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)

  • 已添加对 TextFields 的 InteractionState 支持。(I61d91)

  • 为 LazyColumn/Row 添加 reverseLayout 参数。当 true 时,项目将从下到上组合,并且 LazyListState.firstVisibleItemIndex == 0 将表示第一个项目位于底部。(I552ae, b/166589935)

  • 为 LazyColumn 添加了 verticalArrangement 参数。为 LazyRow 添加了 horizontalArrangement 参数。Arrangement 允许我们在项目之间添加间距并在项目不足以填充整个最小大小时指定项目的排列方式。(Icf79a, b/170394300)

  • detectMultitouchGestures 现在使用一个带有组合质心、平移、缩放和旋转参数的回调。(Ie6e1c)

  • 将 ContentDrawScope 移动到 ui-graphics 模块,与 DrawScope 放在一起。(Iee043, b/173832789)

错误修复

  • 偏移修饰符中的 Lambda 现在返回 IntOffset 而不是 Float。(Ic9ee5, b/174137212, b/174146755)
  • 从公共 API 中删除了 SlotTable、SlotReader 和 SlotWriter。这些以前被标记为 InternalComposeAPI。现在它们是 compose 模块的内部组件。

    添加了 CompositionData 和 CompositionGroup 作为 ui-tooling API 的替代,用于提取组合信息。这些是公开的,但不打算在 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)

  • 自动填充 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() 将节点插入到其正在编辑的树中,具体取决于哪种方法性能更好。

    某些树(例如 LayoutNodeView)自下而上构建比自上而下构建的效率高得多。在此更改之前,需要一个插入堆栈来实现自下而上的构建,该堆栈需要复制到每个需要自下而上构建以提高性能的 Applier 中。通过此更改,Applier 覆盖 insertBottomUp() 以自下而上构建树,并覆盖 insertTopDown() 以自上而下构建树。(Icbdc2)

  • 添加了 painterResource API 以处理从栅格化资产格式(如 PNG)或 VectorDrawables 不透明地加载 Painter 对象。使用者不再需要预先确定资产类型,并且可以调用此方法以获取要在 Image 组合元素或 painter 修饰符中使用的 Painter 对象。(I2c703, b/173818471)

  • 添加了 buildAnnotatedString 工厂函数以构建 AnnotatedString。已弃用 annotatedString 构建器函数。(Idfe0b)

版本 1.0.0-alpha08

2020年12月2日

androidx.compose.foundation:foundation:1.0.0-alpha08androidx.compose.foundation:foundation-layout:1.0.0-alpha08 已发布。 版本 1.0.0-alpha08 包含以下提交。

API 更改

  • 已移除 CoreTextField 中的 maxLines 参数。如果您希望通过行数来限制文本字段的高度,请改用 BasicTextField。(Iec002)
  • 已将 await*TouchSlop() 方法更改为不检测指针按下,并将其重命名为 *OrCancellation。还移除了对 orientationLock 参数的需求。(Ie96e1)
  • 添加了 lint 检查,用于检查可组合 lambda 参数命名和位置,以检查其与 Compose 指南的一致性。此外,根据 lint 检查和指南,将一些使用 children 作为其尾随 lambda 名称的 API 迁移到 content。(Iec48e)
  • foundation:foundation-text API 已移动到 foundation:foundation。包结构保持不变(Id3eb2)
  • 新的多点触控手势检测器,包括用于检测旋转、缩放和平移的帮助程序。(Ic459d)
  • 新的拖动手势检测器挂起指针输入 API,包括方向锁定。(Icef25)
  • 已将 VectorAsset 重命名为 ImageVector 并将 VectorAsset 移至 Builder,使其成为 ImageVector 的内部类,符合 API 委员会指南。添加了 VectorAssetBuilder 的类型别名以链接到 ImageVector.Builder 以实现兼容。(Icfdc8)
  • 已将 ImageAsset 和相关方法重命名为 ImageBitmap。(Ia2d99)
  • 已将 foundation 语义属性移动到 ui(I6f05c)
  • 添加了基于协程的滚动 API

    添加了 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及用于滚动控制的更低级 API。这些 API 提供了一个挂起接口来控制滚动,该接口在滚动完成后返回之前会等待。(Ie5642)

  • 在 BasicTextField、TextField 和 OutlinedTextField 中添加了一个 singeLine 参数。将此参数设置为 true 可使文本字段成为一个水平可滚动的单行。(I57004b/168187755)

  • 使用新的挂起指针输入添加了用于点击、双击、长按和按下指示的手势检测器。还添加了一些实用程序,使开发人员更容易编写自己的手势检测器。(I00807)

  • 已在 foundation 中添加了 Modifier.focusable。使用它可以向组件添加可聚焦行为,并具有正确的语义和可访问性。(I41eb9b/152525426b/162865824)

  • 已移除之前已弃用的 API:已移除 Border,请改用 BorderStroke。已移除 Modifier.drawBorder,请改用 Modifier.border。已移除 Modifier.gravity,请改用 Modifier.align。已移除 Stack,请改用 Box(I32c2bb/172470874)

  • 已将 AbsoluteArrangement 重命名为 Arrangement.Absolute。(If26f2)

错误修复

  • 已将 DrawModifier API 从 androidx.compose.ui 包移动到 androidx.compose.ui.draw 包。创建了 DrawModifierDeprecated.kt 文件,其中包含类型别名/帮助程序方法,以帮助从已弃用的 API 迁移到当前 API。(Id6044b/173834241)
  • 已将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer 并根据 API 委员会的反馈将相关类更新为 GraphicsLayer。(I0bd29b/173834241)
  • <T> 已从 SubcomposeLayout 声明中移除。您现在可以在不指定类型的情况下使用它。(Ib60c8)
  • 已将 PointerInputData 的 uptime 和 position 字段设为非空。(Id468a)
  • MaterialTheme 现在为选择句柄和选择背景设置了正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColors 来自定义用于选择的颜色。(I1e6f4b/139320372b/139320907)
  • Box 的 alignment 参数已重命名为 contentAlignment。(I2c957)
  • offsetPx 修饰符已重命名为 offset。它们现在采用 lambda 参数而不是 State。(Ic3021b/173594846)
  • 添加了 WindowManager.isWindowFocused 以检查主机窗口是否处于焦点状态,以及一个提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2ab/170932874)
  • 在 TextInputService#onStateUpdated 中添加了 resetInput 参数(I3e8f5b/172239032b/171860947)
  • 更新了 TextFieldValue API
    • 将 TextFieldValue.composition 设置为只读
    • 移除因无效选择范围而引发的异常(I4a675b/172239032)
  • 已弃用以 Ambient 作为后缀命名的 Ambients,并用以 Ambient 为前缀的新属性替换它们,遵循其他 Ambients 和 Compose API 指南。(I33440)
  • 添加了 Android Typeface 包装器。您可以通过 typeface 函数加载 Android Typeface,例如 typeface(Typeface.DEFAULT)。还将 typefaceFromFontFamily() 重命名为 typeface()I52ab7)
  • 添加了 lint 检查,以检查 Modifier 工厂在内部使用 androidx.compose.ui.composed {},而不是标记为 @Composable。(I3c4bc)
  • 添加了 lint 检查,以检查 Modifier 工厂函数是否定义为 Modifier 的扩展,以便可以将它们流畅地链接在一起。(I07981)
  • 已将 Semantics 参数 mergeAllDescendants 重命名为 mergeDescendants。(Ib6250)
  • 测试中的时间控制(TestAnimationClock 及其用法)现在是实验性的(I6ef86b/171378521)
  • 移除旧的 ui-test 模块及其存根(I3a7cb)
  • 已将 TextUnit.Inherit 重命名为 TextUnit.Unspecified,与其他单位保持一致。(Ifce19)
  • 已更新 Alignment 接口并使其成为函数式。(I46a07b/172311734)
  • foundation:foundation-text 模块已合并到 foundation:foundation 中(Idac0f)
  • 已弃用 place(Offset) 和 placeRelative(Offset)。请改用带 int 偏移量的重载(I4c5e7)
  • 已将 id 重命名为 layoutId(用于 LayoutIdParentData)。已将 Measurable.id 重命名为 Measurable.layoutId。(Iadbcbb/172449643)

版本 1.0.0-alpha07

2020 年 11 月 11 日

androidx.compose.foundation:foundation:1.0.0-alpha07androidx.compose.foundation:foundation-layout:1.0.0-alpha07androidx.compose.foundation:foundation-text:1.0.0-alpha07 已发布。 版本 1.0.0-alpha07 包含以下提交。

API 更改

  • Modifier.fillMaxSize[Width|Height] 类似,我们现在支持 LazyColumn/Row 范围内的 Modifier.fillParentMaxSize[Width|Height] 中的分数(I797e2b/166586426)
  • 已从公共 API 中移除 KeyboardOptions.toImeOptions。(Ic2e45)
  • foundation AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor 已弃用。请改用 Material 库中提供的新版本。对于非 Material 应用,您应该改为创建自己的设计系统特定主题环境,这些环境可以在您自己的组件中使用。(I74accb/172067770)
  • foundation.Text 已弃用,并替换为 material.Text。对于不使用主题值的基本、无意见的文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
  • 已将 maxLines 添加到 TextFields(Ib2a5b)
  • 已更新 TextFields 以接受 KeyboardOptions(Ida7f3)
  • 已添加 KeyboardOptions 以在 TextFields 中使用(I9ca32)
  • 添加 BasicText 作为文本的设计无关 API,与 BasicTextField 平行。(I28268)
  • 已移除 ExperimentalLazyDsl 注解。现在可以使用 LazyColumn/LazyRow,而无需添加 @OptIn(Idab7ab/166584730)
  • 已弃用 BaseTextField。请改用 BasicTextField。(I896eb)
  • 已添加 BasicTextField 作为 CoreTextField 和 BaseTextField 的替代品(Id4cea)
  • 移除已弃用的 LazyColumnItems/LazyRowItems(I1d8a8)
  • 已移除用于调整到内在测量值的已弃用可组合项。(I18537b/171811496)
  • 已将 relativePaddingFrom 重命名为 paddingFrom。已添加 paddingFromBaseline 修饰符,作为指定从布局边界到文本基线的距离的便利方法。(I0440ab/170633813)
  • aspectRatio 修饰符添加了 matchHeightConstraintsFirst 参数,可用于指定修饰符在尝试宽度对应项之前调整高度约束的大小。(Ie7c43b/155290593
  • 已移除弃用的 DpConstraints。(I87884b/171702471

错误修复

  • 引入了 ScaleFactor 内联类,用于分别表示水平和垂直轴的缩放因子,以便支持非均匀缩放用例。
    • 向 ContentScale 添加了 computeScaleFactor 方法。
    • 添加了 ContentScale.FillBounds 以执行非均匀缩放,将源边界拉伸以完全占据目标。
    • 添加了运算符方法,以使用 Size 参数计算 ScaleFactor 参数。
    • Ic96a6b/172291582
  • captureToBitmap 已移至 captureToImage。(I86385
  • 将 CoreText 标记为 @InternalTextApi。请改用 BasicText。(I6aaeb
  • 将 KeyboardOptions 重命名为 ImeOptions(I82f36
  • 将 KeyboardType 和 ImeAction 移至 KeyboardOptions 中(I910ce
  • CoreTextField 已标记为 @InternalTextApi。请改用 BasicTextField(Ie2469
  • 已移除 ExperimentalSubcomposeLayoutApi 注解。现在可以使用 SubcomposeLayout,无需添加 @OptIn(I708ad
  • 引入了 ui-test-junit4 模块(Ib91f8
  • 更新了 Icon API,以接收 Color.Unspecified 作为可能的着色颜色,这将绘制提供的资产或画笔,而无需 ColorFilter。以前,尝试使用 Color.Unspecified 忽略着色会导致使用透明颜色着色,最终导致没有任何内容渲染。(I049e2b/171624632
  • MeasureResult 已移出 MeasureScope。(Ibf96db/171184002
  • 一些与布局相关的符号已从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98b/170475424
  • androidx.ui.test 已移至 androidx.compose.ui.test(I9ffdb
  • FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 包(Ied2e7
  • 添加了没有回调的 SelectionContainer(Ibfadb
  • 添加了 SelectionContainer 中 SelectionHandles 位置的测试。(Ie93db
  • 添加了键盘自动更正 IME 选项(I57b8d

版本 1.0.0-alpha06

2020 年 10 月 28 日

androidx.compose.foundation:foundation:1.0.0-alpha06androidx.compose.foundation:foundation-layout:1.0.0-alpha06androidx.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(I81566b/169509805
  • alignByBaseline 已添加到 RowScope 中,alignWithSiblings 已重命名为 alignBy(I06503b/170628732
  • Box 已成为内联函数。(Ibce0cb/155056091
  • 向 CoreTextField 添加了 maxLines(Ibee58b/143687793
  • 向 CoreTextField 添加了 softwrap。(I21a4b

错误修复

  • 弃用 VectorPainter,转而使用 rememberVectorPainter,以更好地表明可组合 API 在内部利用“remember”在组合之间持久化数据。(Ifda43
  • 在 ComposeTestRule 中启用过渡;从 ComposeTestRule 中删除启用闪烁光标的选项。(If0de3
  • 向 CoreTextField 添加了单行键盘选项(I72e6d
  • 将 Radius API 重命名为 CornerRadius,以更好地表达其在 Compose 中的用法。更新了文档,表明负角半径被钳制为零。(I130c7b/168762961
  • 添加了在组合修饰符中指定检查器信息的功能(Idee08b/163494569
  • 添加了键盘大写 IME 选项(I8ac38
  • 修复了 Rtl 处理程序位置。(I6e1e0
  • 重大更改:由于指针事件中唯一可以更改的值是消耗数据,因此已移除 PointerInputFilter.onPointerEvent(...) 的返回值。现在,您无需从 PointerInputFilter.onPointerEvent(...) 返回数据,只需修改传入的 PointerEvents 的消耗数据即可。(I6acd0
  • 在选择菜单中添加了“全选”选项(Ief02b

版本 1.0.0-alpha05

2020 年 10 月 14 日

androidx.compose.foundation:foundation:1.0.0-alpha05androidx.compose.foundation:foundation-layout:1.0.0-alpha05androidx.compose.foundation:foundation-text:1.0.0-alpha05 已发布。版本 1.0.0-alpha05 包含这些提交。

API 更改

  • CoreTextField 现在支持光标功能(Id23aa
  • 弃用 contentColor() 和 currentTextStyle() API,并分别用 AmbientContentColor 和 AmbientTextStyle 环境替换它们。您可以通过在环境属性上使用 .current 来访问当前值,就像任何其他环境一样。进行此更改是为了保持一致性,并避免有多种方法来完成同一件事。此外,还重命名了一些环境属性,以更好地描述其目的,如下所示

    • ContentColorAmbient -> AmbientContentColor
    • TextStyleAmbient -> AmbientTextStyle
    • IndicationAmbient -> AmbientIndication
    • EmphasisAmbient -> AmbientEmphasisLevels
    • RippleThemeAmbient -> AmbientRippleTheme(I37b6d

错误修复

  • 作为标准化内联类的哨兵值的一部分,将 Color.Unset 重命名为 Color.Unspecified,以与其他内联类保持一致(I97611b/169797763
  • 添加了复制/粘贴/剪切辅助功能操作(I6db4f
  • 引入了 TextOverflow.None。当溢出为 None 时,Text 将不再处理溢出,并将其实际大小报告给 LayoutNode。(I175c9b/158830170
  • 将 Size.Unspecified 参数更新为 Float.NaN,而不是 Float.POSITIVE_INFINITY。更新了 Painter 实现,以检查 Size.Unspecified 以及非有限大小。(I95a7e
  • 添加了 Paging Compose 模块和分页集成(Ib85da
  • 修改 LazyListScope 以接收可为空的值(I1765b
  • OnPositionedModifier 已重命名为 OnGloballyPositionedModifier,onPositioned() 已重命名为 onGloballyPositioned()。(I587e8b/169083903
  • 添加了 LazyColumn/Row 的示例(Idc16d
  • 修复了 items 和 itemsIndexed 方法以允许使用 emptyList(I06647
  • 添加了用于指定检查器信息的 DSL(Ic9a22
  • 将 LongPress 移至 Text 中。(Iff2bc
  • 禁用 Text 中的选择,以及演示。(Ie7e97
  • 支持将 AnnotatedString 转换为 SpannableString 以进行辅助功能。(Ief907
  • 已移除 PointerInputFilter.onPointerInput(...)。应改用 PointerInputFilter.onPointerEvent(...)。(I6f04a

版本 1.0.0-alpha04

2020 年 10 月 1 日

androidx.compose.foundation:foundation:1.0.0-alpha04androidx.compose.foundation:foundation-layout:1.0.0-alpha04androidx.compose.foundation:foundation-text:1.0.0-alpha04 已发布。版本 1.0.0-alpha04 包含这些提交。

API 更改

  • Stack 重命名为 Box。之前存在的 foundation.Box 将弃用,取而代之的是 compose.foundation.layout 中的新 Box。新 Box 的行为是在有多个子元素时将子元素一个叠一个地堆叠 - 这与之前的 Box 不同,之前的 Box 的行为类似于 Column。(I94893b/167680279
  • Box 装饰参数已弃用。如果要为 Box 添加装饰/填充,请改用修饰符(Modifier.background、Modifier.border、Modifier.padding)(Ibae92b/167680279
  • 添加了一个新的 LazyListState 类。这允许观察和控制 LazyRow 和 LazyColumn 组件的滚动位置。可以使用 rememberLazyListState() 创建实例,并将其传递给组件的 state 参数。目前,在这个初始版本中可以观察到第一个可见项和偏移量。(Ic7cb7b/159307669
  • 惰性列表位置和滚动偏移量现在在 Activity 重建过程中被保存和恢复(Ie045fb/166589058
  • 添加长按语义操作(I6281bb/156468846
  • 添加了 MutatorMutex 实用程序,用于随着时间的推移保持共享状态的单个 mutator,并根据优先级取消冲突的 mutator(I3f975
  • 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行注释,使其成为内部 API 并隐藏其 kdoc(I554ebb/168308412
  • 从带有字符串输入的 Text 中删除了 inlineContent 参数。它不会被使用,因为 inlineContent 必须与 AnnotatedString 一起使用。(Ief403
  • 已删除弃用的自定义 Arrangement API。(Ic576db/168297922b/168297923
  • 已将 unbounded 参数添加到 wrapContentSize 修饰符中,它允许使用无限最大约束来测量布局元素。(I77951b/158559319
  • 我们阻止了布局作用域内容的静态导入(例如 RowScope 中的 alignWithSiblings)。应改用显式作用域替代方案:with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }。(I216beb/166760797

错误修复

  • 更新了许多图形 API
    • 更新了缩放和旋转变换 API,以使用单个 Offset 参数来表示枢轴坐标,而不是在 DrawScope 和 DrawTransform 中分别使用 x/y 坐标的浮点参数
    • 删除了 Rect.expandToInclude 和 Rect.join 方法
    • 更新了 Radius 文档,除了椭圆形之外还说明了椭圆
    • 添加了文档,指示不应直接调用内联 Radius 类的公共构造函数,而应通过其函数构造函数实例化 Radius 对象
    • 删除了 RoundRect API 以查询 topRight、bottomRight、bottomCenter 等。
    • 弃用 Rect.shift,取而代之的是 Rect.translate
    • 删除了 RoundRect.grow 和 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 的矩形的 Size API
    • 向 Radius 添加了一个析构 API
    • 将各种 RoundRect 扩展函数迁移为属性
    • I8f5c7b/168762961
  • 通过在每次滚动时不进行不必要的重新组合,对 LazyColumnFor/LazyRowFor 滚动进行了性能优化(I64f65b/168293643b/167972292b/165028371
  • 修复了在滚动后更改项目时 LazyColumnFor/LazyRowFor 中的崩溃,并在删除先前可见的项目时实现了自动向上滚动,因此我们不再显示末尾的空隙(I220abb/161480164b/167855468
  • 不再允许嵌套像 ScrollableContainer 和 LazyColumnFor 这样相同方向的可滚动容器。它从未被支持,并且破坏了 LazyColumnFor 项目组合的抛掷和所有惰性(I6e101
  • 更新了许多图形 API
    • 使用作用域转换方法更新了 DrawScope API,以指示转换仅在回调内应用,并在回调调用后删除
    • 更新了 clipPath 文档以引用 Path 而不是圆角矩形
    • 修复了 clipPath 中 right 参数的文档中的间距
    • 将 DrawScope.drawCanvas 重命名为 drawIntoCanvas 并删除了 size 参数
    • 将 inset 方法中的 dx/dy 参数重命名为 horizontal 和 vertical
    • 添加了 inset 重载,为所有 4 个边界提供相同的值
    • 删除了 inset 方法中指示 inset 将应用于所有 4 个边的文档
    • 更新了 Rect 类的文档
    • 更新了 Rect 参数上的注释以匹配 kdoc 样式
    • 删除了 Rect.join 和 Rect.expandToInclude
    • 为 Rect.translate(offset) 创建了重载并弃用了 Rect.shift
    • If086ab/167737376
  • 将 AccessibilityScrollState 添加到语义属性。(Ifeda9
  • 使 TextRange 内联以避免创建对象。(Id034b
  • ParagraphConstraints 已删除。宽度现在直接传递给 Paragraph。(Ica712

版本 1.0.0-alpha03

2020 年 9 月 16 日

androidx.compose.foundation:foundation:1.0.0-alpha03androidx.compose.foundation:foundation-layout:1.0.0-alpha03androidx.compose.foundation:foundation-text:1.0.0-alpha03 已发布。版本 1.0.0-alpha03 包含这些提交。

API 更改

  • InnerPadding 重命名为 PaddingValues。(I195f1b/167389171
  • 布局 API 中对重力的使用已一致地重命名为对齐或对齐。(I2421ab/164077038
  • 向 Stack 添加了一个对齐参数,允许指定所有 Stack 子元素的默认对齐方式。(Ie80cab/164085265

错误修复

  • DpConstraints 和使用它的 API 已弃用。(I90cdbb/167389835
  • widthIn 的参数 minWidthmaxWidth 已重命名为 minmax。类似地,对于 preferredWidthInheightInpreferredHeightIn。(I0e5e1b/167389544
  • 在 ComposeTestRule 上添加了 onNode 和其他全局方法,因为当前的全局方法将被弃用。(Ieae36
  • 修复了 GestureScope 中的大小和位置计算,这导致了无效的滑动手势的生成(Iaf358b/166589947
  • createAndroidComposeRuleAndroidInputDispatcherandroidx.ui.test.android 移动到 androidx.ui.testIdef08b/164060572

版本 1.0.0-alpha02

2020 年 9 月 2 日

androidx.compose.foundation:foundation:1.0.0-alpha02androidx.compose.foundation:foundation-layout:1.0.0-alpha02androidx.compose.foundation:foundation-text:1.0.0-alpha02 已发布。版本 1.0.0-alpha02 包含这些提交。

错误修复

  • TestUiDispatcher 被标记为实验性(Iae99db/161247083
  • 添加了 ManualFrameClock.hasAwaiters 以查看是否有任何内容正在等待该时钟的帧;runWithManualClock 作为 runBlocking 的替代方案,用于运行需要 ManualFrameClock 的测试;TestUiDispatcher.Main 可轻松访问测试中的主 UI 调度程序。

    例如

    @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")
        }
    }
    

    I0a85bb/161247083

版本 1.0.0-alpha01

2020 年 8 月 26 日

androidx.compose.foundation:foundation:1.0.0-alpha01androidx.compose.foundation:foundation-layout:1.0.0-alpha01androidx.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-dev17androidx.compose.foundation:foundation-layout:0.1.0-dev17androidx.compose.foundation:foundation-text:0.1.0-dev17 已发布。 版本 0.1.0-dev17 包含这些提交。

API 更改

  • 为 Row 和 Column 添加了 spacedBy Arrangement,以启用使用固定间距定位布局子元素的功能。还添加了 aligned Arrangement,以启用将布局子元素一个接一个地定位并在 Row/Column 中根据 Alignment 对齐的功能。先前版本的 Arrangement.Vertical#arrange 和 Arrangement.Horizontal#arrange 方法已弃用,并且将来将不支持编写自定义 Arrangement。 (I6733db/161985975)
  • Offset 已成为内联类 (Iaec70)
  • 已从 TextField 中删除 onFocusChanged 回调。请改用 Modifier.focusObserver。 (I51089b/161297615)
  • Modifier.drawBorder 已弃用。请改用 Modifier.border。Border 数据类已替换为 BorderStroke (I4257db/158160576)
  • VerticalScroller 和 HorizontalScroller 已删除。请改用 ScrollableColumn/Row。Modifier.drawBackground 已删除。请改用 Modifier.background (I73b0db/163019183)
  • 从 LazyItemScope 中删除标记为已弃用的 fillMax* 修饰符,因为它们使为不是 LazyColumnFor 直接子元素的元素正确添加此类修饰符变得更加困难 (Ifa78d)
  • 添加了 LazyColumn/LazyRow 实现作为 DSL (I93cc6)
  • Constraints 现在是内联类 (I88736)
  • 添加了使用 fillMaxWidth、fillMaxHeight 和 fillMaxSize 修饰符将布局大小调整为可用空间一部分的功能。 (I945bbb/161562591)

错误修复

  • 向 SelectionContainer 添加了修饰符参数 (I4aadab/161487952)
  • 向 SemanticsPropertyKey 添加了 mergePolicy lambda。这可用于为 mergeAllDescendants 语义合并定义自定义策略。默认策略是在已存在时使用父级值,否则使用子级值。 (Iaf6c4b/161979921)
  • PlacementScope.placeAbsolute() 已重命名为 PlacementScope.place(),并且先前版本的 PlacementScope.place() 已重命名为 PlacementScope.placeRelative()。因此,PlacementScope.place() 方法将不再自动在从右到左的上下文中镜像位置。如果需要此功能,请改用 PlacementScope.placeRelative()。 (I873acb/162916675)
  • 已删除已弃用的 FilledTextField 组件。请改用 TextField 以获取 Filled 文本字段的 Material Design 实现。 (I5e889)
  • 向 LinearProgressIndicator 添加了 backgroundColor 参数,并从 CircularProgressIndicator 中删除了内部填充。添加了新的 ProgressIndicatorConstants.DefaultProgressAnimationSpec,可在值之间动画化进度时用作默认 AnimationSpec (If38b5b/161809914b/161804677)
  • 现在已弃用 state { ... } 可组合项,建议改用显式调用 remember { mutableStateOf(...) } 以提高清晰度。这减少了状态管理的整体 API 表面和概念数量,并与类属性委托的 by mutableStateOf() 模式相匹配。 (Ia5727)
  • 将 RRect 重命名为 RoundRect 以更好地符合 Compose 命名模式 创建了与 RRect 类似的函数构造函数,并弃用了 RRect 函数构造函数 (I5d325)
  • 已删除 onChildPositioned 和 OnChildPositionedModifier。开发人员应改在子布局上使用 onPositioned 和 OnPositionedModifier。 (I4522eb/162109766)
  • IntSize 现在是内联类 (I2bf42)
  • 长按空白区域进行编辑。 (Ib1e5b)
  • 点击文本后隐藏浮动工具栏。 (If4525)
  • 更新选择时隐藏浮动工具栏。 (I8444c)
  • 失去焦点时取消选择。 (I781a2)

版本 0.1.0-dev16

2020 年 8 月 5 日

androidx.compose.foundation:foundation:0.1.0-dev16androidx.compose.foundation:foundation-layout:0.1.0-dev16androidx.compose.foundation:foundation-text:0.1.0-dev16 已发布。 版本 0.1.0-dev16 包含这些提交。

API 更改

  • 为 Lazy 列表的 itemContent 参数添加了 LazyItemScope。它提供修饰符以填充父级最大大小,这解决了当项目应填充视口且常规 Modifier.fillMaxSize() 不起作用(因为项目使用无限约束进行测量)时的用例。 (Ibd3b2b/162248854)
  • 将对话框移至 ui (I47fa6)
  • 添加了 LazyColumnForIndexed/LazyRowForIndexed - LazyColumnFor/LazyRowFor 的版本,它们在 itemCallback 中同时提供索引和项目。当除了当前项目之外还需要知道当前索引时,这很有用。 (I65ff3)
  • Modifier.deternimateProgress 已重命名为 Modifier.progressSemantics (I9c0b4)
  • LazyColumnItems 已重命名为 LazyColumnFor。LazyRowItems 已重命名为 LazyRowFor (I84f84)
  • 出于最佳实践原因添加了一些标记/注释。 (I66b20)
  • foundation.shape.corner 包已展平为 foundation.share (I46491b/161887429)
  • 为 LazyRowItems/LazyColumnItems 添加了 сrossaxis gravity 参数。LazyRowItems/LazyColumnItems 现在支持包装内容行为。 (Ib39fc)
  • ZoomableState 已重命名为 ZoomableController。已为 smoothScale 添加了自定义曲线支持。已添加 enabledonZoomStarted 功能 (If8b8f)
  • Material FilledTextField 已重命名为 TextField,基础 TextField 已重命名为 BaseTextField,以便于发现和使用最简单的所需 API (Ia6242b/155482676)
  • 先前已弃用的 AdapterList 已删除。请改用 LazyColumnItems (I12b9b)
  • Modifier.drawBackground 已重命名为 Modifier.background (I13677)
  • 已删除旧的 ConstraintLayout DSL。ConstraintSet2 已重命名为 ConstraintSet。 (If58d1b/162450908)
  • 添加了 Modifier.absoluteOffset() 和 Modifier.absoluteOffsetPx()。与偏移修饰符不同,绝对偏移修饰符不会在从右到左的上下文中自动镜像 (I3aa21)
  • RowColumn 现在是内联函数,从而大大减少了使用它们的开销。 (I75c10)

错误修复

  • 解决广泛的 API 修复问题 (I077bc)
    1. 删除未使用的 OffsetBase 接口
    2. 使 Offset 和 IntOffset 类对齐,以具有一致的 API 表面
    3. 将 IntOffset.Origin 重命名为 IntOffset.Zero 以与 Offset API 保持一致
    4. 将 nativeCanvas 方法从 Canvas 接口中移出,以支持使用者创建他们自己的 Canvas 实例
    5. 创建存根 EmptyCanvas 类以重构 DrawScope 为非空参数而不是 lateinit,并确保字段的非空性
    6. 将 ClipOp 枚举重命名为 PascalCase
    7. 将 FilterQuality 枚举重命名为 PascalCase
    8. 将 StrokeJoin 枚举重命名为 PascalCase
    9. 将 PointMode 枚举重命名为 PascalCase
    10. 将 PaintingStyle 枚举重命名为 PascalCase
    11. 将 PathFillType 枚举重命名为 PascalCase
    12. 将 StrokeCap 枚举重命名为 PascalCase
    13. 更新 DrawCache 实现,不再使用 lateinit 参数
    14. 更新 DrawScope,不再对 fillPaint 和 strokePaint 内部参数使用延迟委托
    15. 更新 Image 可组合项以避免使用 Box,从而减少开销
    16. 更新 Outline 类以具有 @Immutable 注释
    17. 更新 PathNode 以对每个路径指令具有 @Immutable 注释
    18. 更新 Vector 子组合以删除对相等性的冗余条件检查,因为 Compose 已经处理了它们
    19. 已弃用 Rect 伴随构造函数方法,建议改用函数构造函数
    20. 使用 @Immutable 和 @Stable API 更新 Brush 类和函数构造函数
    21. 更新 VertexMode 枚举为 PascalCase
    22. 更新 DrawScope selectPaint 方法以在绘制参数发生更改时有条件地覆盖绘制上的笔划参数
    23. 更新 Size 以添加解构 API,将 UnspecifiedSize 重命名为 Unspecified 并删除未使用的函数
  • 添加了 MonotonicFrameAnimationClock,它使您可以使用 MonotonicFrameClock 作为 AnimationClockObservable 来弥合新的基于协程的时钟和仍然使用旧的基于回调的时钟的 API 之间的差距。

    ManualAnimationClock 的 MonotonicFrameClock 等效项现在是 ManualFrameClock。 (I111c7b/161247083)

  • 已删除 SemanticsNodeInteraction.performPartialGesture。请改用 SemanticsNodeInteraction.performGesture。 (Id9b62)

  • SemanticsNodeInteraction.getBoundsInRoot() 重命名为 SemanticsNodeInteraction.getUnclippedBoundsInRoot() (Icafdfb/161336532)

  • 已更新从右到左支持的 API。已添加 LayoutDirectionAmbient,可用于读取和更改布局方向。已删除 Modifier.rtl 和 Modifier.ltr。 (I080b3)

  • Modifier.plus 已弃用,请改用 Modifier.then。'Then' 具有更强的排序信号,同时还禁止键入 Modifier.padding().background() + anotherModifier,这会破坏链并难以阅读 (Iedd58b/161529964)

  • 添加了 isFocused()isNotFocused() SemanticsMatcher。 (I0b760)

  • 添加了 RemeasurementModifier。它允许用户同步重新测量布局。通常,您不需要它,因为重新测量/重新布局会自动发生,但我们在滚动期间在 LazyColumnItems 内部使用它。 (I5f331b/160791058)

  • isSystemInDarkTheme 现在始终考虑系统范围的深色主题设置,并在 Q 之前忽略省电状态,遵循最新的指南。 (I0c10c)

  • OnChildPositioned 已弃用。请改在子元素上使用 OnPositioned。 (I87f95b/162109766)

  • 将 AndroidComposeTestRule 重命名为 createAndroidComposeRule。(I70aaf)

  • 添加获取 TextLayoutResult 的辅助功能操作(I9d6e6)

版本 0.1.0-dev15

2020年7月22日

androidx.compose.foundation:foundation:0.1.0-dev15androidx.compose.foundation:foundation-layout:0.1.0-dev15androidx.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' (I400ceb/157225838b/149460415b/154105299)
  • Modifier.draggable 和 Modifier.scrollable API 已重新设计。DragDirection 已被移除,取而代之的是 Orientation。可滚动所需的 State 已简化。ScrollableState 已重命名为 ScrollableController(Iab63cb/149460415)
  • 单值语义属性现在使用调用样式。例如,“semantics { hidden = true }”现在写成:semantics { hidden() }。( Ic1afdb/145951226b/145955412)
  • RoundedCornerShape 和 CutCornerShape 使用的角尺寸现在可以大于 50%(Id2340b/160400213)
  • 将 Image 可组合组件的默认 ContentScale 参数从 Inside 更改为 Fit。这样做是为了在布局大小大于绘图程序的固有大小(同时保持纵横比)时,使绘图程序向上扩展。此行为更符合对 Image 提供固定大小的预期,同时不会影响仅使用固有大小来计算可组合组件大小时的默认行为。( I40ae3b/159838006)
  • 在顶级 API 中使用 AnimationSpec 代替 AnimationBuilder 以阐明静态动画规范的概念 -通过删除创建 AnimationSpec(如 tween、spring)的 lambda 要求来改进转换 DSL。它们改为直接采用构造函数参数。-改进 AnimationSpec 的整体易用性,打开构造函数而不是依赖于构建器-将 KeyFrames 和 Tween 的持续时间和延迟更改为 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(I4066db/155211005)
  • 用 Int 替换了 IntPx 的用法。用 IntOffset 替换了 IntPxPosition。用 IntSize 替换了 IntPxSize。( Ib7b44)
  • androidx.ui.foundation.shape.RectangleShape 已移除;改用 androidx.ui.graphics.RectangleShape(I94939b/154507984)
  • 为了合并用于表示大小信息的类的数量,标准化使用 Size 类而不是 PxSize。这提供了内联类的优势,可以利用 long 打包 2 个 float 值来表示以 float 表示的宽度和高度。( Ic0191)
  • 为了合并用于表示定位信息的类的数量,标准化使用 Offset 类而不是 PxPosition。这提供了内联类的优势,可以利用 long 打包 2 个 float 值来表示以 float 表示的 x 和 y 偏移量。( I3ad98)
  • 添加了 Modifier.zoomable 以实现捏合缩放功能(Id5d63)
  • Toggleable 组件已弃用。改用 Modifier.toggleable(I35220b/157642842)
  • MutuallyExclusiveSetItem 已弃用。改用 Modifier.selectable。( I02b47b/157642842)
  • TestTag 现已弃用。改用 Modifier.testTag。( If5110b/157173105)
  • 向 Text 添加 fontWeight 参数,该参数之前意外未添加(I56937)
  • 在各种 Compose 类中替换了 Px 类的用法,作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分(I19d02)
  • VerticalScroller 现在开箱即用地提供 Column。HorizontalScroller 现在开箱即用地提供 Row。( Ieca5db/157020670)
  • 在各种 Compose 类中替换了 Px 类的用法,作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分(Iede0b)
  • Modifier.indication 已添加到 foundation 包中。使用它在您的自定义可交互元素上显示按下/拖动/其他指示(I8425fb/155287131)
  • VerticalScroller 和 HorizontalScroller 现在支持反向滚动,如果在 ScrollerPosition 上设置 isReversed(I953bd)
  • 支持将可组合组件添加到文本布局中。( I1373c)
  • 合并了 CanvasScope 实现,因此现在只有 DrawScope 和 ContentDrawScope 将 CanvasScope 重命名为 DrawScope。更新 DrawScope 以实现 Density 接口并提供 LayoutDirection 删除 ContentDrawScope 中的 DrawScope 子类 Painter 和 PainterModifier 已更新为不再维护自己的 RTL 属性,因为 DrawScope 已提供此功能,无需手动提供(I1798e)
  • 删除了已弃用的 DrawBackground API,取而代之的是 Modifier 上的 drawBackground 扩展 API。重构了颜色、画刷和油漆 drawBackground 实现以减少代码路径,并删除了 Modifier 作为组合的一部分创建的要求。( I0343a)
  • 更新了公开 Canvas 的更高级别 Compose API 以公开 CanvasScope。这消除了使用者维护自己的 Paint 对象的需要。对于仍然需要访问 Canvas 的使用者,他们可以使用 drawCanvas 扩展方法,该方法提供回调以使用底层 Canvas 发出绘图命令。( I80afd)
  • HorizontalScroller 和 VerticalScroller 不再使用保存的实例状态恢复其滚动位置。( Ia0faeb/155075048)
  • FocusManagerAmbient 已移除。使用 FocusModifier.requestFocus 获取焦点。( Ic4826)
  • 表格布局已暂时移除,直到我们使用更新的 API 再次提供它。( Id88a7)
  • 创建了 CanvasScope API,它包装了一个 Canvas 对象以公开一个无状态的、声明式的绘图 API 表面。变换包含在其自己的接收器范围内,大小信息也作用于相应的内插边界。它不需要使用者维护自己的 Paint 状态对象来配置绘图操作。

    添加了 CanvasScopeSample,并更新了演示应用程序以包含声明式图形演示(Ifd86d)

  • ColoredRect 已移除。改用带有 drawBackground 修饰符的 Box(I983c7b/152753731)

  • 向 TextField 添加光标颜色自定义(I6e33f)

  • 现在可以通过使用由 onTextInputStarted 回调传递的 SoftwareKeyboardController 来隐藏/显示软件键盘(I8dc44b/151860051)

  • 与 TextField 一起使用的 TextFieldValue 现在可以在这样使用时在活动重建后继续存在:var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }(I5c3ceb/155075724)

  • 向 Text() 添加常用参数。如果您当前正在创建本地文本样式以传递少量这些参数,例如Text(style = TextStyle(textAlign = TextAlign.Center)),您现在可以直接提供这些参数:Text(textAlign = TextAlign.Center)(I82768)

  • 用 FocusNode 替换了 CoreTextField/TextField focusIdentifier 参数,以与焦点子系统集成。( I7ea48)

  • TextField 更新 - 在水平维度上,它将占用授予它的所有可用空间(Ib08dfb/154638552)

  • 添加了 InteractionState 和 Interaction,使得构建对 UI 状态变化(例如按下和拖动)做出反应的组件更加容易(Icfe25b/152525426)。

  • RectangleShape 从 androidx.ui.foundation.shape.* 移动到 androidx.ui.graphics.*(Ia74d5b/154507984)。

  • 将 API 中所有可为空的 Color 使用替换为不可为空的,并使用 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 相同的结果(I45f09b/152842521)。

  • 移除 ProvideContentColor,改为直接使用 Providers 中的 ContentColorAmbient(Iee942)。

  • 向文本添加 color 参数,允许覆盖文本样式的颜色,而无需手动与主题中提供的样式合并。(I41a66)。

  • 改进 DrawModifier API。

    • 将 draw() 的接收者作用域设为 ContentDrawScope。
    • 移除 draw() 上的所有参数。
    • DrawScope 的接口与以前的 CanvasScope 相同。
    • ContentDrawScope 具有 drawContent() 方法(Ibacedb/152919067)。
  • ColoredRect 已弃用。请改用 Box(Modifier.preferredSize(width, height).drawBackground(color))。(I499fab/152753731)。

  • 形状主题系统已根据 Material Design 规范更新。现在,您可以提供小型、中型和大型形状供大多数组件使用(Ifb4d1)。

  • 将 Modifier 加号运算符替换为工厂扩展函数(I225e4)。

  • Draggable 已移至修饰符(Id9b16b/151959544)。

  • Text 从 androidx.ui.core 移动到 androidx.ui.foundation 包。(I87ce5)。

  • 向 Checkbox、Switch 和 Toggleable 添加 enabled 参数(I41c16)。

  • Ripple 现在是 Modifier。虽然 Clickable 尚未转换,但建议的使用方法是 Clickable(onClick = { ... }, modifier = ripple())Ie5200b/151331852b/150060763)。

  • 添加 VectorPainter API 以替换现有的矢量图形子合成 API。子合成的结果是 VectorPainter 对象而不是 DrawModifier。弃用以前的 DrawVector 可组合项,转而使用 VectorPainter。

    Image(Painter) API 重命名为 PaintBox(Painter)。创建 Vector 可组合项,其行为类似于 Image 可组合项,但使用 VectorAsset 而不是 ImageAsset(I9af9ab/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(I595e1b/149827027)。

  • Stack 组件支持从右到左的方向性(Ic9e00)。

  • 添加 Icon、IconButton 和 IconToggleButton,移除 AppBarIcon。您可以直接用 IconButton 替换现有的 AppBarIcon 用法,它们现在将具有正确的触摸目标。有关用法信息,请参阅示例,并参阅 Icons 以获取您可以直接与这些组件一起使用的提供的 Material Icons。(I96849)。

  • DrawShape 可组合项已移除。请改用 DrawBackground 修饰符。(I7ceb2)。

  • 添加 AdapterList,这是一种滚动列表组件,仅组合和布局可见项目。当前已知问题包括它仅限垂直方向,并且未完全处理对其子项更改的所有情况。(Ib351b)。

  • 已添加 Scrollable 组件,它允许创建自定义滚动器/列表(I5fd37)。

  • 将 background 重命名为 DrawBackground,并将其默认为记忆化(Ia0bd3)。

  • 向 Box 添加填充、边框、形状和背景参数(I05027b/148147281)。

  • 添加 Canvas 组件。此可组合项占用一定大小(由用户提供),并允许您使用 CanvasScope 进行绘制(I0d622)。

  • Border 修饰符重命名为 DrawBorderI8ffcc)。

  • 添加 Box 组件以组合布局和绘制常见功能。(I6e2a7)。

  • 滚动器现在表现出原生 Android 抛掷运动行为。(I922afb/147493715)。

  • 用 Border 修饰符替换 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)I94985b/157133803)。

  • 移除 Row 和 Column 中已弃用的 RowAlign、ColumnAlign。(If60d4b/155858731)。

  • 移除已弃用的 LayoutTag(),请改用 Modifier.tag()。移除已弃用的 Modifier.matchParent(),请改用 Modifier.matchParentSize()。(If8044)。

  • 添加了 offsetPx 布局修饰符,可用于定义(动态)以 px 为单位的偏移量。(I5af57)。

  • AlignmentLineOffset 可组合项已弃用,请改用 relativePaddingFrom() 修饰符。CenterAlignmentLine 可组合项已移除。(I60107)。

  • 添加了 defaultMinSizeConstraints 布局修饰符,仅当传入的对应约束未指定(最小约束为 0,最大约束为无穷大)时,才将大小约束设置为包装的布局。(I311eab/150460257)。

  • Container 已移除。请改用 Box(Ibbc2bb/151407926)。

  • 移除已弃用的 LayoutWidth/Height/Size 修饰符。(Ib0bc1)。

  • 为 offset 修饰符添加了默认参数值。(I37f06)。

  • 添加了对称填充修饰符。(I39840)。

  • 移除已弃用的 LayoutAspectRatio 修饰符。(I65a74)。

  • 移除已弃用的 LayoutAlign 修饰符。(I10877)。

  • 修复了宽度和高度修饰符中的一个错误,该错误导致包装的布局在没有相反轴约束的情况下进行测量。(I210b8b/154797971)。

  • 分别向 Row 和 Column 添加了 verticalGravity 和 horizontalGravity 参数。(I7dc5a)。

  • 更新 wrapContentWidth 和 wrapContentHeight 以预期垂直或水平 Alignment 而不是任何 Alignment。gravity 修饰符已更新为接受垂直或水平 Alignment。Row、Column 和 Stack 已更新为支持自定义连续 Alignment。(Ib0728)。

  • 使 Alignment 能够使用任意值进行实例化。添加了 1D Alignment。(Ia0c05)。

  • 将 EdgeInsets 重命名为 InnerPadding。将 Material Button 的 innerPadding 参数重命名为 paddding。(I66165)。

  • alignToSiblings 现在接受 Measured 而不是 Placeable。(I5788d)。

  • 添加了用于调整大小到固有测量的修饰符,并弃用了用于此目的的组件。(I8295d)。

  • 添加了对自定义 ConstraintLayout 子项尺寸的支持(Idb1a5)。

  • 移除已弃用的 Wrap 和 Center 可组合项。(I29e23)。

  • 添加 LayoutModifier2,一个用于定义布局修饰符的新 API;弃用 LayoutModifier(If32ac)。

  • RowScope 和 ColumnScope 成员现在可以在 Row 和 Column 之外访问。(I3a641)。

  • Container 已弃用。请改用 Box。(I675ceb/151407926)。

  • 添加了 LayoutOffset 修饰符以偏移布局位置(I0b8a3)。

  • Compose 布局中对 Rtl 的初始支持(Ia5519)。

  • 更新了 LayoutAlign,不再填充可用空间了 (I2b14f)

  • 移除了 AspectRatio 可组合函数,转而使用修饰符。删除了已废弃的 FlexColumn、FlexRow 可组合函数和 Spacing 修饰符 (Iec8a7)

  • 移除了 Row 和 Column 的 LayoutInflexible 修饰符 (I0d820)

  • 为 TextField 实现拖动选择句柄以更改选择。(I27032)

  • 为 TextField 选择实现了长按并拖动。(I17919)

错误修复

  • 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。Clickable 现在使用 ripple 作为默认指示(如果您的应用程序中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用 clickable 即可免费获得 ripple 指示。如果您需要自定义 ripple 的颜色/大小/边界参数,您可以手动创建一个 RippleIndication 并将其作为指示参数传递给 clickable。(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)
  • 在此更改之前,如果存在,Compose 编译器插件将以非平凡的方式拦截对 @Composable 函数内部构造函数的调用 (I5205a, b/158123804)
  • 添加了 viewModel() 可组合函数,允许创建或获取已创建的 ViewModel,类似于它在 Activity 或 Fragment 中的工作方式 (I5fdd1)
  • 重构了 Radius 类,使其成为内联类。移除了伴生对象创建方法,转而使用具有默认参数的函数构造函数,以便沿 y 轴的半径与强制的 x 轴半径参数匹配。

    更新了 DrawScope.drawRoundRect,使其使用单个 Radius 参数,而不是沿 x 轴和 y 轴的 2 个单独的浮点值 (I46d1b)

  • 作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分,替换了各种 Compose 类中 Px 类的用法。完全删除了 Px 类 (I3ff33)

  • 作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分,替换了各种 Compose 类中 Px 类的用法 (I086f4)

  • 作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分,替换了各种 Compose 类中 Px 类的用法 (Id3434)

  • 作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分,替换了各种 Compose 类中 Px 类的用法 (I97a5a)

  • TextField 的光标具有闪烁动画 (Id10a7)

  • 部分手势不再需要传递 GestureToken (Id7ae5)

  • 作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分,替换了各种 Compose 类中 Px 类的用法 (I57bff)

  • Modifier.semantics 已取消弃用,以允许高级组件使用。(I4cfdc)

  • 将 AnnotatedString.Builder.addAnnotationString 重命名为 addStringAnnotation。(I5059e)

  • 更新了 Alignment API 并添加了对绝对对齐的支持(在 Rtl 上下文中不会自动镜像)(I38cd3)

  • Layout 和 LayoutModifier 子元素可以使用不同的布局方向进行测量。(Ibd731)

  • 为 ImagePainter 引入额外的可选矩形参数,以支持绘制底层 ImageAsset 的子部分 (I0ea9e)

  • 修复了 AdapterList 在移除项目时发生的崩溃 (Ic64b0, b/153195921)

  • 我们更改了测量您放在 activity.setContent { } 块中的第一个布局的方式。之前它被强制填充整个活动屏幕,现在它的行为就像您将布局放在 Stack 中一样:它可以小于屏幕并且将位于屏幕的左上角。如果您想要旧的行为,可以为您的布局应用 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)

  • runOnIdleComposerunOnUiThread 现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)

  • [Mutable]State 属性委托运算符已移至扩展函数,以支持 Kotlin 1.4 属性委托优化。调用者必须添加导入才能继续使用 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 已从常规的可组合函数更改为返回一个 Modifier 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 已弃用。请改用 setContentsetViewContent。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 修饰符或 Stack 可组合函数 (Ib237f)

  • 使布局方向从父布局节点传播到子节点。添加了布局方向修饰符。(I3d955)

  • 将 Painter.toModifier 重命名为 Painter.asModifier,因为新创建的 Modifier 具有对原始 Painter 的引用,该引用可以在多个 Modifier 实例之间共享 (I7195b)

  • 在 LayoutPadding 修饰符中支持从右到左的方向 (I9e8da)

  • Density 和 DensityScope 已合并为一个接口。现在可以使用 DensityAmbient.current 而不是 ambientDensity()。使用 with(density) 而不是 withDensity(density) (I11cb1)

  • 移除了 ValueHolder 类。重构了 AnimatedValue、AnimatedFloat 类,使动画值字段成为抽象字段,以便子类可以监视值更新。

    • 为 AnimatedValue、AnimatedFloat 等添加了模型类。
    • 添加了一组新的轻量级 @Composable API,用于在值之间进行动画。
    • (I79530)
  • 对环境 API 进行了重大更改。有关详细信息,请参阅日志和 Ambient<T> 文档 (I4c7ee, b/143769776)

  • 现在,从 Placeable#get(AlignmentLine) 返回的对齐线 Int 位置不再为 null。如果查询的对齐线不存在,则将返回 AlignmentLine.Unspecified。(I896c5b/158134875)

  • 修复了 ConstraintLayout 中的一个错误,该错误会导致在重新组合时崩溃。(Ibee5ab/158164341)

  • WithConstraints 结尾的 lambda API 已经更改。现在,它不再使用两个参数,而是使用了一个接收器作用域,除了约束和布局方向外,它还以 Dp 为单位提供了 minWidth、maxWidth、minHeight 和 maxHeight 属性(I91b9ab/149979702)

  • 将 LayoutModifier2 重命名为 LayoutModifier。(Id29f3)

  • Layout 和 LayoutModifier2 中的 Intrinsic measurements 函数现在具有一个 IntrinsicMeasureScope 接收器,该接收器提供具有隐式传播布局方向的 intrinsics 查询 API。(Id9945)

  • LayoutDirectionAmbient 已弃用。要读取由区域设置定义的布局方向,请在 ConfigurationAmbient 上使用 localeLayoutDirection(I851b1)

  • 为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。(Icacddb/152735784)

  • ParentData 可组合函数已弃用。您应该创建一个实现 ParentDataModifier 接口的修饰符,或者如果您只需要标记布局子项以在测量块中识别它们,则可以使用 LayoutTag 修饰符。(I51368b/150953183)

  • 添加 OnPositionedModifier 和 OnChildPositionedModifier 以替换 OnPositioned 和 OnChildPositioned 可组合函数。(I2ec8f)

  • 在 LayoutPadding 中不允许使用负边距。对于负位置偏移,应改用 LayoutOffset。(Ifb5b1)

  • WithConstraints 获得了 LayoutDirection 参数(I6d6f7)

  • 已更新 ComposeFlags.COMPOSER_PARAM 标志,使其为 true,这将更改 compose 插件的代码生成策略。从总体上讲,这会导致使用额外的合成参数生成 @Composable 函数,该参数将传递给后续的 @Composable 调用,以便运行时能够正确管理执行。这是一个重大的二进制破坏性更改,但是应该在 compose 的所有授权用法中保留源代码级别的兼容性。(I7971c)

  • 更改 LayoutCoordinates 以使 providedAlignmentLines 成为 Set 而不是 Map,并使 LayoutCoordinates 实现 get() 运算符以检索值。这使得修饰符更容易修改集合的一个或多个值,而无需为每个修饰符创建新的集合。(I0245a)

  • LayoutCoordinates 不再具有 position 属性。在考虑 LayoutModifiers、旋转或缩放时,position 属性没有意义。相反,开发人员应使用 parentCoordinates 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个 LayoutCoordinate 的转换。

    LayoutCoordinates 使用 IntPxSize 作为 size 属性,而不是 PxSize。布局使用整数像素大小进行布局,因此所有布局大小都应使用整数,而不是浮点数。(I9367b)

  • 对 Constraints 的 API 表面进行了改进(I0fd15)

  • 添加 TextDirection.Content(I48f36)

  • 调整工具栏菜单以正确显示复制、剪切、粘贴。(Id3955)

  • 为文本字段选择添加浮动工具栏。(Ie8b07)

  • TextDirectionAlgorithm 重命名为 TextDirection(I75ce8)

  • TextDirection 重命名为 ResolvedTextDirection(I3ff38)

  • 为文本字段选择添加触觉反馈。(I58050)

  • 为文本字段选择添加复制、剪切和粘贴方法。(Idb70b)

  • TestTag 和 Semantics 已删除。请改用 Modifier.testTag 和 Modifier.semantics(I15ff0b/158841414)

  • 更改了 Locale 和 LocaleList 的包名称,从 androidx.ui.text 更改为 androidx.ui.intl(I8132c)

  • API 更改:AnnotatedString(builder: Builder) 重命名为 annotatedString(builder: Builder)。(Ia6377)

  • API 更改:AnnotatedString.Item 重命名为 AnnotatedString.Range。(I2d44d)

  • 添加用于文本相关操作的工具栏。(I49d53)

  • 现在可以使用新的 LifecycleOwnerAmbient。现在,您与 Compose UI 一起使用的 Activity 应扩展 androidx.activity.ComponentActivity(或 AppCompatActivity)。android.app.Activity 上的 setContent 现已弃用(Idb25ab/153141084)

  • ui-android-text 包名称 (androidx.text) 已替换为 androidx.ui.text.platform,以符合 androidx 策略。(I42711)