Compose 基础

使用可用的构建模块编写 Jetpack Compose 应用程序,并扩展基础来构建您自己的设计系统部分。
最新更新 稳定版 候选发布版 Beta 版 Alpha 版
2024 年 9 月 4 日 1.7.0 - - 1.8.0-alpha01

结构

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

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

描述
compose.animation在 Jetpack Compose 应用程序中构建动画以丰富用户体验。
compose.compiler使用 Kotlin 编译器插件转换 @Composable 函数并启用优化。
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.uiCompose UI 的基本组件,用于与设备交互,包括布局、绘图和输入。

声明依赖项

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

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

Groovy

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

反馈

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

创建新问题

请参阅 Issue Tracker 文档 以了解更多信息。

版本 1.8

版本 1.8.0-alpha01

2024 年 9 月 4 日

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

版本 1.7

版本 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 已被弃用。 要在文本中添加可点击的链接,请使用 BasicText,并在您的 AnnotatedString 中使用新的 LinkAnnotation 注释。 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 源 Drag 和 Fling 正在被 UserInputSideEffect 替换,以适应这些源的扩展定义,这些定义现在包括动画(Side Effect)以及鼠标滚轮和键盘 (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)
  • basicMarquee delayMillis 参数重命名为 repeatDelayMillis。 (I12ff6)
  • 更新用于设置链接样式的 API:将 TextLinkStyles 移至 TextStyle,并从材料中删除了 TextDefaults (I5477b)

错误修复

  • LayoutCoordinates.introducesFrameOfReference 重命名为 LayoutCoordinates.introducesMotionFrameOfReference,以更好地反映其用途。 重命名了相关函数,以根据该标志计算坐标。 (I3a330)
  • MarqueeDefaults 属性中删除了“Default”。 (I1d8a0)
  • MarqueeDefaults 属性中删除了“Marquee”。 (Iad4f4)
  • TextStyle 类中删除了 TextLinkStyles。 相反,TextLinkStylesLinkAnntation 构造函数和 AnnotatedString.fromHtml 方法的一部分 (I90b2b)
  • 修复了一个错误,即当 Pager 已经位于边界处并且向边界弹动时,Pager 会卡住。 (I9f373, b/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)

错误修复

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

版本 1.7.0-alpha08

2024 年 5 月 1 日

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

新功能

  • BasicTextFieldSelectionContainer 中添加了右键菜单,其中包含用于剪切、复制、粘贴和全选操作的项目。 (If8c93, Ia2b49, I6f268)

API 更改

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

错误修复

  • SelectionContainer 中的所有文本上下文菜单中添加了“全选”。 (Ib750e, b/240143283)
  • 修复了具有 reverseScrolling=true 的滚动容器的长截图捕获。 (I7c59c)
  • 修复了一个问题,即当 AnchoredDraggableStatecurrentValue 接近状态边界时,它会发生变化。 (Iea30b, b/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 和解析应用 MaterialTheme 的链接的 HTML 标记字符串的方法。 (I98532, b/139312671)
  • 项外观和消失动画支持已添加到 LazyVerticalGridLazyHorizontalGrid 中。以前,可以通过添加 Modifier.animateItemPlacement() 修饰符来支持放置(重新排序)动画。我们弃用了此修饰符,并引入了一个新的非实验性修饰符,称为 Modifier.animateItem(),它允许你支持所有三种动画类型:外观(淡入)、消失(淡出)和重新排序。 (Ib7d12, b/330510929)
  • 项外观和消失动画支持已添加到 LazyVerticalStaggeredGridLazyHorizontalStaggeredGrid 中。以前,可以通过添加 Modifier.animateItemPlacement() 修饰符来支持放置(重新排序)动画。我们弃用了此修饰符,并引入了一个新的非实验性修饰符,称为 Modifier.animateItem(),它允许你支持所有三种动画类型:外观(淡入)、消失(淡出)和重新排序。 (I69bc9, b/330511290)

API 更改

  • 添加了 ContextMenuColors 和相关的 LocalContextMenuTheme ProvidableCompositionLocal。可以通过提供组合本地来修改文本字段和可选文本的上下文菜单的颜色。 (Ifa154)
  • 文本链接除了普通样式、悬停和聚焦外,还获得了按下状态样式选项。 (I5f864, b/139312671)
  • 为手写手势引入了 ViewConfiguration.HandwritingGestureLineMargin。支持 BasicTextField 的手写手势。 (Ie6e13, b/325660505)
  • 已为 1.7 版本删除了 DelegatableNode.scrollIntoView,因为我们没有时间完成稳定其他相关 API 表面的工作。此功能将在 1.8 中重新引入 (I6cf61, b/333421581, b/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 可组合项 (I34d4b, b/323346994)
  • UrlAnnotation 已弃用,请使用 LinkAnnotation.Url 代替。如果使用的是 Material 主题,那么请使用 TextDefaults 对象来创建应用了 Material 主题的注释 (I8d180, b/323346545)
  • String.parseAsHtml 重命名为 AnnotatedString.Companion.fromHtml (I43dcd)
  • parseAsHtml 方法中添加了样式参数 (linkStylefocusedLinkStylehoveredLinkStyle) 和链接交互侦听器。当使用 <a> 标记解析 HTML 标记字符串时,该方法将为每个此类标记构造一个 LinkAnnotation.Url,并将样式对象和链接交互侦听器传递给每个注释。 (I7c977)
  • LinkAnnotation 现在接受基于状态的样式参数和 LinkInteractionListener。将此注释添加到 AnnotatedString 以获得超链接。通过传递 focusedState 和/或 hoveredState,您可以定义链接在获得焦点和/或悬停时的视觉配置。(I81ce4b/139312671)
  • 长截图的功能标志已被移除。(I28648b/329128246)
  • LazyColumn 现在将在长截图中正确渲染粘性标题。(I8d239b/329296635)
  • 稳定了大多数与新的 BasicTextField 一起引入的剩余实验性 API。(I714e2)
  • 添加了 textObfuscationCharacter 参数到 BasicSecureTextField,用于控制在模糊内容时使用哪个字符。(I0588b)
  • NestedScroll 源 Drag 和 Fling 正在被 UserInputSideEffect 替换,以适应这些源的扩展定义,这些定义现在包括动画(副作用)和鼠标滚轮和键盘(UserInput)。(I40579)
  • 引入 LocalBringIntoViewSpec,一种平台相关的焦点滚动行为,它在 Scrollable 修饰符层应用。(I27aa5b/317453911)
  • 移除 TextFieldCharSequenceTextFieldBuffer.originalValuesTextFieldBuffer.originalTextTextFieldBuffer.originalSelection 替换。(I2c7d6)
  • ImeOptions.hintLocales 现在不再是可空的。如果要传递空 Locale 列表,请使用 LocaleList.Empty。(Ic5bc4)
  • 重命名 getOffsetFractionForPagegetOffsetDistanceInPages。(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.autoCorrectautoCorrectEnabled 并使其可为空,其中 null 表示未指定任何值。(Ia8ba0b/295951492)
  • 重命名 outOfBoundsPageCountbeyondViewportPageCount。(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.shouldShowKeyboardOnFocusshowKeyboardOnFocus。(Ib4b7ab/295951492)
  • 移除 hintMediaTypes 参数从 Modifier.contentReceiver 中。开发人员已经被鼓励检查接收到的 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 的结果是否为空,以了解剪贴板是否有当前剪贴板。(I50498)
  • ClipboardManager.setClip 现在接受 null 以便能够清除剪贴板。(I7d2e9)
  • ReceiveContentListener 已转换为函数接口。此外,还移除了接受 lambda 的 Modifier.receiveContent 重载,因为 ReceiveContentListener 现在是一个函数接口。
  • Modifier.receiveContent 已重命名为 Modifier.contentReceiver。(I1e6af)
  • 重命名 TransferableContent.consumeEachTransferableContent.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)
  • 移除 BasicText 的实验性重写,其中包含 onLinkClicked 参数。超链接支持的替代 API 将在未来发布。(I107d5)
  • 移除 TextFieldStateTextFieldBuffer 下与 Codepoints 相关的方
  • AnchoredDraggablecurrentValue 现在将在通过锚点时更新。使用 settledValue 来接收以前的 currentValue 语义,仅在稳定在锚点时更新。进度现在作为函数(需要起点和终点)而不是属性公开。(Ibe6e8b/318707189b/298271489b/294991954
  • BasicTextField(state)TextFieldStateInputTransformationOutputTransformationTextFieldLineLimitsTextFieldDecorator 已升级为稳定版。(I9582b
  • 引入了 InterceptPlatformTextInput,用于帮助编写低级 IME 相关测试和其他低级 IME 使用案例。已弃用 PlatformTextInputTestOverride。(I862edb/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 的语义。(I74a2fb/170648072
  • 在此 CL 中,我们添加了 GetScrollViewportLength 语义操作,以便我们可以将有关 Compose 中滚动组件的信息传递到 a11y 系统。此 CL 还将使用该属性应用于 Foundation Scrollable Lists。(Ic5fa2
  • BasicTextField2 已重命名为 BasicTextField。(Ie5713
  • FocusRequester.createRefs 现在已稳定(I4d92cb/261436820
  • 引入了 DelegatableNode.scrollIntoView(),允许修饰符节点直接发出 scrollIntoView 请求。(I2b3b7b/299939840
  • 引入了 DelegatableNode.requireView(),允许修饰符节点获取当前 Android View,而无需读取合成局部变量。(I40768
  • 在 Contextual Flow Row 范围内和 Contextual Flow Column 范围内引入上下文布局信息,其中包含行索引、位置以及最大宽度和高度的约束,以保持在指定位置。超过最大宽度/高度的项目可能会流到下一行或根据溢出设置被省略。(Id13f8b/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
  • BasicTextField2 及其在 androidx.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 以了解这些新功能的实际示例。(Ib9135b/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 已升级为稳定版。(I67660b/316966909
  • 添加了 LocalTextLinkStyle 合成局部变量,允许更改应用程序中 Text 的链接样式。如果您在应用程序中使用自己的主题,则应根据您的主题设置此合成局部变量。使用 Material 主题时,链接的默认颜色将设置为 Material 的主色。(I7eb10
  • 引入了 receiveContent 修饰符,该修饰符为开发人员提供了一种在 Jetpack Compose 中 接收富文本内容 的方式。
  • receiveContentBasicTextField2 集成,以接受软件键盘或通过剪贴板粘贴操作提供的富文本内容。(I81b72
  • 在此更改中,我们用 TargetedFlingBehavior 替换了 SnapFlingBehavior,以解锁其他用例并提供更大的灵活性。(I762ea
  • 在此更改中,我们正在使捕捉 API 稳定。我们还清理了一些测试代码并为捕捉添加了更多示例。(Id8da9
  • 引入 TargetedFlingBehavior,这是一个 FlingBehavior,它允许传播有关正在进行的动画状态及其目标滚动偏移的信息。(I6a207

错误修复

  • BasicTextField2 现在在输入时将光标保留在视图中,即使它已滚动到视图外或由于输入而将滚动到视图外。(Ieb856b/237190748

外部贡献

  • 添加了一个实验性 API,用于配置 LazyLists 的预取行为。(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 并且提供的 Indication 是一个 IndicationNodeFactory,则 Indication 可以在需要时延迟创建,从而提高性能。如果您没有提升并使用 MutableInteractionSource,建议传递 null。

API 更改

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

错误修复

  • 当传递 VisualTransformation 时,BasicTextField 现在将预先验证少量偏移映射。这有助于捕获导致稍后测量或绘制过程中出现不可恢复异常的常见编码错误。通过在合成过程中抛出异常,开发人员更有可能在开发过程中看到这些错误,从而帮助避免生产崩溃。(I0fd42)
  • VisualTransformation 不会在您为无效索引返回无效索引时抛出异常 (b/316401857 )

版本 1.6

版本 1.6.8

2024 年 6 月 12 日

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

版本 1.6.7

2024 年 5 月 1 日

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

版本 1.6.6

2024 年 4 月 17 日

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

错误修复

  • 修复了在某些情况下切换 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 是新的修饰符,它允许轻松支持二维拖动。参见 示例
  • 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 已被此 lambda 替换。

    已添加 DragAndDropTarget 工厂函数以接收来自拖放会话的传输 (Iebf3a)

  • AnchoredDraggable 中公开 startDragImmediately 属性,可以让用户控制拖动操作的检测,特别是在小部件动画到目标锚点时,设置该属性会很有用。参见 示例。(Ie6d13, b/285139987)

  • Foundation Tooltip API 现在使用 @ExperimentalFoundationApi 注解。(I30b0b)

  • 移除了 DragAndDropInfo 作为类型,DragAndDropModifierNode.drag 现在接收 transferData,装饰大小以及拖动装饰 DrawScope lambda 作为参数。

    DragAndDropTarget 现在针对特定的拖放事件提供了单独的方法,不再是单个抽象方法。

    DragAndDropModifierNode 工厂函数中的 onDragAndDropEvent 已重命名为 onDragAndDropStart,更明确地表示提供的 DragAndDropTarget 只对给定的拖放会话有效。

    移除了 DragAndDropEventType。(I645b1)

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

  • OriginalText 替换为 TextSubstitution。(Ifa5a8)

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

  • SubcomposeLayout(以及基于它的 LazyColumn 等布局)的子节点保留以便在将来重用,现在被视为处于非激活状态。引入了新的测试 API assertIsDeactivated() 来测试这些节点。默认情况下,其他测试 API 将过滤掉非激活节点。(I2ef84, b/187188981)

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

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

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

错误修复

  • PageSize.Fixed 实现 equals 和 hashcode。(Ie3ede, b/300134276)
  • 修复了 BasicText 布局在 minWidth 发生变化且 minWidth 小于初始测量约束 maxWidth 时不会缩小的错误。(Idb19c)
  • ArcLine 中添加了对扫描渐变的渲染器支持。(I4d5bb)
  • 修复了窗口内嵌变更导致的二进制兼容性问题。(Iee695)
  • 为 Material3 芯片/按钮移除了 material core 层,因为微基准测试显示没有它性能更好。(I55555)

版本 1.6.0-alpha08

2023 年 10 月 18 日

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

新功能

  • Modifier.draggable2D 是一个新的修饰符,它支持轻松实现二维拖动。参见 示例 (Id95f5, b/214412658)

API 更改

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

错误修复

  • 改进了关于 BasicTextFieldonValueChange 要求的文档。(I90fc9, b/160257648)

版本 1.6.0-alpha07

2023 年 10 月 4 日

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

API 更改

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

错误修复

  • 修复了 basicMarquee 在速度变化后无法动画的问题。(Id2e77, b/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,改为在修饰符本身中使用内联参数。(I83bec, b/298381260, b/262367109, b/261438887)

API 更改

  • ScrollScope 中引入了 updateCurrentPageupdateTargetPage,这些是允许通过 PagerState.scroll 自定义动画滚动所需的最后部分。(I9cad5, b/267744105, b/243786897)
  • SnapFlingBehavior 中移除了密度。所有 SnapLayoutInfoProvider 的实现都有一种访问密度的办法,接收器作用域可以移除,这将导致 SnapFlingBehaviorSnapLayoutInfoProviders 的实现更简单。(I153c3)
  • 更多修饰符被标记为稳定。(I56af1, b/298046462)
  • SnapLayoutInfoProvider 中移除了 SnapStepSize。应使用布局信息进行计算,并通过方法或捕捉偏移量提供结果。(If320c)

行为变更

  • Compose 现在使用非线性字体缩放,以提高可读性和可访问性。当系统设置中字体比例 > 100% 时,小文本将正常增大,但已经很大的文本只会增大一点点。此外,以 SP 定义的行高会自动调整,以保持与 100% 比例的预期高度。更多信息,请参阅 字体缩放最佳实践。(I11518)

错误修复

版本 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 及更高版本上优先保持远离浮动窗口。(Ib51d5, b/297260115)
  • View 组件(如 ScrollViewRecyclerView)中的弹性速度上限为 ViewConfiguration.ScaledMaximumFlingVelocity。Compose 现在包含了自己的 maximumFlingVelocity 版本,现在它也适用于 Draggable。(Ibf974)
  • 移除了已弃用的 PagerPagerState 重载。(Iea07e)
  • compose.foundation 中添加了 BasicTooltipBox,并更新了 PlainTooltipBoxRichTooltipBox,以使用新的 PlainTooltipRichTooltip 可组合项,通过 TooltipBox 实现。(I79e1d)

版本 1.6.0-alpha04

2023 年 8 月 23 日

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

API 更改

  • 添加了 ReusableComposition 接口,用于管理子组合的生命周期和重用。(I812d1, b/252846775)
  • Modifier.focusGroup 已提升至稳定 API。(I7ffa3)
  • BasicTextField2 添加了重载,它接受一个不可变的值和一个用于更改该值的回调,就像当前的 BasicTextField API 一样。(I3f2b8)
  • GridItemSpan::currentLineSpan 现在是稳定 API。(Icc29c)
  • 接受 contentDescription 的画布现在是稳定 API。(Ib3d29)
  • ScrollState 中引入了 viewportSize,这是一种在测量发生后了解使用 ScrollState 的组件的 viewPort 大小的方式。(I8b85a, b/283102682)
  • 修复了 Pager 中预取不匹配 Views 中行为的问题。(I93352, b/289088847)
  • Modifier.consumeWindowInsets(PaddingValues) 现在是稳定的。
    • 已弃用的 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 并处于焦点状态时键盘不显示的问题。(I34a19, b/246909589)

版本 1.6.0-alpha02

2023 年 7 月 26 日

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

API 更改

  • Pager 中引入了 PagerLayoutInfo,其中包含在 Pager 中进行测量后收集的信息。还引入了 PageInfo,它是关于 Pager 中单个已测量页面的信息。(Iad003, b/283098900)
  • 其他注释用于指定允许输入到可组合项。(I51109)
  • 添加了 SemanticsNodeInteraction.requestFocus,作为一种更方便且可发现的方式,用于在测试中请求焦点。(Ie8722)
  • 完全重新设计了 PlatformTextInput* API。(I6c93a, b/274661182, b/267235947, b/277380808)
  • SoftwareKeyboardControllerLocalSoftwareKeyboardController 不再是实验性的。 LocalSoftwareKeyboardController 现在也是一个真正的 CompositionLocal。(I4c364)
  • Modifier.transformable 现在在 canPan 参数中提供平移增量,以帮助确定平移的方向,从而允许或禁止平移。(I692aa, b/266829800)
  • 更新了修饰符 consumeWindowInsets,以扩展超类 AbstractComposeView。(Iacd74, b/269479941)

版本 1.6.0-alpha01

2023 年 6 月 21 日

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

新功能

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

API 更改

  • 支持 InputConnection#requestCursorUpdates。(I0c69b)
  • 引入了 scrollAnimationSpec,以允许使用自定义动画规范。更新了 BringIntoViewCalculatorBringIntoViewScroller。(Idb741)
  • 添加了 ResourceResolutionException 类型,用于包装在尝试使用资产路径的描述加载位图资产时抛出的可抛出对象,该描述未能加载。(I19f44, b/230166331, b/278424788)
  • 添加了语义属性和操作,以支持文本翻译。(I4a6bc)
  • 引入了 BringIntoViewCalculator API,可用于自定义组件(如 Scrollable)对 bringIntoView 请求的响应方式。更改了可滚动对象的重载,以便可以选择接受 BringIntoViewCalculator 的实例。(Iaf5af)

错误修复

  • 添加了 Lint 检查,如果在组合中创建 MutableInteractionSource 但未将其记住,则会发出警告,类似于创建可变状态/ Animatable 的 Lint 检查。(I5daae)
  • 添加了对鼠标选择的支持。基于触摸的选择将按词语扩展,按字符缩小。(Ic0c6c, b/180639271)
  • 添加了 FocusTargetModifierNode 接口,可用于创建自定义 FocusTarget。(I9790e)

版本 1.5

版本 1.5.4

2023 年 10 月 18 日

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

版本 1.5.3

2023 年 10 月 4 日

发布了 androidx.compose.foundation:foundation-*:1.5.3。此版本没有更改。

版本 1.5.2

2023 年 9 月 27 日

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

错误修复

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

版本 1.5.1

2023 年 9 月 6 日

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

错误修复

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

版本 1.5.0

2023 年 8 月 9 日

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

自 1.4.0 以来重要更改

  • 许多基础修饰符(包括 Modifier.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
  • 引入了一个可以与 LazyGridState 一起使用的 SnapLayoutInfoProvider。 (I92134b/269237141b/260914964
  • 为延迟交错网格项目范围添加了实验性的 Modifier.animateItemPlacement()。您可以将其应用于项目以实现自动位置更改/重新排序动画。(I4b62db/257034719
  • GridCells.FixedSize 提升为稳定版本。 FixedSize 定义了一个 LazyGrid,其中每个单元格在交叉轴上占用确切的大小,剩余空间由交叉轴排列分配。(I8542f
  • 为 Pager 引入了接收器范围 PagerScope,以及用于计算给定页面偏移量的实用程序函数。 (If2577
  • 在创建快照弹跳行为时引入 snapPositionalThreshold。使用此参数指定一个位置阈值,以缩短 Pager 中的快照。(If8f7f
  • calculateSnappingOffset 替换 SnapLayoutInfoProvider.calculateSnappingOffsetBounds。在此新方法中,我们只请求要快照到的下一个偏移量。边界的计算应在实现级别执行,因为这可能因快照方式而异。(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 更改

  • Text 和 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)
  • 将实验性的 onHover 添加到 ClickableText (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 开始,为 TextTextField 以及更底层的 Paragraph 添加了 Emoji 兼容性集成。当配置了 emojicompat 时,它默认启用。
  • 可以使用 PlatformParagraphStyle 在特定 Text 上配置 EmojiCompat

API 更改

  • 添加了 PinnableContainer API 的通用实现,该 API 用于所有 LazyLayouts 中,以保留退出组合但仍需要处于活动状态的项。 (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)
  • 将实验性的 onHover 添加到 ClickableText。 (I6938f)
  • 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 已被弃用,取而代之的是 FocusRequesterNode。 (I7f4d7b/247708726b/255352203b/253043481b/247716483b/254529934b/251840112b/251859987b/257141589)
  • 使用 variationSettingsAndroidFont 构造函数现在是一个稳定 API,可用于创建新类型的字体描述符。 (I5adccb/261565807)
  • 引入了 PinnableContainer API,该 API 由懒惰列表通过一个组合本地传播,该本地允许您固定当前项。这意味着当该项从视图中滚动出去时,它不会被处置。例如,Modifier.focusable() 将通过这种机制固定当前聚焦的项。 (Ib8881b/259274257b/195049010)
  • 重写了可滚动对象对 bringIntoViewRequesters 和可聚焦对象响应的方式,以更好地模拟这些操作的复杂性并处理更多边缘情况。 (I2e5feb/241591211b/192043120b/237190748b/230756508b/239451114)
  • 更多弃用隐藏函数的返回类型可空性。 (Ibf7b0)
  • TextStyle 添加了实验性的 TextMotion,以定义文本是 Static(default) 还是动画。如果文本将通过动画进行缩放、平移或旋转,请使用 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,这是一种以分页方式显示可组合对象的方式。引入了 PagerState 来控制分页器以及查询有关分页器当前状态的信息。引入了 PageSize,这是一种控制分页器页面大小的方式,可用于创建类似轮播的分页器。引入了 PagerSnapDistance,这是一种控制分页器弹动行为中的卡扣方式。 (I01120)
  • SnapFlingBehavior.performFling 中引入了重载,以帮助了解弹动将停留在哪里。(I569f6)
  • 删除了 OverscrollEffect#isEnabled。不再需要记住和设置此标志,只需在不希望显示过度滚动的情况下(例如,如果 ScrollableState#canScrollForward/backward 都返回 false)不要将事件分派到过度滚动效果。(I1a4b0, b/255554340, b/255557085)
  • 添加了 ScrollableState#canScrollForwardScrollableState#canScrollBackward 用于查询 ScrollableState 是否有空间在任一方向滚动(无论它是否处于其范围的最小值/最大值)。这默认情况下对 ScrollableState 的现有实现为 true,以实现向后兼容。消费者可以使用它向用户显示仍有滚动空间的指示,这也可用于避免将增量分派到在给定方向上没有滚动空间的 ScrollableStates,以减少不必要的操作。(Idf1a0, b/255557085)
  • 添加了一个修饰符 API 用于查询祖先滚动信息。(I2ba9d, b/203141462)
  • 用于在 Clickable 中正确延迟按下交互,当手势可能变为滚动事件时。
  • 修复了 ClickablesScrollable ViewGroup 内使用时未正确延迟波纹。
  • 更新了抽屉和表单以在手势可能变为滚动事件时正确延迟按下。
  • 更新了 snapStepSize 的命名,使其与 SnapLayoutInfoProvider 中的其他方法一致。(Ife67c)
  • EmojiCompat 添加到 Compose (Ibf6f9, b/139326806)
  • consumedWindowInsets() 重命名为 consumeWindowInsets(),将 withConsumedWindowInsets() 重命名为 onConsumedWindowInsetsChanged(),并将修饰符设为公有。(Ie44e1)

错误修复

  • 修复了使用 Modifier.animateItemPlacement() 和惰性网格时的崩溃。它发生在一些条件下,当新项目的数量小于上一个项目时。(I0bcac, b/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 以获得更大的灵活性。(I7579a, b/212091796)
  • 恢复 Lazy* API 中的 beyondBoundCount API (I12197)
  • 在 Lazy API 中引入了参数,用于组合和放置视窗外的项目(I69e89, b/172029355)
  • minLines 参数添加到 BasicTextBasicTextField 中。它允许以行数的形式设置这些可组合项的最小高度(I24294, b/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(),因为它允许事件在手势之间丢失。(Iffc3f, b/251260206)
  • 添加了 WindowInsets.imeAnimationSource 和 WindowInsets.imeAnimationTarget 用于确定动画进度,并了解 IME 在动画完成后将位于何处。(I356f1, b/217770337)

版本 1.3

版本 1.3.1

2022 年 11 月 9 日

androidx.compose.foundation:foundation:1.3.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 现在如果使用键盘或遥控器上的 D-Pad 点击,则会显示波纹。

版本 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 现在能够在处理请求时获取请求的最新边界。(If86a5, b/241591211)
  • 在实验性 Staggered Grid 中引入了对项目间间距的支持(I10b82)
  • 在实验性 Staggered Grid 中引入了内容填充(I342ea)
  • TextMeasurer.measure 方法中使用 constraints: Constraints 替换了 size:IntSize 参数,以支持最小宽度约束。(I37530, b/242707525)
  • 添加了 Modifier.withConsumedWindowInsets() 用于获取已使用的 WindowInsets 以在 windowInsetsPadding 之外使用。
  • 添加了 MutableWindowInsets 以允许轻松更改 WindowInsets,而无需重新组合。(I7fd28, b/237019262, b/243119659)

版本 1.3.0-beta02

2022 年 9 月 7 日

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

API 更改

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

错误修复

  • 重构了 AwaitPointerEventScope#awaitLongPressOrCancellation 以匹配其他等待函数(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 中获取当前指针位置。(I9f606, b/241239306)
  • AwaitPointerEventScope#awaitLongPressOrCancellation 暴露为更复杂手势检测的额外构建块(I04374b/181577176)。
  • 引入了 lazyListSnapLayoutInfoProvider 以在 Lazy Lists 中启用吸附。(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 注释类型以及相关方法以支持 AnnotatedString 中的 TalkBack 链接支持。(I1c754b/231495122)。

错误修复

  • BasicTextField cursorBrush 现在可以在不重新启动光标计时器的情况下进行动画处理。(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 已被引入,以允许视图和合成滚动参与者之间的互操作性。
  • 所有滚动容器都添加了鼠标和触控板滚动。

版本 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)。
  • 合成库中的接口现在使用 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 的文档,说明 ime 内边距从 API 23 开始就被报告,但在 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 实现布局超出可见边界范围的项目时,可以使用它。(Ifabfb, b/184670295)
  • LineHeightBehavior 已重命名为 LineHeightStyle
  • LineVerticalAlignment 已重命名为 LineHeightStyle.Alignment
  • LineHeightTrim 重命名为 LineHeightStyle.Trim
  • LineHeightStyle 中删除了默认构造函数值。(I582bf, b/181155707)
  • LazyLayoutItemProvider 接口的可选成员添加了默认值。(Iba8a0)
  • LazyLayoutItemProvider api 中,我们现在有一个更简单的可组合函数 Item,它接受索引,而不是工厂按索引返回可组合的 lambda。(Id2196)
  • LazyLayoutItemsProvider 已重命名为 LazyLayoutItemProvider (I0638c)
  • LazyLayoutItemsProvider.itemsCount 已重命名为 itemCount (Id409c)
  • 将 Brush 添加到 TextStyleSpanStyle 中,以提供使用渐变颜色绘制文本的方式。(I53869, b/187839528)
  • trimFirstLineToptrimLastLineBottomLineHeightBehavior 属性已更改为单个枚举:LineHeightTrimLineHeightTrim 有 4 个由两个布尔值定义的状态值:FirstLineTopLastLineBottom、Both 和 None。(Ifc6a5, b/181155707)
  • LineHeightBehavior 添加到 TextStyleParagraphStyleLineHeightBehavior 控制行高是否应用于第一行的顶部和最后一行底部。它还定义了行在由 TextStyle (lineHeight) 提供的空间中的对齐方式。

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

  • trimFirstLineToptrimLastLineBottom 配置仅在 includeFontPadding 为 false 时才正确工作。(I97332, b/181155707)

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

错误修复

  • 修复了文本字段在处于焦点状态下从合成中移除时不会隐藏键盘的回归问题。(I7a410, b/230536793, b/225541817)
  • 当高度有限且无法容纳所有文本行时,支持省略号。(Ie528c, b/168720622)
  • BringIntoViewRequester.bringIntoView 现在将始终挂起,直到请求完成或被较新的、不重叠的请求中断。重叠的请求将被排队。(I43e7f, b/216790855)
  • 对于完全重叠的矩形,并发 BringIntoViewRequester.bringIntoView 调用现在将只遵守更大矩形的请求。(I34be7, b/216790855, b/184760918)
  • 默认情况下已启用 includeFontPadding。可以使用 TextStyle.platformTextStyle 属性关闭 includeFontPadding。在不久的将来,我们将更改默认行为,但在那之前,这使我们能够更好地整合行高改进(aosp/2058653)并解决 TextField 剪切问题。(I01423, b/171394808)
  • Modifier.bringIntoViewRequester 不再使用 onGloballyPositioned。(I630f5)

外部贡献

  • MouseInjectionScope.scroll(delta = someDelta) 现在在 Android 上被反转,如果我们垂直滚动(如果 someDelta 为正,它将向下滚动)。(Ifb697, b/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 更改

  • 在 Android 上使用 FontFamily.SansSerif 时,显示所有可用的系统字体权重。这将在 API 21-28 上内部使用回退字体名称,例如 sans-serif-medium。这是一个行为更改,因为以前只支持 API 21-28 上的权重 400 和 700。(I380fe, b/156048036, b/226441992)
  • Paragraph 和 MultiParagraph 现在接受 Constraints 参数。传递 Constraints.maxHeight 目前是一个无操作,但将在未来允许执行一些计算,例如基于高度的省略号。(I6afee, b/168720622)
  • SubcomposeSlotReusePolicy.getSlotsToRetain() 现在接受一个自定义的类似 MutableSet 的类,该类不允许在其中添加新项目。(Icd314)
  • PointerInputChange 中的局部消耗(向下或位置)已弃用。可以使用 consume() 完全消耗更改。可以使用 isConsumed 判断是否有人以前消耗过更改。
  • PointerInputChange::copy() 现在始终进行浅拷贝。这意味着,一旦其中一个副本被消耗,PointerInputChange 的副本也将被消耗。如果要创建一个不受限制的 PointerInputChange,请使用构造函数。(Ie6be4, b/225669674)
  • 引入了新的实验性 LazyLayout API。这使您能够构建自己的组件,例如 LazyColumnLazyVerticalGrid。请注意,此 API 处于早期阶段,可能会在将来的版本中更改。(Iba2bc, b/166591700)
  • AndroidFont 现在将 typefaceLoader 作为构造函数参数。(I2c971)
  • WindowInsets 伴侣现在公开了可见性(它们是否在屏幕上,无论它们是否与窗口相交)以及如果它们在设备上可用但当前未激活时它们的大小。(I65182, b/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,它允许延迟布局的子级阻止当前合成项目被处置。(Ibbdd0, b/184670295)
  • LazyListLayoutInfoLazyGridLayoutInfo 现在具有 beforeContentPaddingafterContentPadding 字段。(I3b628, b/200920410)
  • 添加了 KeyboardType.Decimal 作为 Keyboard.Number 的替代方案,专门用于在 IME 中包含小数点分隔符。(Iec4c8, b/209835363)
  • 添加新的字体描述符 Font(DeviceFontFamilyName) 以在字体回退链期间选择性地查找系统安装的字体。(I30468, b/219754572)
  • PointerEventType.ScrollPointerEvent.scrollDelta 现在是稳定的 API。(I574c5, b/225669674)
  • 添加了 includeFontPaddingTextStyle/ParagraphStyle 中的临时兼容性配置。可以使用 TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false)) 更改 includeFontPadding。这是一个用于启用迁移的临时配置选项,将被移除。(If47be, b/171394808)
  • 更新了 FontFamily.Resolver 以集成系统范围的粗体文本辅助功能设置。(I6c1e7)
  • ComposeViewconsumeWindowInsets 扩展属性允许开发者禁用 Android WindowInsets 的消耗。这允许层次结构中独立的 ComposeViews 每个都应用 WindowInsets,而不会相互干扰。(I0ef08, b/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 的内容。 (I79cd9, b/185760237)

错误修复

  • 滚动修饰符(Modifier.verticalScroll()Modifier.horizontalScroll()Modifier.scrollable())现在将滚动以保持聚焦的可组合元素可见,如果滚动区域已调整大小且聚焦的可组合元素以前可见。
  • 当文本字段处于焦点状态且键盘显示时,文本字段现在将保持在键盘之上,当位于非惰性可滚动元素中且软输入模式为 ADJUST_RESIZE 时。 (I4a485, b/190539358, b/192043120, b/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.UnknownColumn 替换 (I56d51)
  • LazyVerticalGrid/LazyHorizontalGrid 和所有相关 API 已移入 .grid 子包。 请将您的导入从 androidx.compose.foundation.lazy 更新到 androidx.compose.foundation.lazy.grid。 (I2d446, b/219942574)
  • 文本:includeFontPadding 现在默认关闭。 由于 includeFontPadding=false 导致的裁剪问题已得到解决,并且高脚本不应出现裁剪。 (I31c84, b/171394808)
  • Measured 接口现在公开 parentData 属性 (I3313f)
  • 引入了实验性的 Modifier.onFocusedBoundsChanged,以允许观察子聚焦元素的边界。 (I14283, b/220030968, b/190539358, b/192043120, b/216842427)
  • 已添加 LazyHorizontalGrid。 (I61ae7, b/191238807)
  • 添加了新的 LazyVerticalGrid API 来定义交叉轴大小 (I17723)
  • 添加了 FocusGroup 修饰符 (I64bc0, b/213508274, b/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 中支持异步字体加载 (I77057, b/214587005)
  • LazyVerticalGrid 现在支持 换行,在跨度不适合当前行的项目之前。 (I05c40, b/207462103)
  • excludeFromSystemGestures 重命名为 systemGesturesExclusion (I19526)
  • LazyVerticalGrid 现在支持 reverseLayout。 (I6d7d7, b/215572963, b/211753558)
  • 添加 WindowInsets.only() 方法,允许开发者仅包含来自 WindowInsets 的维度。 (I14c94, b/217768486)
  • 添加了 ComposableTargetComposableTargetMarkerComposableOpenTarget,允许在编译时报告可组合函数何时被调用来定位它没有被设计为使用的应用器。

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

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

错误修复

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

版本 1.2.0-alpha03

2022 年 2 月 9 日

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

API 更改

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

错误修复

  • 当文本字段获得焦点且显示键盘时,当软输入模式为 ADJUST_PAN 时,文本字段现在将保持在键盘上方。 (I8eaeb, b/190539358, b/192043120)
  • 桌面使用组合局部变量用于 FontFamily.Resolver
    • 桌面 FontLoader 已弃用
    • 桌面上的新 createFontFamilyResolver 工厂 (I6bbbb, b/174162090)
  • 在文本字段之间更改焦点时,软键盘输入类型不再闪烁。 (I1bf50, b/187746439)
  • 当光标句柄显示时,文本字段不再需要额外的后退操作。 (Ideb4b, b/205726883)
  • 文本选择放大镜行为已经过优化,以匹配平台放大镜。 (Idd918, b/206833278)

版本 1.2.0-alpha02

2022 年 1 月 26 日

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

API 更改

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

错误修复

  • 文本选择放大镜行为已经过优化,以匹配平台放大镜。 (Idd918, b/206833278)
  • LazyColumnLazyRowModifier.verticalScroll 和其他使用 Modifier.scrollable 的容器现在支持鼠标滚轮滚动。 (I2b5e1, b/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 更改

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

错误修复

  • 修复了 TextField 光标句柄在滚动出视图时未隐藏的问题。 (I14552, b/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 包含这些提交。

错误修复

版本 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 辅助功能指南 中关于 触摸目标大小 的内容。例如,即使您将按钮的大小设置为更小,按钮触摸目标也会扩展到至少 48x48dp。这使 Compose Material 与 Material Design 组件具有相同的行为,如果您混合使用视图和 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() 中。 (Iceb90, b/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 中的可空性 (I7078a, b/204917439)
  • 已添加实验性 API,允许将 PointerInputchange 整体使用或检查它是否已使用。 (I2e59d)
  • 在文本字段内拖动光标或选择句柄时显示放大镜小部件。 (I5391e, b/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 已添加对水平跨度的支持。 (I7e2fa, b/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 提供一个键时,此修饰符将启用项目重新排序动画。除了项目重新排序之外,由排列或对齐更改等事件引起的任何其他位置更改也将被动画化。 (I59e7b, b/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() 容器内延迟,而不是始终延迟按下事件。 (Ibefe0, b/203141462)
  • 已添加实验性 BringIntoView API,让您可以向父级发送请求,以便它们滚动以将项目带入视图 (Ib918d, b/195353459)

外部贡献

  • 已添加 Modifier.pointerHoverIcon (I95f01)

版本 1.1.0-beta01

2021 年 10 月 27 日

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

错误修复

  • 已添加实验性 BringIntoView API,让您可以向父级发送请求,以便它们滚动以将项目带入视图 (Ib918d, b/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 替换。 (Ia5f3f, b/190493367)
  • SemanticsNode 添加了 touchBoundsInRoot,该方法包含最小触摸目标大小,使开发者能够确保触摸目标满足无障碍要求。 (I2e14b, b/197751214)

错误修复

  • Android 12 设备上已添加了对拉伸过度滚动的支持。 (Iccf3c, b/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 以关闭过度滚动效果。 (I0c304, b/171682480)
  • AwaitPointerEventScope 现在具有 withTimeout() 和 withTimeoutOrNull() (I507f0, b/179239764, b/182397793)
  • 添加了用于获取裁剪边界的测试方法。 (I6b28e)
  • 为 ViewConfiguration 添加了最小触摸目标大小,用于语义和指针输入,以确保无障碍。 (Ie861c)

版本 1.1.0-alpha02

2021 年 8 月 18 日

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

API 更改

  • Modifier.sizerequiredSize 添加了 DpSize 版本。 (I3fc7e, b/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 参数。 (Ie4fb0, b/180311607)
  • TextField 现在在按下后退按钮时会清除选择,这与 Android EditText 的行为一致。 (I3ca16, b/174173645)
  • 添加了光标句柄。 (I07a82, b/173016579)

错误修复

  • 现在,通过语义操作(针对延迟加载列表和常规滚动组件)进行的滚动是带动画的。 (Id9066, b/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/1748871, b/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) 将阻止点击事件传递到父级。 (Ic2c3b, b/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。 (I3c3e8, b/189951065)
  • 将枚举 Role 和 LiveRegionMode 更改为使用私有构造函数的内联类。 (Id1890)
  • KeyboardCapitalization 已转换为内联类。 (Id5a1c)
  • TextOverflow 已更改为内联类。 (I433af)

错误修复

  • 现在,当为 LazyColumn/Row 项目指定唯一键时,滚动位置将根据键进行维护,这意味着如果您在当前可见项目之前添加/删除项目,则具有给定键的项目将保持为第一个可见项目。 (Id263f, b/184257857)
  • 键常量目前为 @ExperimentalComposeUiApi。使用代码可以在稳定之前声明私有常量。 (Ia5d48)
  • 在 AndroidComposeTestRule 中添加了 IdlingStrategy,测试框架可以使用它来安装替代机制来等待或达到静止状态。在测试开始之前使用 AndroidComposeTestRule.setIdlingStrategyFactory() 安装您自己的策略。(I608fa

添加了配置文件规则

此版本在以下 Compose 模块中添加了配置文件规则(I14ed6

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

什么是配置文件规则?

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

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

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

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

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

  • The <METHOD_SIGNATURE> 是方法的签名,包括方法的名称、参数类型和返回类型。例如,方法 fun isPlaced(): BooleanLayoutNode 上具有签名 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 和文本语义属性不再是单个值,而是列表。这使得能够将它们合并,而不是连接。还提供了更好的测试 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 而不是 @ImmutableI88c50

错误修复

  • 修复了在非空文本中长按空白区域导致的崩溃问题。(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 契约。(I93354, b/184830577)

错误修复

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

版本 1.0.0-beta04

2021 年 4 月 7 日

androidx.compose.foundation:foundation:1.0.0-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 的公共实例。(I4e83e, b/181869067)

错误修复

  • 修复了快速滑动后 LazyColumn/LazyRow 的边缘项目定位不正确的问题 (Ie4d13, b/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 已弃用。现在,在没有 MonotonicFrameClock 的情况下调用 withFrameNanosRecomposer.runRecomposeAndApplyChanges 会抛出 IllegalStateException。(I4eb0d)

错误修复

  • FlingBehavior.performFling() 现在即使在速度为 0 时也会被调用 (I0b6e5, b/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 接口。(I5951e, b/168778053)
  • 添加了新的 LocalSoftwareKeyboardController 组合本地 API 来替换 TextField 上以前的 SoftwareKeyboardController 接口。(I84472, b/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 (I67269, b/179995594)
  • 用于调整到内在大小的修饰符不再是实验性的。(I15744)
  • 已删除 dp 断言 (I798d2)
  • 已从所有文本字段中删除 SoftwareKeyboardController 回调,以尽快由新 API 取代。(Iae869, b/168778053)
  • MeasureBlocks 已重命名为 MeasurePolicy,后者已成为一个有趣味接口。布局 API 已更新/简化为使用 MeasurePolicy。(Icab48, b/167662468, b/156751158)
  • InteractionState 已被 [Mutable]InteractionSource 取代
    • 接口负责发出/收集交互事件。
    • 不要将 interactionState = remember { InteractionState() } 传递给诸如 ButtonModifier.clickable() 之类的组件,而是使用 interactionSource = remember { MutableInteractionSource() }
    • 不要使用:Interaction.Pressed in interactionState,而是使用 InteractionSource 上的扩展函数,例如 InteractionSource.collectIsPressedAsState()。
    • 对于复杂的用例,您可以使用 InteractionSource.interactions 来观察交互流。有关更多信息,请参见 InteractionSource 文档和示例。
    • (I85965, b/152525426, b/171913923, b/171710801, b/174852378)
  • 已删除弃用的 LayoutCoordinates 方法,使用函数而不是属性来获取 positionInParent 和 boundsInParent (I580ed, b/169874631, b/175142755)
  • 为来自低级文本组件(例如 CoreTextField)的输入会话创建了新的 TextInputSession。(I8817f, b/177662148)
  • Placeable 现在公开了 measuredSize,表示子布局实际测量的尺寸。此尺寸可能不符合测量约束。(Ib2729, b/172560206, b/172338608)
  • 添加了 selectionGroup 修饰符,该修饰符允许标记 Tab 或 RadioButton 集合以实现无障碍目的 (Ie5c29)
  • 添加 LazyListState.animateScrollToItem

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

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

  • Modifier.zoomable 已被 Modifier.transformable 取代。已添加 smoothPanBy、smoothRotationBy 作为一项功能。(Ifc32b, b/175294473)

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

    此更改消除了没有提供默认工厂的不可为空类型的潜在类型错误。以前,这将为不可为空类型提供空引用。

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

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

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

  • 文本操作现在会自动检查焦点 (I13777, b/179648629)

  • 已删除 runBlockingWithManualClock (I15cdc, b/179664814)

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

  • smoothScrollBy 和 scrollBy 方法的包已更改为 androidx.compose.foundation.gestures.* (I3f7c1, b/175294473)

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

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

  • defaultMinSizeConstraints 已重命名为 defaultMinSize。(I4eaae)

  • Modifier.tapGestureFilter 已被移除。请使用 Modifier.pointerInput { detectTapGestures(...) } 代替。 (I266ed, b/175294473)

  • 指针输入系统中已移除部分消耗。推荐使用 Modifier.nestedScroll 来协调部分消耗。 (Ie9c9b)

  • Orientation 已移至 foundation 包。VelocityTracker 已从 ui.gesture 移至 ui.input.pointer。 (Iff4a8, b/175294473)

  • AnimationClockObservable 及其子类已被移除。AnimatedFloat 已被移除。 (Icde52, b/177457083)

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

  • Providers 已重命名为 CompositionLocalProvider

    • Composition 构造函数不再接受 key 参数,并且已被弃用。
    • currentCompositeKeyHash 已变成可组合的顶级属性,而不是可组合的顶级函数。
    • CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空间
    • ComposableLambda 已成为接口,而不是具体的类,并且不再具有类型参数。
    • ComposableLambdaN 已成为接口,而不是具体的类,并且不再具有类型参数。
    • snapshotFlow 函数已移至 androidx.compose.runtime 命名空间
    • SnapshotMutationPolicy 的 merge 方法不再是实验性的
    • 顶级 clearRoots 函数 @TestOnly 已被移除。它不再需要。
    • 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 现在需要记住 key,以指示指针输入检测协程何时应为新的依赖项重新启动。 (I849cd)
  • 测试更新:hasText() 将检查文本字段中的输入和标签/提示/占位符文本 (Iab803)
  • 添加了 PaddingValues.Absolute,它可用于接受 PaddingValues 的 API 中。 (Ia5f30)
  • onImeActionPerformed 已被弃用。请改用 KeyboardActions (If0bbd, b/179071523)
  • 为了更好地与 ImageBitmap 和 ImageVector 的命名约定相匹配,ImagePainter 已重命名为 BitmapPainter,以与 VectorPainter 平行。 (Iba381, b/174565889)
  • 更好的子字符串测试 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 语义现在采用返回 Floats 的 lambda,而不是直接的 Float 值。 (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 对象,现在您需要使用具有 stateSaver 参数的 rememberSaveable 的新重载。用法将如下所示: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)

  • 为了支持形状在 rtl 方向上的自动镜像,RounderCornerShape、CutCornerShape 和 CornerBasedShape 上的参数已从 left/right 重命名为 start/end。AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape 是针对不需要自动镜像的情况而引入的。(I61040b/152756983)

  • canDrag 已从 Modifier.scrollable 中删除。(Id66e7b/175294473)

  • Compose 编译器插件的目标 API 已重构为使用接口而不是具体类。该接口也不再使用类型参数。

    这是一个内部更改,不应影响源代码兼容性,但会造成二进制兼容性问题。(I3b922b/169406779)

  • Modifier.scaleGestureFilter 已被删除。请改用 Modifier.zoomable。或者,使用 Modifier.pointerInput { detectMultitouchGestures { ... }} (Id5da1b/175294473)

  • AnimatedValue/Float 现已弃用。请改用 Animatable。(I71345b/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 现在默认情况下使用由窗口的 ViewTreeLifecycleOwner 驱动的延迟创建的、窗口范围的 Recomposers。当主机 Lifecycle 停止时,重构和基于 withFrameNanos 的动画滴答暂停。(I38e11)

  • Recomposer.runningRecomposers 现在提供了一个全局 StateFlow,用于观察正在进行的合成状态的只读 RecomposerInfo,请优先使用此 API 而不是 Recomposer.current(),后者现在已弃用。(If8ebe)

版本 1.0.0-alpha11

2021 年 1 月 28 日

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

API 更改

  • 弃用非挂起 scrollBy,删除非挂起 scrollTo

    我们现在建议使用挂起函数来控制滚动并等待滚动完成。作为此转换的一部分,我们正在弃用和/或删除这些函数的非挂起版本。(Ie9ced)

  • 弃用非挂起 smoothScrollBy 我们现在建议使用挂起函数来控制滚动并等待滚动完成。作为此转换的一部分,我们正在弃用这些函数的非挂起版本。(I12880)

  • 内容描述参数已添加到 Image 和 Icon 中。它用于向辅助功能服务提供描述 (I2ac4c)

  • BasicTextField 收到一个名为“decorationBox”的新参数。它允许向文本字段添加装饰,如图标、占位符、标签等,并增加文本字段的点击目标区域。(I16996)

  • canDrag 参数已从 Modifier.draggable 中删除 (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)

  • propagateMinConstraints 参数已添加到 Box 中,用于指定传入的最小约束是否应传递到 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 现在已弃用。

    RememberObserverCompositionLifecycleObserver 的替代品,具有修改后的语义和重命名的方法。对于仅被记住一次的对象,可以机械地更改为新的 API,这始终是,并且仍然是推荐的做法。但是,如果在合成中多次记住某个引用,则会为每个引用调用 onRemembered,而 onEnter 只调用一次。如果对象在子合成中使用,例如 WithConstraintsScaffold,则 onEnter 会被多次调用,这使得单个 onEnter 调用保证不可靠,因此已从 RememberObserver 中删除。

    RememberObserver 添加了 onAbandoned,如果从传递给 remember 的回调中返回了 RememberObserver 实例,但没有在合成状态中记住,因此永远不会调用 onRemembered,则会调用它。如果在完成之前异常终止了合成,或者合成被丢弃,因为正在为其生成合成的状态不再是当前状态或不再需要,则可能会发生这种情况。如果上面的单个引用推荐之后的 RememberObserver 实例正在跟踪外部资源,则 onForgottenonAbandoned 都指示不再需要该资源。如果对象正在跟踪在 onRemembered 中启动的工作或分配的资源,则可以忽略 onAbandoned,因为它不会在调用 onRemembered 时被调用。(I02c36)

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

    • TransformedText 不再是数据类 (Ie672a)
  • 以下类不再是数据类

    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99)
  • 已移除实验性的 monotonicFrameAnimationClockOf 方法 (Ib753f, b/170708374)

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

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

    • 请使用 ImeAction.Default 代替 ImeAction.Unspecified (Ie1bcc)
  • FocusRequester.createRefs 现在标记为实验性,因为它可能会更改。 (I2d898, b/177000821)

  • SemanticsPropertyReceiver.hidden 已重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。AccessibilityRangeInfo 已重命名为 ProgressBarRangeInfo。stateDescriptionRange 已重命名为 progressBarRangeInfo。AccessibilityScrollState 已重命名为 ScrollAxisRange。horizontalAccessibilityScrollState 已重命名为 horizontalScrollAxisRange。verticalAccessibilityScrollState 已重命名为 verticalScrollAxisRange。 (Id3148)

  • 已将 VisualTransformation 更改为函数式接口 (I3bba4)

  • 在测试中利用 TestCoroutineDispatcher (I532b6)

  • 已移除 PointerInputData,并修改了 PointerInputChange 以赋予它 PointerInputData 的所有字段。PointerInputEvent 和 PointerInputEventData 已变为内部,因为它们没有在任何公共 API 中使用。 (Ifff97, b/175142755)

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

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

版本 1.0.0-alpha10

2021 年 1 月 13 日

androidx.compose.foundation:foundation:1.0.0-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)
  • 已添加 Semantics 角色 API,并将 Role 添加为可点击、可选择和可切换的 SemanticsModifier 的参数。已更改 Modifier.progressSemantics,以便 Slider 也可以使用它。 (I216cd)
  • 现在可以通过 keyEvent.nativeKeyEvent 访问本机 keyEvent (I87c57, b/173086397)

版本 1.0.0-alpha09

2020 年 12 月 16 日

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

  • Autofill API 现在是实验性 API,需要选择加入 (I0a1ec)

  • 已添加解构声明以创建 FocusRequester 实例 (I35d84, b/174817008)

  • accessibilityLabel 已重命名为 contentDescription。accessibilityValue 已重命名为 stateDescription。 (I250f2)

  • 已在 SelectionRegistrar 中引入多个新函数,并将 onPositionChange 重命名为 notifyPositionChange。 (Ifbaf7)

  • AndroidOwner 已变为内部 (Ibcad0, b/170296980)

  • 已添加用于创建 InfiniteRepeatableSpec 的新 infiniteRepeatable 函数 (I668e5)

  • Applier 接口已更改,以简化从下到上而不是从上到下构建树。

    The insert() 方法已重命名为 insertTopDown()

    添加了一个新方法 insertBottomUp()

    应用器使用 insertTopDown()insertBottomUp() 将节点插入其正在编辑的树中,具体取决于哪种方法的性能更好。

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

  • 添加了 painterResource API 来处理从栅格化资产格式(如 PNG)或 VectorDrawables 不透明地加载 Painter 对象。使用者不再需要提前确定资产类型,并可以调用此方法获取 Painter 对象以在 Image 可组合物或 Painter 修饰器中使用。(I2c703b/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
  • 添加了用于可组合 lambda 参数命名和位置的 lint 检查,以检查与 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
  • 将基础语义属性移至 ui(I6f05c
  • 添加基于协程的滚动 API

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

  • 将 singeLine 参数添加到 BasicTextField、TextField 和 OutlinedTextField 中。将此参数设置为 true 以将文本字段设置为可水平滚动的单行。(I57004b/168187755

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

  • 在基础中添加了 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
  • 将 resetInput 参数添加到 TextInputService#onStateUpdated (I3e8f5b/172239032b/171860947)
  • 更新了 TextFieldValue API
    • 使 TextFieldValue.composition 成为只读
    • 删除了为无效选择范围抛出的异常 (I4a675b/172239032)
  • 弃用了以 Ambient 作为后缀命名的 Ambients,并用以 Ambient 为前缀的新属性替换了它们,遵循其他 Ambients 和 Compose API 指南。(I33440
  • 添加了 Android Typeface 包装器。您可以通过 typeface 函数(例如 typeface(Typeface.DEFAULT))加载 Android Typeface。还将 typefaceFromFontFamily() 重命名为 typeface() (I52ab7)
  • 添加了 lint 检查以检查 Modifier 工厂内部使用 androidx.compose.ui.composed {},而不是标记为 @Composable。(I3c4bc
  • 添加了 lint 检查以检查 Modifier 工厂函数定义为 Modifier 的扩展,以便可以将它们流畅地链接在一起。(I07981
  • 语义参数 mergeAllDescendants 已重命名为 mergeDescendants。(Ib6250
  • 测试中的时间控制(TestAnimationClock 及其用法)现在是实验性的 (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,用于 LayoutIdParentDataMeasurable.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
  • 基础 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 (Idab7a, b/166584730)
  • BaseTextField 已被弃用。请改用 BasicTextField。(I896eb)
  • BasicTextField 已被添加,用作 CoreTextField 和 BaseTextField 的替代品 (Id4cea)
  • 移除已弃用的 LazyColumnItems/LazyRowItems (I1d8a8)
  • 已移除用于调整为内在尺寸的已弃用可组合项。(I18537, b/171811496)
  • relativePaddingFrom 已重命名为 paddingFrom。paddingFromBaseline 修饰符已添加,方便指定从布局边界到文本基线的距离。(I0440a, b/170633813)
  • matchHeightConstraintsFirst 参数已添加到 aspectRatio 修饰符中,可用于指定修饰符在尝试宽度对应项之前调整为高度约束。(Ie7c43, b/155290593)
  • 已移除已弃用的 DpConstraints。(I87884, b/171702471)

错误修复

  • 引入了 ScaleFactor 内联类,用于表示水平和垂直轴的比例因子,它们相互独立,以便支持非均匀缩放用例。
    • 向 ContentScale 添加了 computeScaleFactor 方法
    • 添加了 ContentScale.FillBounds,以执行非均匀缩放,将 src 边界拉伸以完全占用目标。
    • 添加了运算符方法,可以使用 Size 参数计算 ScaleFactor 参数。
    • (Ic96a6, b/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 进行着色会导致使用透明颜色进行着色,最终导致根本没有渲染任何内容。(I049e2, b/171624632)
  • MeasureResult 已移出 MeasureScope。(Ibf96d, b/171184002)
  • 几个与布局相关的符号已从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98, b/170475424)
  • androidx.ui.test 已移至 androidx.compose.ui.test (I9ffdb)
  • FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 包 (Ied2e7)
  • 添加了没有回调的 SelectionContainer (Ibfadb)
  • 添加了对 SelectionContainer 中的选择句柄位置的测试。(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)
  • 将 interactionState 添加到 Modifier.scrollable、ScrollableColumn 和 LazyColumnFor (I81566, b/169509805)
  • 将 alignByBaseline 添加到 RowScope 中,并将 alignWithSiblings 重命名为 alignBy (I06503, b/170628732)
  • Box 已成为内联函数。(Ibce0c, b/155056091)
  • 将 maxLines 添加到 CoreTextField (Ibee58, b/143687793)
  • 将 softwrap 添加到 CoreTextField。(I21a4b)

错误修复

  • 弃用 VectorPainter,支持 rememberVectorPainter,以更好地表明可组合 API 在内部利用“remember”在组合之间保留数据。(Ifda43)
  • 在 ComposeTestRule 中启用过渡;从 ComposeTestRule 中删除启用闪烁光标的选项。(If0de3)
  • 将单行键盘选项添加到 CoreTextField (I72e6d)
  • 将 Radius API 重命名为 CornerRadius,以更好地表达它在整个 Compose 中的使用方式。更新文档以表明负角半径被钳制为零。(I130c7, b/168762961)
  • 添加在组合修饰符中指定检查器信息的能力 (Idee08, b/163494569)
  • 添加了键盘大写 IME 选项 (I8ac38)
  • 修复 Rtl 句柄位置。(I6e1e0)
  • 重大变更:从 PointerInputFilter.onPointerEvent(...) 中删除返回值,因为唯一可以在指针事件中更改的值是使用数据。现在,您只需修改传递给 PointerInputFilter.onPointerEvent(...) 的 PointerEvents 的使用数据,而不是从 PointerInputFilter.onPointerEvent(...) 返回数据。(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 (I97611, b/169797763)
  • 添加了复制/粘贴/剪切辅助功能操作 (I6db4f)
  • 引入了 TextOverflow.None。当 overflow 为 None 时,Text 将不再处理 overflow,它会将其实际大小报告给 LayoutNode。(I175c9, b/158830170)
  • 已更新 Size.Unspecified 参数,以使用 Float.NaN 而不是 Float.POSITIVE_INFINITY。已更新 Painter 实现,以检查 Size.Unspecified 以及非有限大小。(I95a7e)
  • 添加了 Paging Compose 模块和分页集成 (Ib85da)
  • 修改 LazyListScope 以接收可空值 (I1765b)
  • 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8, b/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。(I94893, b/167680279)
  • Box 装饰参数已弃用。如果您想在您的框中添加装饰/填充,请改用修饰符(Modifier.background、Modifier.border、Modifier.padding)(Ibae92, b/167680279)
  • 添加了新的 LazyListState 类。这允许观察和控制 LazyRow 和 LazyColumn 组件的滚动位置。可以使用 rememberLazyListState() 创建实例,并将其传递到组件的 state 参数中。目前,在这个初始版本中可以观察到第一个可见项目和偏移量。(Ic7cb7, b/159307669)
  • 现在,在 Activity 重新创建期间保存和还原了延迟列表位置和滚动偏移量 (Ie045f, b/166589058)
  • 添加长按语义操作 (I6281b, b/156468846)
  • 添加 MutatorMutex 实用程序,用于长时间保持共享状态的单个 mutator 并根据优先级取消冲突的 mutator (I3f975)
  • 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行注释,使它们成为内部 API 并隐藏其 kdoc (I554eb, b/168308412)
  • 从带有 String 输入的 Text 中删除 inlineContent 参数。它不会被使用,因为 inlineContent 必须与 AnnotatedString 一起使用。(Ief403)
  • 已删除弃用的自定义 Arrangement API。(Ic576d, b/168297922, b/168297923)
  • unbounded 参数添加到 wrapContentSize 修饰符,这使测量具有无限最大约束的布局元素成为可能。(I77951, b/158559319)
  • 我们阻止了布局范围内容的静态导入(例如 RowScope 中的 alignWithSiblings)。应该改用显式范围替代方案:with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }。(I216be, b/166760797)

错误修复

  • 更新了许多 Graphics API
    • 更新了比例和旋转变换 API,以使用单个 Offset 参数来表示枢轴坐标,而不是在 DrawScope 和 DrawTransform 中使用单独的浮点参数来表示 x/y 坐标
    • 删除了 Rect.expandToInclude 和 Rect.join 方法
    • 更新了 Radius 文档,除了椭圆形之外,还说椭圆形
    • 添加了文档,以指示不应该直接调用内联 Radius 类的公共构造函数,而应通过其函数构造函数实例化 Radius 对象
    • 删除了用于查询 topRight、bottomRight、bottomCenter 等的 RoundRect API
    • 弃用 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 扩展函数迁移为属性
    • (I8f5c7, b/168762961)
  • LazyColumnFor/LazyRowFor 滚动的性能优化,通过在每次滚动时不进行不必要的重新组合 (I64f65, b/168293643, b/167972292, b/165028371)
  • 修复了滚动后更改项目并在 LazyColumnFor/LazyRowFor 中崩溃,并实现了在删除之前可见的项目时自动向上滚动,因此我们不再显示末尾的空隙 (I220ab, b/161480164, b/167855468)
  • 不再允许将可滚动的容器嵌套在与 ScrollableContainer 和 LazyColumnFor 相同方向的容器中。它从未得到支持,并且会破坏 LazyColumnFor 的项目组合的弹性和所有延迟 (I6e101)
  • 更新了许多 Graphics 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
    • (If086a, b/167737376)
  • 将 AccessibilityScrollState 添加到语义属性中。(Ifeda9)
  • 使 TextRange 内联以避免创建对象。(Id034b)
  • 删除了 ParagraphConstraints。现在将 Width 直接传递给 Paragraph。(Ica712)

版本 1.0.0-alpha03

2020 年 9 月 16 日

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

API 更改

  • 将 InnerPadding 重命名为 PaddingValues。(I195f1, b/167389171)
  • 在布局 API 中,对重力的使用始终重命名为 align 或 alignment。(I2421a, b/164077038)
  • 向 Stack 添加了 alignment 参数,它允许为所有 Stack 子级指定默认对齐方式。(Ie80ca, b/164085265)

错误修复

  • DpConstraints 及其使用的 API 已弃用。(I90cdb, b/167389835)
  • 参数 minWidthmaxWidthwidthIn 被重命名为 minmax。类似地,对于 preferredWidthInheightInpreferredHeightIn。(I0e5e1, b/167389544)
  • 在 ComposeTestRule 上添加了 onNode 和其他全局方法,因为当前的全局方法将被弃用。(Ieae36)
  • 修复了 GestureScope 中的大小和位置计算,这会导致生成无效的滑动手势,例如 (Iaf358, b/166589947)
  • createAndroidComposeRuleAndroidInputDispatcherandroidx.ui.test.android 移动到 androidx.ui.test (Idef08, b/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 被标记为实验性 (Iae99d, b/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")
        }
    }
    

    (I0a85b, b/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 更改

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

错误修复

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

版本 0.1.0-dev16

2020 年 8 月 5 日

androidx.compose.foundation:foundation:0.1.0-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() 不起作用(因为项目是以无限约束进行测量的)的用例。(Ibd3b2, b/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 (I46491, b/161887429)
  • 为 LazyRowItems/LazyColumnItems 添加了 crossaxis gravity 参数。LazyRowItems/LazyColumnItems 现在支持包装内容行为。(Ib39fc)
  • ZoomableState 已重命名为 ZoomableController。已为 smoothScale 添加了自定义曲线支持。已添加 enabledonZoomStarted 功能 (If8b8f)
  • Material FilledTextField 已重命名为 TextField,基础 TextField 已重命名为 BaseTextField,以使最简单的 API 易于发现和使用 (Ia6242, b/155482676)
  • 先前已弃用的 AdapterList 已移除。改用 LazyColumnItems (I12b9b)
  • Modifier.drawBackground 已重命名为 Modifier.background (I13677)
  • 已移除旧的 ConstraintLayout DSL。ConstraintSet2 已重命名为 ConstraintSet。(If58d1, b/162450908)
  • 添加了 Modifier.absoluteOffset() 和 Modifier.absoluteOffsetPx()。与 offset 修饰符不同,absolute offset 修饰符不会在从右到左的上下文中自动镜像 (I3aa21)
  • RowColumn 现在是内联函数,大大减少了使用它们的开销。(I75c10)

错误修复

  • 解决广泛的 API 修复 (I077bc)
    1. 移除未使用的 OffsetBase 接口
    2. 调整 Offset 和 IntOffset 类以具有一致的 API 表面
    3. 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
    4. 将 nativeCanvas 方法从 Canvas 接口移出,以支持消费者创建自己的 Canvas 实例
    5. 创建了 stub 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 方法以在参数更改时有条件地覆盖 paint 上的笔划参数
    23. 更新 Size 以添加解构 API,将 UnspecifiedSize 重命名为 Unspecified,并移除未使用的 method
  • 添加了 MonotonicFrameAnimationClock,使您能够使用 MonotonicFrameClock 作为 AnimationClockObservable,以弥合新的基于协程的时钟和仍然使用旧的基于回调的时钟的 API 之间的差距。

    ManualAnimationClock 的 MonotonicFrameClock 等效项现在是 ManualFrameClock。(I111c7, b/161247083)

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

  • SemanticsNodeInteraction.getBoundsInRoot() 重命名为 SemanticsNodeInteraction.getUnclippedBoundsInRoot() (Icafdf, b/161336532)

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

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

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

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

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

  • OnChildPositioned 已弃用。改在子级上使用 OnPositioned。(I87f95, b/162109766)

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

  • 向可访问性操作添加获取 TextLayoutResult 的功能 (I9d6e6)

版本 0.1.0-dev15

2020 年 7 月 22 日

androidx.compose.foundation:foundation:0.1.0-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 参数,它允许在内容被裁剪后添加 padding,而这无法通过修饰符参数来实现。它还允许仅在第一个项目之前/最后一个项目之后添加间距。(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。这样做是为了在布局大小大于绘图程序的内在大小的情况下按比例放大底层 Painter,同时保持纵横比。这种行为更好地匹配了为 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 个浮点值,以表示用浮点值表示的宽度和高度。 (Ic0191)
  • 为了合并用于表示定位信息的类数量,标准化使用 Offset 类而不是 PxPosition。这提供了内联类的优势,可以利用 long 来打包 2 个浮点值,以表示用浮点值表示的 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)

  • 现在可以通过使用 SoftwareKeyboardController 来隐藏/显示软件键盘,该控制器由 onTextInputStarted 回调传递 ( 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,请改用 ContentColorAmbient 直接与 Providers 一起使用 ( Iee942)

  • 在文本中添加了颜色参数,允许覆盖文本样式的颜色,而无需手动与主题中提供的样式合并。 (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。您可以直接将 AppBarIcon 的现有用法替换为 IconButton,它们现在将具有正确的触摸目标。有关使用方法的信息,请参见示例,并参见 Icons 以了解您可以直接与这些组件一起使用的 Material Icons。 (I96849)

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

  • 添加了 AdapterList,这是一种滚动列表组件,它只合成和布局可见的项目。目前已知的问题包括它只支持垂直滚动,并且不会完全处理对子项更改的所有情况。 (Ib351b)

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

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

  • 向 Box 添加 padding、边框、形状和 background 参数 (I05027b/148147281)

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

  • Border 修饰符重命名为 DrawBorder (I8ffcc)

  • 添加了 Box 组件,用于组合布局和绘制常用功能。 (I6e2a7)

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

  • 用 Border Modifier 替换 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 布局修饰符,它可用于定义(动态)偏移量(以像素为单位)。 (I5af57)

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

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

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

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

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

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

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

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

  • 修复了 width 和 height 修饰符中的一个错误,该错误导致包装布局在没有相反轴约束的情况下进行测量。 (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 Buttons 的 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 选择实现 LongPressAndDrag。 (I17919)

错误修复

  • FocusModifier 已被弃用,请改用 Modifier.focus、Modifier.focusRequester、Modifier.focusObserver。FocusState 和 FocusDetailedState 已被弃用,请改用 FocusState2 (I46919b/160822875b/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)
  • 在此更改之前,如果存在(I5205a, b/158123804),Compose 编译器插件将非平凡地拦截对 @Composable 函数内部构造函数的调用。
  • 添加 viewModel() 可组合函数,它允许创建或获取已创建的 ViewModel,类似于它在 Activity 或 Fragment 中的工作方式。(I5fdd1)
  • 重构了 Radius 类,使其成为内联类。删除了伴随创建方法,转而使用带有默认参数的函数构造函数,以使沿 y 轴的半径与沿 x 轴的强制半径参数相匹配。

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

  • 在各种 Compose 类中,替换了 Px 类的使用,这是为了在大型重构工作中仅依赖于 Dp 和原始类型作为像素参数。已删除 Px 类本身。(I3ff33)

  • 在各种 Compose 类中,替换了 Px 类的使用,这是为了在大型重构工作中仅依赖于 Dp 和原始类型作为像素参数。(I086f4)

  • 在各种 Compose 类中,替换了 Px 类的使用,这是为了在大型重构工作中仅依赖于 Dp 和原始类型作为像素参数。(Id3434)

  • 在各种 Compose 类中,替换了 Px 类的使用,这是为了在大型重构工作中仅依赖于 Dp 和原始类型作为像素参数。(I97a5a)

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

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

  • 在各种 Compose 类中,替换了 Px 类的使用,这是为了在大型重构工作中仅依赖于 Dp 和原始类型作为像素参数。(I57bff)

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

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

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

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

  • 向 ImagePainter 引入额外的可选矩形参数,以支持绘制基础 ImageAsset 的子部分。(I0ea9e)

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

  • 我们更改了测量您放在 activity.setContent { } 块中的第一个布局的方式。之前它被强制填充整个 Activity 屏幕,现在它的行为就像您将布局放在 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)

  • 用修饰符 drawClip() 替换可组合函数 Clip。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)
  • 对 Ambient API 的重大更改。有关详细信息,请参阅日志和 Ambient<T> 文档。(I4c7ee, b/143769776)

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

  • 修复了 ConstraintLayout 中导致重组时崩溃的错误。(Ibee5a, b/158164341)

  • WithConstraints 尾随 lambda API 已更改。现在它有两个参数,而是有一个接收器范围,除了约束和布局方向之外,它还提供了以 Dp 为单位的 minWidth、maxWidth、minHeight 和 maxHeight 属性。(I91b9a, b/149979702)

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

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

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

  • 为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。(Icacdd, b/152735784)

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

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

  • 在 LayoutPadding 中不允许负填充。对于负位置偏移,应该使用 LayoutOffset。(Ifb5b1)

  • WithConstraints 获得了 LayoutDirection 参数 (I6d6f7)

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

  • 更改 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 代替 (I15ff0, b/158841414)

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

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

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

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

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

  • 为了与 androidx 策略保持一致,ui-android-text 包名(androidx.text)替换为 androidx.ui.text.platform。(I42711)