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.runtime | Compose 编程模型和状态管理的基本构建模块,以及 Compose 编译器插件的目标核心运行时。 |
compose.ui | Compose 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.clickable
、Modifier.focusable
、Modifier.indication
、Modifier.scrollable
和Modifier.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。
- 添加了新的 Indication API,
- 使用
TextFieldState
的BasicTextField
现在是稳定的,我们建议所有调用站点从BasicTextField(value, onValueChange)
迁移到BasicTextField(TextFieldState)
。 ClickableText
已被弃用。 要在文本中添加可点击的链接,请使用BasicText
,并在您的AnnotatedString
中使用新的LinkAnnotation
注释。LinkAnnotation
允许根据链接状态(例如,焦点、悬停)进行自定义样式设置。- 介绍了
ContextualFlowRow
和Enhanced FlowRow/Column
,具有MaxLines
和Overflow
。 我们很高兴地宣布对实验性的FlowRow
和FlowColumn
进行增强,现在它们具有maxLines
和溢出支持,以及ContextualFlowRow
和ContextualFlowColumn
的首次亮相。 此更新旨在提供性能最佳的组件,其中ContextualFlow*
非常适合大量项目,这些项目使用较小的 maxLines 配置和动态 +N “查看更多” 按钮,而FlowRow
和FlowColumn
非常适合少量项目,少于 100 个项目。 重要提示:为了在FlowRow
或FlowColumn
中保留现有行为(无论是否适合横轴最大值,都会组合所有项目),请在初始化期间将溢出设置为FlowRowOverflow.Visible
或FlowColumnOverflow.Visible
。 探索ContextualFlowRowSample
和FlowRowSample
,以查看这些新功能的实际示例。 (Ib9135,b/293577082) - 项目出现和消失动画支持已添加到
LazyColumn
和LazyRow
中。 以前,可以添加Modifier.animateItemPlacement()
修饰符来支持放置(重新排序)动画。 我们弃用了此修饰符,并引入了一个新的非实验性修饰符,名为Modifier.animateItem()
,它允许您支持所有三种动画类型:出现(淡入)、消失(淡出)和重新排序。 (I2d7f7,b/150812265) - 使用官方 Android API (
ScrollCaptureCallback
) 在 Compose 滚动容器中实现了对长截图的实验性支持。 NestedScroll
源 Drag 和 Fling 正在被UserInput
和SideEffect
替换,以适应这些源的扩展定义,这些定义现在包括动画(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
函数performTextReplacement
、performTextInput
和performTextClearance
现在将在它们在只读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
更改为 valisEditable
。 此属性现在是一个布尔值,始终由文本字段指定。 (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
。 相反,TextLinkStyles
是LinkAnntation
构造函数和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) - 已将
onDragStarted
和onDragStopped
替换为非挂起回调。 (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 包含 这些提交。
新功能
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) - 修复了一个问题,即当
AnchoredDraggableState
的currentValue
接近状态边界时,它会发生变化。 (Iea30b, b/333846848)
外部贡献
- 将
PrefetchExecutor
重命名为PrefetchScheduler
,以更好地反映其职责。 (Ib9154) - 添加了对嵌套
LazyLists
中项目预取的支持(例如,渲染嵌套LazyRows
的LazyColumn
)。此更改预计会减少这些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) - 项外观和消失动画支持已添加到
LazyVerticalGrid
和LazyHorizontalGrid
中。以前,可以通过添加Modifier.animateItemPlacement()
修饰符来支持放置(重新排序)动画。我们弃用了此修饰符,并引入了一个新的非实验性修饰符,称为Modifier.animateItem()
,它允许你支持所有三种动画类型:外观(淡入)、消失(淡出)和重新排序。 (Ib7d12, b/330510929) - 项外观和消失动画支持已添加到
LazyVerticalStaggeredGrid
和LazyHorizontalStaggeredGrid
中。以前,可以通过添加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
方法中添加了样式参数 (linkStyle
、focusedLinkStyle
、hoveredLinkStyle
) 和链接交互侦听器。当使用<a>
标记解析 HTML 标记字符串时,该方法将为每个此类标记构造一个LinkAnnotation.Url
,并将样式对象和链接交互侦听器传递给每个注释。 (I7c977) LinkAnnotation
现在接受基于状态的样式参数和LinkInteractionListener
。将此注释添加到AnnotatedString
以获得超链接。通过传递focusedState
和/或hoveredState
,您可以定义链接在获得焦点和/或悬停时的视觉配置。(I81ce4,b/139312671)- 长截图的功能标志已被移除。(I28648,b/329128246)
LazyColumn
现在将在长截图中正确渲染粘性标题。(I8d239,b/329296635)- 稳定了大多数与新的
BasicTextField
一起引入的剩余实验性 API。(I714e2) - 添加了
textObfuscationCharacter
参数到BasicSecureTextField
,用于控制在模糊内容时使用哪个字符。(I0588b) NestedScroll
源 Drag 和 Fling 正在被UserInput
和SideEffect
替换,以适应这些源的扩展定义,这些定义现在包括动画(副作用)和鼠标滚轮和键盘(UserInput
)。(I40579)- 引入
LocalBringIntoViewSpec
,一种平台相关的焦点滚动行为,它在 Scrollable 修饰符层应用。(I27aa5,b/317453911) - 移除
TextFieldCharSequence
。TextFieldBuffer.originalValues
被TextFieldBuffer.originalText
和TextFieldBuffer.originalSelection
替换。(I2c7d6) ImeOptions.hintLocales
现在不再是可空的。如果要传递空 Locale 列表,请使用LocaleList.Empty
。(Ic5bc4)- 重命名
getOffsetFractionForPage
为getOffsetDistanceInPages
。(Ia05e2)
错误修复
- 当
InputTransformations
与next
连接时,它们的KeyboardOptions
现在通过使用新的KeyboardOptions.merge
方法的各个选项正确合并。(Ie5304,b/295951492) AnchoredDraggableState
的targetValue
现在不再考虑位置阈值。它现在有一个隐含的 50% 阈值,这意味着targetValue
在两个锚点之间的中点处发生变化。(I82c2c)
外部贡献
- 重命名了 2 个滚动 API (I56a75)
版本 1.7.0-alpha06
2024 年 4 月 3 日
androidx.compose.foundation:foundation-*:1.7.0-alpha06
已发布。版本 1.7.0-alpha06 包含 这些提交。
新功能
- 项目出现和消失动画支持已添加到
LazyColumn
和LazyRow
中。 以前,可以添加Modifier.animateItemPlacement()
修饰符来支持放置(重新排序)动画。 我们弃用了此修饰符,并引入了一个新的非实验性修饰符,名为Modifier.animateItem()
,它允许您支持所有三种动画类型:出现(淡入)、消失(淡出)和重新排序。 (I2d7f7,b/150812265) LazyColumn/LazyRow
的客户端现在可以通过调用一个非挂起LazyListState.requestToScroll
来选择退出基于即将到来的测量传递的键维护索引。(I98036,b/209652366)- 为样式化字符串添加了
parseAsHtml
方法:它允许将用 HTML 标签标记的字符串转换为AnnotatedString
。请注意,并非所有标签都受支持,例如,您将无法显示项目符号列表。(I84d3d) - 使用官方 Android API (
ScrollCaptureCallback
) 为 Compose 滚动容器中的长截图实现了实验性支持。此功能是实验性的,目前可能无法正确处理所有情况。因此,它目前默认情况下处于禁用状态。要选择加入,请将ComposeFeatureFlag_LongScreenshotsEnabled
标志设置为 true。此标志将在 1.7 beta 之前移除。(I2b055,b/329296471) - 引入新的
GraphicsLayer
API,以提供在GraphicsLayer
实例的放置和渲染方面更大的灵活性,并支持内在渲染功能,而无需与 Composable 实现进行协调以指定GraphicsLayer
修饰符实例。
API 更改
- 所有
KeyboardOptions
参数现在默认情况下具有未指定的值。添加了KeyboardOptions.merge
方法。 - 重命名
KeyboardOptions.autoCorrect
为autoCorrectEnabled
并使其可为空,其中 null 表示未指定任何值。(Ia8ba0,b/295951492) - 重命名
outOfBoundsPageCount
为beyondViewportPageCount
。(I129c6) fun ClipEntry.getMetadata()
已更改为val ClipEntry.clipMetadata
。(I50155)- 移除
TextFieldState.valueAsFlow()
。最好使用snapshotFlow { state.text }
,或snapshotFlow { TextFieldCharSequence(state.text, state.selection) }
(I7d629) - 重新组织
InputTransformation.transformInput
参数。移除originalValue: TextFieldCharSequence
。相反,TextFieldBuffer
现在使用相同名称携带此值。还移除valueWithChanges: TextFieldBuffer
参数。TextFieldBuffer
现在是函数上的接收器作用域。(I919cc) BasicTextField(state)
变体和BasicSecureTextField
现在使用KeyboardActionHandler
而不是KeyboardActions
来处理软件键盘执行的操作。(I58dda)- 手写笔手写委托 API,以支持在“假”文本输入字段上手写笔手写。(I9c09c,b/327271923)
- 重命名
KeyboardOptions.shouldShowKeyboardOnFocus
为showKeyboardOnFocus
。(Ib4b7a,b/295951492) - 移除
hintMediaTypes
参数从Modifier.contentReceiver
中。开发人员已经被鼓励检查接收到的TransferableContent
的媒体类型,因为它可能与配置的hintMediaTypes
不兼容。(I82f99) - 重新排序
BasicSecureTextField
的参数。移除keyboardType
和imeAction
参数,转而使用完整的KeyboardOptions
类,同时保持与BasicSecureTextField
相符的相同默认值。还移除scrollState
参数。(Ibbfa9) TextFieldState.text
的类型已从TextFieldCharSequence
更改为仅CharSequence
。因此,添加了TextFieldState.selection: TextRange
和TextFieldState.composition: TextRange?
以直接从状态对象读取当前选择和组合值。- 移除
TextFieldState.forEachTextValue
。(Idb2a2) - 移除
ClipboardManager.getClipMetadata
和ClipboardManager.hasClip
函数。请使用clipEntry.getMetadata()
读取当前剪贴板条目的元数据。还要检查ClipboardManager.getClip
的结果是否为空,以了解剪贴板是否有当前剪贴板。(I50498) ClipboardManager.setClip
现在接受 null 以便能够清除剪贴板。(I7d2e9)ReceiveContentListener
已转换为函数接口。此外,还移除了接受 lambda 的Modifier.receiveContent
重载,因为ReceiveContentListener
现在是一个函数接口。Modifier.receiveContent
已重命名为Modifier.contentReceiver
。(I1e6af)- 重命名
TransferableContent.consumeEach
为TransferableContent.consume
。(I1e462) rememberTextFieldState
已升级为稳定的 API。(I37999)
错误修复
- 修复了
BasicTextField(state)
变体无法与 CJK(基于组合)键盘配合使用的错误。(I54425) - 修复了
Modifier.dragAndDropTarget()
在某些情况下可能会引用Modifier.Node
重新使用场景中的陈旧数据。(I05bb1) - 恢复了最近的合同更改,其中
AnchoredDraggableState#anchoredDrag
调用将在anchoredDrag
操作结束时捕捉。(I95715)
版本 1.7.0-alpha05
2024 年 3 月 20 日
androidx.compose.foundation:foundation-*:1.7.0-alpha05
已发布。版本 1.7.0-alpha05 包含 这些提交。
API 更改
- 移除用于样式化超链接的实验性
LocalTextLinkStyle
组合本地。(Iebfa7) - 移除
BasicText
的实验性重写,其中包含onLinkClicked
参数。超链接支持的替代 API 将在未来发布。(I107d5) - 移除
TextFieldState
和TextFieldBuffer
下与 Codepoints 相关的方 AnchoredDraggable
的currentValue
现在将在通过锚点时更新。使用settledValue
来接收以前的currentValue
语义,仅在稳定在锚点时更新。进度现在作为函数(需要起点和终点)而不是属性公开。(Ibe6e8,b/318707189,b/298271489,b/294991954)BasicTextField(state)
、TextFieldState
、InputTransformation
、OutputTransformation
、TextFieldLineLimits
、TextFieldDecorator
已升级为稳定版。(I9582b)- 引入了
InterceptPlatformTextInput
,用于帮助编写低级 IME 相关测试和其他低级 IME 使用案例。已弃用PlatformTextInputTestOverride
。(I862ed,b/322680547) - 将
restrictedConstraints()
拆分为两个方法:fitPrioritizingWidth()
和fitPrioritizingHeight()
(I6d7fd)
外部贡献
- 添加了 2 个新的 API
isLastScrollForward
/isLastScrollBackward
用于检查最新滚动操作的滚动方向,如果尚未进行滚动操作,则返回 false。(I63a0e)
版本 1.7.0-alpha04
2024 年 3 月 6 日
androidx.compose.foundation:foundation-*:1.7.0-alpha04
已发布。版本 1.7.0-alpha04 包含 这些提交。
API 更改
- 在 Android U 之后的设备上支持手写笔手写功能。 (I002e4)
- 将
hintLocales
添加到KeyboardOptions
,为TextFields
提供能够使用特定语言环境提示 IME 以预设首选语言的能力。(Id18c2) - 删除了接受
value: String
和onValueChange: () -> String
参数的实验性BasicTextField2
和BasicSecureTextField
重载。(I568b4) - 向
InputTransformation
添加一个可选的applySemantics
函数,以影响其应用到的BasicTextField2
的语义。(I74a2f,b/170648072) - 在此 CL 中,我们添加了
GetScrollViewportLength
语义操作,以便我们可以将有关 Compose 中滚动组件的信息传递到 a11y 系统。此 CL 还将使用该属性应用于 Foundation Scrollable Lists。(Ic5fa2) BasicTextField2
已重命名为BasicTextField
。(Ie5713)FocusRequester.createRefs
现在已稳定(I4d92c,b/261436820)- 引入了
DelegatableNode.scrollIntoView()
,允许修饰符节点直接发出scrollIntoView
请求。(I2b3b7,b/299939840) - 引入了
DelegatableNode.requireView()
,允许修饰符节点获取当前 AndroidView
,而无需读取合成局部变量。(I40768) - 在 Contextual Flow Row 范围内和 Contextual Flow Column 范围内引入上下文布局信息,其中包含行索引、位置以及最大宽度和高度的约束,以保持在指定位置。超过最大宽度/高度的项目可能会流到下一行或根据溢出设置被省略。(Id13f8,b/292114798)
错误修复
- 修复了在某些情况下切换
TextField
的enabled
或readOnly
属性会导致崩溃的错误。(Iae17b)
版本 1.7.0-alpha03
2024 年 2 月 21 日
androidx.compose.foundation:foundation-*:1.7.0-alpha03
已发布。版本 1.7.0-alpha03 包含这些提交。
API 更改
- 引入了
DelegatableNode.requireLayoutCoordinates()
,作为获取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
参数。请使用BasicSecureTextField
或OutputTransformation
。(Id34ff)- 添加了用于仅比较两个
AnnotatedStrings
的注释的方法。(I32659) - 引入了
ContextualFlowRow
和增强的FlowRow
/Column
,以及MaxLines
和Overflow
。我们很高兴宣布实验性FlowRow
和FlowColumn
的增强功能,现在支持maxLines
和溢出,以及ContextualFlowRow
和ContextualFlowColumn
的首次亮相。此更新旨在提供性能最佳的组件,其中ContextualFlow*
非常适合使用少量maxLines
配置和动态 +N 查看更多按钮的大量项目,而FlowRow
和FlowColumn
非常适合数量较少的项目(少于 100 个项目)。重要提示:为了在FlowRow
或FlowColumn
中保持现有行为,其中所有项目都组成,无论它们是否适合交叉轴最大值,请在初始化期间将overflow
设置为FlowRowOverflow.Visible
或FlowColumnOverflow.Visible
。探索ContextualFlowRowSample
和FlowRowSample
以了解这些新功能的实际示例。(Ib9135,b/293577082)
错误修复
版本 1.7.0-alpha02
2024 年 2 月 7 日
androidx.compose.foundation:foundation-*:1.7.0-alpha02
已发布。版本 1.7.0-alpha02 包含这些提交。
API 更改
HorizontalPager
、VerticalPager
和PagerState
已升级为稳定版。(I67660,b/316966909)- 添加了
LocalTextLinkStyle
合成局部变量,允许更改应用程序中 Text 的链接样式。如果您在应用程序中使用自己的主题,则应根据您的主题设置此合成局部变量。使用 Material 主题时,链接的默认颜色将设置为 Material 的主色。(I7eb10) - 引入了
receiveContent
修饰符,该修饰符为开发人员提供了一种在 Jetpack Compose 中 接收富文本内容 的方式。 receiveContent
与BasicTextField2
集成,以接受软件键盘或通过剪贴板粘贴操作提供的富文本内容。(I81b72)- 在此更改中,我们用
TargetedFlingBehavior
替换了SnapFlingBehavior
,以解锁其他用例并提供更大的灵活性。(I762ea) - 在此更改中,我们正在使捕捉 API 稳定。我们还清理了一些测试代码并为捕捉添加了更多示例。(Id8da9)
- 引入
TargetedFlingBehavior
,这是一个FlingBehavior
,它允许传播有关正在进行的动画状态及其目标滚动偏移的信息。(I6a207)
错误修复
BasicTextField2
现在在输入时将光标保留在视图中,即使它已滚动到视图外或由于输入而将滚动到视图外。(Ieb856,b/237190748)
外部贡献
- 添加了一个实验性 API,用于配置 LazyLists 的预取行为。(I022a4)
版本 1.7.0-alpha01
2024 年 1 月 24 日
androidx.compose.foundation:foundation-*:1.7.0-alpha01
已发布。版本 1.7.0-alpha01 包含这些提交。
新功能
- 添加了一个新的
Indication API
,IndicationNodeFactory
。与之前的(现已弃用)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
并移至同一包中。- 引入了
BasicTextField2
的OutputTransformation
API 的第一个草稿。此 API 替换了旧BasicTextField
中大多数VisualTransformation
的用例。但它尚未完成,有些东西无法正常工作,但我们希望您对 API 在您的用例中的可用性提供任何反馈。(aosp/2708848) - 引入了
LinkAnnotation
,它允许在文本中添加链接和可点击内容。链接功能尚未完成,更多 API 更改即将推出。 - 引入了
receiveContent
修饰符,它为开发人员提供了一种在 Jetpack Compose 中 接收富文本内容 的方法。 receiveContent
与BasicTextField2
集成,以接受软件键盘或通过剪贴板粘贴提供的富文本内容。KeyboardOptions.shouldShowKeyboardOnFocus
允许您禁用BasicTextField
在聚焦时请求软件键盘的默认行为。TextInputService
和LocalTextInputService
现已弃用。请改用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 包含 这些提交。
错误修复
- 修复了在某些情况下切换
TextField
的enabled
或readOnly
属性会导致崩溃的错误。(Iae17b)
版本 1.6.5
2024 年 4 月 3 日
androidx.compose.foundation:foundation-*:1.6.5
已发布。版本 1.6.5 包含 这些提交。
错误修复
- 向 Row/Column 中难以重现的错误添加调试日志:(b/300280216 和 b/297974033)
版本 1.6.4
2024 年 3 月 20 日
androidx.compose.foundation:foundation-*:1.6.4
已发布。版本 1.6.4 包含 这些提交。
错误修复
- 长按然后拖动选择手势,该手势在拖动过程的第一帧中移出文本的布局边界不再崩溃。(Icdf90,b/325307463)
版本 1.6.3
2024 年 3 月 6 日
androidx.compose.foundation:foundation-*:1.6.3
已发布。版本 1.6.3 包含 这些提交。
版本 1.6.2
2024 年 2 月 21 日
androidx.compose.foundation:foundation-*:1.6.2
已发布。 版本 1.6.2 包含这些提交。
错误修复
- 修复
AnimateContentSize
未正确重置的问题。(I07051) - 修复文本的
intrinsicHeight
在某些情况下被过度缓存的问题。(3cd398,b/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
迁移。 - 已添加应用程序和组件之间的拖放功能。请参考
DragAndDropTarget
、Modifier.dragAndDropSource
和其他 API 以开始使用。 Modifier.draggable2D
是新的修饰符,它允许轻松支持二维拖动。参见 示例。AndroidExternalSurface
和AndroidEmbeddedExternalSurface
已添加,以便更轻松地在 Compose 中添加基于表面的组件。Pager
和snapFlingBehaviour
中的各种 API 更改和改进。- 各种焦点、文本和内边距 API 已提升为稳定 API。
版本 1.6.0-rc01
2024 年 1 月 10 日
androidx.compose.foundation:foundation-*:1.6.0-rc01
已发布。 版本 1.6.0-rc01 包含这些提交。
API 更改
- 已删除
DragAndDropTarget()
扩展构造函数。请使用object: DragAndDropTarget {}
创建新实例。(I32318)
版本 1.6.0-beta03
2023 年 12 月 13 日
androidx.compose.foundation:foundation-*:1.6.0-beta03
已发布。 版本 1.6.0-beta03 包含这些提交。
错误修复
- 修复影响使用无限约束测量的超大文本的崩溃问题。(I1a7df,b/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
等布局)的子节点保留以便在将来重用,现在被视为处于非激活状态。引入了新的测试 APIassertIsDeactivated()
来测试这些节点。默认情况下,其他测试 API 将过滤掉非激活节点。(I2ef84, b/187188981)Modifier.magnifier
的clippingEnabled
参数已重命名为clip
。Modifier.magnifier
的magnifierCenter
参数现在可以为空,保留相同的默认行为。(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.dragAndDrawSource
的onDrawDragShadow
lambda 已重命名为drawDragDecoration
,DragAndDropInfo
的大小参数已重命名为dragDecorationSize
。(Id0e30, b/303904810)BasicTextField2
的decorationBox
参数已重命名为decorator
。它的类型也更改为等效的函数接口TextFieldDecorator
。(I23c1c)
错误修复
- 改进了关于
BasicTextField
中onValueChange
要求的文档。(I90fc9, b/160257648)
版本 1.6.0-alpha07
2023 年 10 月 4 日
androidx.compose.foundation:foundation-*:1.6.0-alpha07
已发布。 版本 1.6.0-alpha07 包含这些提交。
API 更改
- 引入了
PlatformTextInputMethodTestOverride
用于编写自定义文本编辑器的测试。(Id159b) - 将
GraphicsSurface
重命名为AndroidExternalSurface
。(I11680) - 添加了
DisableNonLinearFontScalingInCompose
临时标志来禁用非线性字体缩放。如果您需要时间清理测试,请在测试中将DisableNonLinearFontScalingInCompose = true
设置为 true。此标志将在 Compose 1.6.0-beta01 中移除。(Ic9486) - 添加了
ColorList
和ColorSet
集合,这些集合避免了分配。(I744bd) - 此更改移除了
shortSnapVelocityThreshold
,它已成为SnapLayoutInfoProvider
实现的实现细节。(I65f6d) - 添加了用于启动拖放会话的
dragAndDropSource
修饰符,以及用于接收拖放会话的dragAndDropTarget
修饰符。(Ib7828, b/286038936) - 更新了
SnapPositionInLayout
文档和位置方法。在SnapPositionInLayout
的位置方法中引入了内容填充。(Id7938, b/300116110) - 在
TextFieldState
中添加了UndoState
,它提供撤消/重做用户所做的更改的功能。(Icc024)
错误修复
- 修复了
basicMarquee
在速度变化后无法动画的问题。(Id2e77, b/297974036)
版本 1.6.0-alpha06
2023 年 9 月 20 日
androidx.compose.foundation:foundation-*:1.6.0-alpha06
已发布。 版本 1.6.0-alpha06 包含这些提交。
新功能
- 为
SurfaceView
和TextureView
添加了新的 Composable 包装器:GraphicsSurface()
和EmbeddedGraphicsSurface()
。它是一个实验性 API,可能会发生更改和修改。(I9ddb2) Modifier.magnifier()
现在是一个稳定 API。这包括删除MagnifierStyle
,改为在修饰符本身中使用内联参数。(I83bec, b/298381260, b/262367109, b/261438887)
API 更改
- 在
ScrollScope
中引入了updateCurrentPage
和updateTargetPage
,这些是允许通过PagerState.scroll
自定义动画滚动所需的最后部分。(I9cad5, b/267744105, b/243786897) - 从
SnapFlingBehavior
中移除了密度。所有SnapLayoutInfoProvider
的实现都有一种访问密度的办法,接收器作用域可以移除,这将导致SnapFlingBehavior
和SnapLayoutInfoProviders
的实现更简单。(I153c3) - 更多修饰符被标记为稳定。(I56af1, b/298046462)
- 从
SnapLayoutInfoProvider
中移除了SnapStepSize
。应使用布局信息进行计算,并通过方法或捕捉偏移量提供结果。(If320c)
行为变更
- Compose 现在使用非线性字体缩放,以提高可读性和可访问性。当系统设置中字体比例 > 100% 时,小文本将正常增大,但已经很大的文本只会增大一点点。此外,以 SP 定义的行高会自动调整,以保持与 100% 比例的预期高度。更多信息,请参阅 字体缩放最佳实践。(I11518)
错误修复
- 移除了对工具提示使用
rememberSaveable
的情况。(Icc131, b/299500338)
版本 1.6.0-alpha05
2023 年 9 月 6 日
androidx.compose.foundation:foundation-*:1.6.0-alpha05
已发布。 版本 1.6.0-alpha05 包含这些提交。
API 更改
- 为
BasicSecureTextField
添加了接受不可变值和用于更改该值的回调的重载,与当前的BasicTextField
API 相同。(Ia4882) - 添加了
Modifier.preferKeepClear()
以将可组合项标记为在 API 33 及更高版本上优先保持远离浮动窗口。(Ib51d5, b/297260115) - View 组件(如
ScrollView
和RecyclerView
)中的弹性速度上限为ViewConfiguration.ScaledMaximumFlingVelocity
。Compose 现在包含了自己的maximumFlingVelocity
版本,现在它也适用于Draggable
。(Ibf974) - 移除了已弃用的
Pager
和PagerState
重载。(Iea07e) - 在
compose.foundation
中添加了BasicTooltipBox
,并更新了PlainTooltipBox
和RichTooltipBox
,以使用新的PlainTooltip
和RichTooltip
可组合项,通过TooltipBox
实现。(I79e1d)
版本 1.6.0-alpha04
2023 年 8 月 23 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha04
。版本 1.6.0-alpha04 包含以下提交。
API 更改
- 添加了
ReusableComposition
接口,用于管理子组合的生命周期和重用。(I812d1, b/252846775) Modifier.focusGroup
已提升至稳定 API。(I7ffa3)- 为
BasicTextField2
添加了重载,它接受一个不可变的值和一个用于更改该值的回调,就像当前的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) SoftwareKeyboardController
和LocalSoftwareKeyboardController
不再是实验性的。LocalSoftwareKeyboardController
现在也是一个真正的CompositionLocal
。(I4c364)Modifier.transformable
现在在canPan
参数中提供平移增量,以帮助确定平移的方向,从而允许或禁止平移。(I692aa, b/266829800)- 更新了修饰符
consumeWindowInsets
,以扩展超类AbstractComposeView
。(Iacd74, b/269479941)
版本 1.6.0-alpha01
2023 年 6 月 21 日
发布了 androidx.compose.foundation:foundation-*:1.6.0-alpha01
。版本 1.6.0-alpha01 包含以下提交。
新功能
- 在 Foundation 中引入了新的
AnchoredDraggable
API。它可用于构建可在离散状态之间拖动的组件,如模态底部工作表。此 API 替换了 Material 的Swipeable
API。(I4a2ed)
API 更改
- 支持
InputConnection#requestCursorUpdates
。(I0c69b) - 引入了
scrollAnimationSpec
,以允许使用自定义动画规范。更新了BringIntoViewCalculator
为BringIntoViewScroller
。(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.clickable
、Modifier.draggable
、Modifier.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.gradle
或build.gradle.kts
配置中声明warning "AutoboxingStateCreation"
,如以下所示 (I34f7e)android { lint { warning "AutoboxingStateCreation" } ... }
版本 1.5.0-beta03
2023 年 6 月 28 日
发布了 androidx.compose.foundation:foundation-*:1.5.0-beta03
。版本 1.5.0-beta03 包含以下提交。
版本 1.5.0-beta02
2023 年 6 月 7 日
发布了 androidx.compose.foundation:foundation-*:1.5.0-beta02
。版本 1.5.0-beta02 包含以下提交。
版本 1.5.0-beta01
2023 年 5 月 24 日
发布了 androidx.compose.foundation:foundation-*:1.5.0-beta01
。版本 1.5.0-beta01 包含以下提交。
API 更改
- 实现
PlatformDataProvider
以提供心率和每日步数。SensorGateway
接口已从公共 API 中移除。(I55b84)
错误修复
- 减少延迟列表/网格/等的测量期间的分配(Iaf9e2)
- 应用快照时减少分配(I65c09)
- 从弹簧动画中删除分配(Ie9431)
- 从
TextLayout
中删除分配(I0fd11) - 删除指针速度跟踪中的多个分配(I26bae)
版本 1.5.0-alpha04
2023 年 5 月 10 日
androidx.compose.foundation:foundation:1.5.0-alpha04
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha04
已发布。 版本 1.5.0-alpha04 包含这些提交。
API 更改
- 添加了使用完整参数列表优化的
TextStyle.merge(...)
。(Iad234,b/246961787) - 引入了一个可以与
LazyGridState
一起使用的SnapLayoutInfoProvider
。 (I92134,b/269237141,b/260914964) - 为延迟交错网格项目范围添加了实验性的
Modifier.animateItemPlacement()
。您可以将其应用于项目以实现自动位置更改/重新排序动画。(I4b62d,b/257034719) - 将
GridCells.FixedSize
提升为稳定版本。FixedSize
定义了一个LazyGrid
,其中每个单元格在交叉轴上占用确切的大小,剩余空间由交叉轴排列分配。(I8542f) - 为 Pager 引入了接收器范围
PagerScope
,以及用于计算给定页面偏移量的实用程序函数。 (If2577) - 在创建快照弹跳行为时引入
snapPositionalThreshold
。使用此参数指定一个位置阈值,以缩短 Pager 中的快照。(If8f7f) - 用
calculateSnappingOffset
替换SnapLayoutInfoProvider.calculateSnappingOffsetBounds
。在此新方法中,我们只请求要快照到的下一个偏移量。边界的计算应在实现级别执行,因为这可能因快照方式而异。(I923a4) LazyStaggeredGrid
API 已提升为稳定版本。 (I633a5)- 从
Horizontal/VerticalPager
中删除pageCount
。这应该在状态创建时提供。更新了PagerState
和rememberPagerState
以接受pageCount
。 (Ieb52d,b/266965072) - 从
Horizontal/VerticalPager
中删除pageCount
。这应该在状态创建时提供。更新了PagerState
和rememberPagerState
以接受pageCount
。 (Ifa3cb,b/266965072) - 在 Pager 的
SnapFlingBehavior
中引入shortSnapVelocityThreshold
。 (I7379e,b/275579012) - 添加了
FlowRowScope
和FlowColumnScope
。 (I54fe2)
错误修复
- 当约束具有
minWidth
和minHeight
时,对 Text 获取语义的调用不再崩溃。(Ibd072) - 修复了键盘未显示在非
Dialog
可组合对象创建的对话框内的文本字段中的回归。(I82551,b/262140644)
版本 1.5.0-alpha03
2023 年 4 月 19 日
androidx.compose.foundation:foundation:1.5.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha03
已发布。 版本 1.5.0-alpha03 包含这些提交。
此版本为 Compose 启用了新的文本渲染堆栈。新堆栈经过性能优化,您应该不会看到任何可见的变化。
如果您确实在渲染的文本中看到变化,您可以通过设置 NewTextRendering1_5 = false
来调试以确认行为差异。设置此选项将强制重新组合。请将任何行为差异作为错误报告。
调试标志将在 1.5 beta01 版本之前删除。(Iada23,b/246960758)
API 更改
- 使
FlowColumn/FlowRow
内联。 (Idab37)
版本 1.5.0-alpha02
2023 年 4 月 5 日
androidx.compose.foundation:foundation:1.5.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha02
已发布。 版本 1.5.0-alpha02 包含这些提交。
API 更改
- 在
LazyGrid
中添加了对固定大小单元格的支持,并使用交叉轴排列对其进行排列。(I83ed9,b/235121277,b/267942510) - 添加了对
LazyStaggeredGrid
中固定大小车道的支持,并使用交叉轴排列对其进行排列。(I7d519) AnnotatedString
中的UrlAnnotation
现在可以通过辅助功能服务(如TalkBack
)打开。(If4d82,b/253292081)- 为文本字段添加了
InsertTextAtCursor
语义操作。 (I11ed5) - 与文本相关的测试操作(例如
performTextInput
)现在将直接使用语义操作请求焦点,而不是单击字段。(I6ed05) - 添加了使用
FlowRow
中的verticalArrangement
和FlowColumn
中的horizontalArrangement
进行交叉轴间距/排列的支持。我们还删除了FlowRow/FlowColumn
中的顶级verticalAlignment
和horizontalAlignment
。开发人员可以使用Modifier.align
作为替代。这减少了verticalAlignment
和verticalArrangement
的命名约定之间的混淆。 (I87b60,b/268365538)
版本 1.5.0-alpha01
2023 年 3 月 22 日
androidx.compose.foundation:foundation:1.5.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha01
已发布。 版本 1.5.0-alpha01 包含这些提交。
API 更改
- Text 和
BasicText
已重构为使用新的修饰符系统。这在许多情况下会导致性能大幅提高。不应该有任何可见的变化。(If1d17,b/246961435) - 添加了
PerformImeAction
语义操作以在文本编辑器节点上调用 IME 操作。(Ic606f,b/269633506)
错误修复
- 更新了
Modifier.hoverable
的内部结构。只有在启用时,hoverable
修饰符才会显示在检查器中。(I82103)
版本 1.4
版本 1.4.3
2023 年 5 月 3 日
androidx.compose.foundation:foundation:1.4.3
和 androidx.compose.foundation:foundation-layout:1.4.3
已发布,没有变化(只有版本号更改)。
版本 1.4.2
2023 年 4 月 19 日
androidx.compose.foundation:foundation:1.4.2
和 androidx.compose.foundation:foundation-layout:1.4.2
已发布。 版本 1.4.2 包含这些提交。
版本 1.4.1
2023 年 4 月 5 日
androidx.compose.foundation:foundation:1.4.1
和 androidx.compose.foundation:foundation-layout:1.4.1
已发布。 版本 1.4.1 包含这些提交。
版本 1.4.0
2023 年 3 月 22 日
androidx.compose.foundation:foundation:1.4.0
和 androidx.compose.foundation:foundation-layout:1.4.0
已发布。 版本 1.4.0 包含这些提交。
自 1.3.0 以来重要的更改
- 将 Emoji 兼容集成到
Text
和TextField
以及较低级别的 Paragraph 中。当配置了 emojicompat 时,它默认启用。 - 可以使用
PlatformParagraphStyle
在特定 Text 上配置EmojiCompat
。 - 将全行跨度支持添加到
LazyStaggeredGrid
(I28252) - 将实验性的
onHover
添加到ClickableText
(I6938f) - 为
runComposeUiTest
函数和create*ComposeRule
函数引入了新的实验性重载,这些函数接受CoroutineContext
参数。该上下文将用于测试组合以及组合中的任何LaunchedEffect
和rememberCoroutineScope()
调用。(I10614,b/265177763) FlowRow
和FlowColumn
现在作为@ExperimentalFoundationApi
提供,允许更灵活地基于行和列的组件布局,如果主轴上没有足够的空间,这些组件将换行。(I3a7b2)Modifier.basicMarquee()
作为实验性的提供,用于显示具有滚动字幕效果的内容。(I2df44,b/139321650)
版本 1.4.0-rc01
2023 年 3 月 8 日
androidx.compose.foundation:foundation:1.4.0-rc01
和 androidx.compose.foundation:foundation-layout:1.4.0-rc01
已发布。 版本 1.4.0-rc01 包含这些提交。
API 更改
- 引入了新的低级
PlatformTextInputAdapter
API,用于构建与平台 API 直接对话的自定义文本输入实现。 (I58df4) - 为
LazyStaggeredGrid
添加反向布局支持。 (I3ef4a)
错误修复
BasicTextField
的SetText
语义操作现在将使用与 IME 更新和测试函数(例如performTextReplacement
)相同的代码路径更新文本缓冲区。- 文本测试函数
performTextClearance
、performTextReplacement
和performTextSelection
现在使用SemanticsActions
。 (I0807d、b/269633168、b/269624358)
版本 1.4.0-beta02
2023 年 2 月 22 日
androidx.compose.foundation:foundation:1.4.0-beta02
和 androidx.compose.foundation:foundation-layout:1.4.0-beta02
已发布。 版本 1.4.0-beta02 包含这些提交。
API 更改
- 添加了一个新的
Modifier.Node.onReset()
回调,允许您将某些本地状态重置为正确处理Layout
将被重用的情况(例如作为LazyColumn
的一项)。修复了FocusTargetModifierNode
以正确重置聚焦状态。 (I65495、b/265201972) - 在
DrawScope.drawText
、Paragraph.paint
和MultiParagraph.paint
方法中添加了BlendMode
参数,以支持在 Canvas 上绘制文本时使用不同的混合算法。 (I57508) - 已移除
modifierElementOf()
API。请直接从ModifierNodeElement
扩展。 (Ie6d21)
错误修复
- 调整选择句柄不再可以选择部分字符。 (Idedd1)
- 修复了在空
TextField
上按 Ctrl+Backspace 时的崩溃问题。 (I0427f、b/244185537)
版本 1.4.0-beta01
2023 年 2 月 8 日
androidx.compose.foundation:foundation:1.4.0-beta01
和 androidx.compose.foundation:foundation-layout:1.4.0-beta01
已发布。 版本 1.4.0-beta01 包含这些提交。
新功能
- 从 1.3 开始,为
Text
和TextField
以及更底层的 Paragraph 添加了 Emoji 兼容性集成。当配置了 emojicompat 时,它默认启用。 - 可以使用
PlatformParagraphStyle
在特定 Text 上配置EmojiCompat
。
API 更改
- 添加了
PinnableContainer
API 的通用实现,该 API 用于所有LazyLayouts
中,以保留退出组合但仍需要处于活动状态的项。 (If45a4) PinnableContainer.PinnedHandle.unpin()
已重命名为release()
(I4667a)
外部贡献
- 为
LazyListLayoutInfo
、LazyGridLayoutInfo
和LazyStaggeredGridItemInfo
添加了mainAxisItemSpacing
属性。 (I52fad)
版本 1.4.0-alpha05
2023 年 1 月 25 日
androidx.compose.foundation:foundation:1.4.0-alpha05
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha05
已发布。 版本 1.4.0-alpha05 包含这些提交。
新功能
- 为
LazyStaggeredGrid
添加了完整的行跨度支持。 (I28252) - 将实验性的
onHover
添加到ClickableText
。 (I6938f) - 为
runComposeUiTest
函数和create*ComposeRule
函数引入了新的实验性重载,这些函数接受CoroutineContext
参数。该上下文将用于测试组合以及组合中的任何LaunchedEffect
和rememberCoroutineScope()
调用。(I10614,b/265177763)
API 更改
- 将
OverscrollEffect
的预/后 API 合并到组合的“装饰器”applyToScroll
和applyToFling
函数中。请参阅文档中更新的示例,了解如何使用新的 API 形状实现过度滚动效果。 (I8a9c4、b/255554340) - 更多内联/弃用隐藏函数的类型/可空性。 (I24f91)
TextStyle
中的LineBreak
和Hyphens
API 已升级到稳定版本。 (Ic1e1d)
错误修复
- 文本字段中的光标现在即使在动画被禁用时也会继续闪烁。 (I95e70、b/265177763)
Modifier.basicMarquee
现在即使在系统设置中禁用动画时也会进行动画处理。 (I23389、b/262298306、b/265177763)
外部贡献
TextInputSession
和TextInputService
中的notifyFocusedRect
方法不再被弃用。 (I23a04、b/262648050)
版本 1.4.0-alpha04
2023 年 1 月 11 日
androidx.compose.foundation:foundation:1.4.0-alpha04
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha04
已发布。 版本 1.4.0-alpha04 包含这些提交。
新功能
FlowRow
和FlowColumn
现在作为@ExperimentalFoundationApi
提供,允许更灵活地基于行和列的组件布局,如果主轴上没有足够的空间,这些组件将换行。(I3a7b2)Modifier.basicMarquee()
可用作实验,用于显示具有滚动字幕效果的内容。 (I2df44、b/139321650)
API 更改
FocusRequesterModifier
已被弃用,取而代之的是FocusRequesterNode
。 (I7f4d7、b/247708726、b/255352203、b/253043481、b/247716483、b/254529934、b/251840112、b/251859987、b/257141589)- 使用
variationSettings
的AndroidFont
构造函数现在是一个稳定 API,可用于创建新类型的字体描述符。 (I5adcc、b/261565807) - 引入了
PinnableContainer
API,该 API 由懒惰列表通过一个组合本地传播,该本地允许您固定当前项。这意味着当该项从视图中滚动出去时,它不会被处置。例如,Modifier.focusable()
将通过这种机制固定当前聚焦的项。 (Ib8881、b/259274257、b/195049010) - 重写了可滚动对象对
bringIntoViewRequesters
和可聚焦对象响应的方式,以更好地模拟这些操作的复杂性并处理更多边缘情况。 (I2e5fe、b/241591211、b/192043120、b/237190748、b/230756508、b/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.material
和androidx.compose.material3
库更新到最新版本(1.1.0-alpha04)或将您的androidx.compose.foundation
降级到 1.4.0-alpha03。
版本 1.4.0-alpha03
2022 年 12 月 7 日
androidx.compose.foundation:foundation:1.4.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha03
已发布。 版本 1.4.0-alpha03 包含这些提交。
API 更改
- 在使用 Compose 规则的 UI 测试中,在
withFrameNanos
回调期间恢复的延续将不会在所有帧回调完成运行之前调度。这与 Compose 在正常运行时的行为一致。但是,依赖于旧行为的测试可能会失败。这只会影响直接调用withFrameNanos
或withFrameMillis
的代码,并且这些函数传递的回调之外的逻辑可能需要移到回调内部。请参阅 此 CL 中的动画测试更改 以获取示例。 - 为
TestMonotonicFrameClock
构造函数和工厂函数添加了可选的onPerformTraversals: (Long) -> Unit
参数,以便在withFrameNanos
回调之后但在恢复调用者的协程之前运行代码。 (Idb413、b/254115946、b/222093277、b/255802670) - 引入页面辅助功能操作:
PageUp
、PageDown
、PageLeft
、PageRight
。请注意,这些操作仅在 API 29 及更高版本中可用。 (Ida4ab) - 引入
HorizontalPager
和VerticalPager
,这是一种以分页方式显示可组合对象的方式。引入了PagerState
来控制分页器以及查询有关分页器当前状态的信息。引入了PageSize
,这是一种控制分页器页面大小的方式,可用于创建类似轮播的分页器。引入了PagerSnapDistance
,这是一种控制分页器弹动行为中的卡扣方式。 (I01120) - 在
SnapFlingBehavior.performFling
中引入了重载,以帮助了解弹动将停留在哪里。(I569f6) - 删除了
OverscrollEffect#isEnabled
。不再需要记住和设置此标志,只需在不希望显示过度滚动的情况下(例如,如果ScrollableState#canScrollForward/backward
都返回 false)不要将事件分派到过度滚动效果。(I1a4b0, b/255554340, b/255557085) - 添加了
ScrollableState#canScrollForward
和ScrollableState#canScrollBackward
用于查询ScrollableState
是否有空间在任一方向滚动(无论它是否处于其范围的最小值/最大值)。这默认情况下对ScrollableState
的现有实现为 true,以实现向后兼容。消费者可以使用它向用户显示仍有滚动空间的指示,这也可用于避免将增量分派到在给定方向上没有滚动空间的ScrollableStates
,以减少不必要的操作。(Idf1a0, b/255557085) - 添加了一个修饰符 API 用于查询祖先滚动信息。(I2ba9d, b/203141462)
- 用于在
Clickable
中正确延迟按下交互,当手势可能变为滚动事件时。 - 修复了
Clickables
在Scrollable 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-alpha02
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha02
已发布。 版本 1.4.0-alpha02 包含这些提交。
API 更改
awaitFirstDown
和waitForUpOrCancellation
现在接受PointerEventPass
以获得更大的灵活性。(I7579a, b/212091796)- 恢复 Lazy* API 中的
beyondBoundCount
API (I12197) - 在 Lazy API 中引入了参数,用于组合和放置视窗外的项目(I69e89, b/172029355)
- 将
minLines
参数添加到BasicText
和BasicTextField
中。它允许以行数的形式设置这些可组合项的最小高度(I24294, b/122476634)
版本 1.4.0-alpha01
2022 年 10 月 24 日
androidx.compose.foundation:foundation:1.4.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.4.0-alpha01
已发布。 版本 1.4.0-alpha01 包含这些提交。
API 更改
- 添加了一个新方法
awaitEachGesture()
用于手势检测器。它的操作类似于forEachGesture()
,但对手势的循环完全在AwaitPointerEventScope
内进行,因此事件不会在迭代之间丢失。 forEachGesture()
已被弃用,取而代之的是awaitEachGesture()
,因为它允许事件在手势之间丢失。(Iffc3f, b/251260206)- 添加了
WindowInsets.imeAnimationSourc
e 和WindowInsets.imeAnimationTarget
用于确定动画进度,并了解 IME 在动画完成后将位于何处。(I356f1, b/217770337)
版本 1.3
版本 1.3.1
2022 年 11 月 9 日
androidx.compose.foundation:foundation:1.3.1
和 androidx.compose.foundation:foundation-layout:1.3.1
已发布。 版本 1.3.1 包含这些提交。
错误修复
- 修复了
BeyondBoundsLayout
中的性能问题(aosp/2255266) ContentInViewModifier
除非附加,否则不会读取布局坐标(aosp/2241316)
版本 1.3.0
2022 年 10 月 24 日
androidx.compose.foundation:foundation:1.3.0
和 androidx.compose.foundation:foundation-layout:1.3.0
已发布。 版本 1.3.0 包含这些提交。
自 1.2.0 以来的重要更改
- 引入了
LazyVerticalStaggeredGrid
和LazyHorizontalStaggeredGrid
的实验版本。 SnapFlingBehavior
、rememberSnapFlingBehavior
和其他相应的 API 作为实验性添加。Modifier.clickable
、Modifier.toggleable
和Modifier.selectable
现在如果使用键盘或遥控器上的 D-Pad 点击,则会显示波纹。
版本 1.3.0-rc01
2022 年 10 月 5 日
androidx.compose.foundation:foundation:1.3.0-rc01
和 androidx.compose.foundation:foundation-layout:1.3.0-rc01
已发布。 版本 1.3.0-rc01 包含这些提交。
API 更改
版本 1.3.0-beta03
2022 年 9 月 21 日
androidx.compose.foundation:foundation:1.3.0-beta03
和 androidx.compose.foundation:foundation-layout:1.3.0-beta03
已发布。 版本 1.3.0-beta03 包含这些提交。
API 更改
- 添加了选项以自定义文本中的断行。(I86907)
BringIntoViewResponder
现在能够在处理请求时获取请求的最新边界。(If86a5, b/241591211)- 在实验性
Staggered Grid
中引入了对项目间间距的支持(I10b82) - 在实验性
Staggered Grid
中引入了内容填充(I342ea) - 在
TextMeasurer.measure
方法中使用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-beta02
和 androidx.compose.foundation:foundation-layout:1.3.0-beta02
已发布。 版本 1.3.0-beta02 包含这些提交。
API 更改
- 实验性
StaggeredGrid
的初始版本(Ia48be) - 将
FocusDirection.In
和FocusDirection.Out
重命名为FocusDirection.Enter
和FocusDirection.Exit
(Ia4262, b/183746982) - 引入了
rememberSnapFlingBehavior
重载,它提供了一种在LazyLists
中快速启用捕捉的方法。(Ifb48a) - 用具体的
SnapFlingBehavior
类替换了snapFlingBehavior
工厂。将SnapLayoutInfoProvider
方法限制为 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-beta01
和 androidx.compose.foundation:foundation-layout:1.3.0-beta01
已发布。 版本 1.3.0-beta01 包含这些提交。
API 更改
- 从
OverscrollEffect
中删除了pointerPosition
- 需要指针位置的效果可以使用Modifier.pointerInput { }
在effectModifier
中获取当前指针位置。(I9f606, b/241239306) - 将
AwaitPointerEventScope#awaitLongPressOrCancellation
暴露为更复杂手势检测的额外构建块(I04374,b/181577176)。 - 引入了
lazyListSnapLayoutInfoProvider
以在 Lazy Lists 中启用吸附。(I3ecdf)。 - 引入了
SnapFlingBehavior
,一种启用列表吸附的弹性行为。提供SnapLayoutInfoProvider
的实例,其中包含有关吸附布局的信息。(Ie754c)。
版本 1.3.0-alpha03
2022 年 8 月 10 日
androidx.compose.foundation:foundation:1.3.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha03
已发布。 版本 1.3.0-alpha03 包含这些提交。
API 更改
- 资源字体现在支持设置字体变体设置(API 26+)。(I900dd,b/143703328)。
DeviceFontFamilyNameFont
中的变量字体支持(Ic1279,b/143703328)。- 从
PlatformTextStyle
和LineHeightStyle
中删除了实验性注释。(I64bef)。 - 当
VisualTransformation
提供的OffsetMapping
返回无效索引时,文本字段现在将抛出更详细的异常。(Ie73f9,b/229378536)。 - 引入实验性 API 以在 Lazy 布局之间共享项目提供者逻辑。(Ic891c)。
ScrollableDefaults.reverseDirection()
不再是实验性的。(Iba646)。- 弃用
SemanticsModifier.id
并将语义 ID 移至LayoutInfo.semanticsId
。(Iac808,b/203559524)。 checkScrollableContainerConstraints()
不再是实验性的。(I2c290)。Modifier.clipScrollableContainer()
不再是实验性的。(Ia2b44)。- 弃用
TextInputService.show|hideSoftwareKeyboard
。请在应用程序代码中使用SoftwareKeyboardController
,在 IME 管理代码中使用TextInputSession
。(I14e4c,b/183448615)。
版本 1.3.0-alpha02
2022 年 7 月 27 日
androidx.compose.foundation:foundation:1.3.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha02
已发布。 版本 1.3.0-alpha02 包含这些提交。
API 更改
- 在
DrawScope
上添加了drawText
扩展函数,以提供一种在可组合项和对DrawScope
进行操作的修饰符上绘制多风格文本的方式,例如Canvas
和drawBehind
。(I16a62,b/190787898)。
错误修复
- 当文本字段处于禁用状态但处于焦点状态时,软键盘现在将隐藏。(I6e3e4,b/237308379)。
- 将
InputEventChange
事件添加到速度跟踪器时,我们现在将考虑增量而不是位置,这将确保即使目标元素移动,速度也会在所有情况下都得到正确计算(Icea9d,b/216582726,b/223440806,b/227709803)。 - 当可滚动元素具有一个处于焦点的子元素时,它现在将正确滚动以将处于焦点的子元素保持在视图中,即使子元素的大小在动画中减小。(I80867,b/230756508,b/220119990)。
- 修复了
TextField
在选择处于活动状态时被清除并重新填充导致的崩溃。(I1235b,b/208655565,b/214253689)。
版本 1.3.0-alpha01
2022 年 6 月 29 日
androidx.compose.foundation:foundation:1.3.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha01
已发布。 版本 1.3.0-alpha01 包含这些提交。
API 更改
- 引入了
UrlAnnotation
注释类型以及相关方法以支持AnnotatedString
中的TalkBack
链接支持。(I1c754,b/231495122)。
错误修复
BasicTextField
cursorBrush
现在可以在不重新启动光标计时器的情况下进行动画处理。(I812e6,b/236383522)。
版本 1.2
版本 1.2.1
2022 年 8 月 10 日
androidx.compose.foundation:foundation:1.2.1
和 androidx.compose.foundation:foundation-layout:1.2.1
已发布。 版本 1.2.1 包含这些提交。
版本 1.2.0
2022 年 7 月 27 日
androidx.compose.foundation:foundation:1.2.0
和 androidx.compose.foundation:foundation-layout:1.2.0
已发布。 版本 1.2.0 包含这些提交。
自 1.1.0 以来的重要更改
LazyVerticalGrid
和LazyHorizontalGrid
现在是稳定的。- 您现在可以为 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-rc03
和 androidx.compose.foundation:foundation-layout:1.2.0-rc03
已发布。 版本 1.2.0-rc03 包含这些提交。
- 自 1.2.0-rc02 以来没有变化。
版本 1.2.0-rc02
2022 年 6 月 22 日
androidx.compose.foundation:foundation:1.2.0-rc02
和 androidx.compose.foundation:foundation-layout:1.2.0-rc02
已发布。 版本 1.2.0-rc02 包含这些提交。
版本 1.2.0-rc01
2022 年 6 月 15 日
androidx.compose.foundation:foundation:1.2.0-rc01
和 androidx.compose.foundation:foundation-layout:1.2.0-rc01
已发布。 版本 1.2.0-rc01 包含这些提交。
API 更改
- 已引入实验性的
OverscrollEffect
,以允许自定义过度滚动效果,以及接受它的Modifier.scrollable
重载。 - 实验性的
LocalOverScrollConfiguration
已从foundation.gesture
移至 foundation 包并重命名为LocalOverscrollConfiguration
(If19fb,b/204650733)。 - 合成库中的接口现在使用 jdk8 默认接口方法构建(I5bcf1)。
- 引入了一个实验性 API
checkScrollableContainerConstraints()
,它允许检查我们是否嵌套了可滚动容器。在通过LazyLayout
创建您自己的可滚动 Lazy 布局时,可以使用它。(Id6fab,b/233352497)。 - 从
androidx.compose.foundation.lazy
包中删除了已弃用的LazyVerticalGrid
。新的稳定 API 位于androidx.compose.foundation.lazy.grid
中(I73c76,b/225192009)。
版本 1.2.0-beta03
2022 年 6 月 1 日
androidx.compose.foundation:foundation:1.2.0-beta03
和 androidx.compose.foundation:foundation-layout:1.2.0-beta03
已发布。 版本 1.2.0-beta03 包含这些提交。
API 更改
- 添加了新的实验性
IntervalList
和MutableIntervalList
。它允许通过多个区间来表示一些值的列表。当您想定义您自己的 DSL(类似于LazyColumn
使用的 DSL)时,这将非常有用,其中列表项可以通过多个 item/items 调用来定义。(I2d05e,b/228580728)。
错误修复
- 澄清了
WindowInsets.ime
的文档,说明ime
内边距从 API 23 开始就被报告,但在 30+ 上才被动画化。(Ia7fc0,b/230756508)。 - 当光标位于文本字段的末尾时,按下向前删除键将不再崩溃。
DeleteSurroundingTextCommand
和DeleteSurroundingTextInCodePointsCommand
现在要求其构造函数参数为非负数。(Ica8e6,b/199919707)。
版本 1.2.0-beta02
2022 年 5 月 18 日
androidx.compose.foundation:foundation:1.2.0-beta02
和 androidx.compose.foundation:foundation-layout:1.2.0-beta02
已发布。 版本 1.2.0-beta02 包含这些提交。
- 以前不会更改 Text 或
TextField
布局大小的可下载字体解析不会重绘,导致字体显示过时。此错误修复确保文本布局始终触发重绘(b/229727404)。(I1d49e,b/229727404)。
版本 1.2.0-beta01
2022 年 5 月 11 日
androidx.compose.foundation:foundation:1.2.0-beta01
和 androidx.compose.foundation:foundation-layout:1.2.0-beta01
已发布。 版本 1.2.0-beta01 包含以下提交。
新功能
- 这是 1.2 的第一个 Beta 版本!
API 更改
- 添加了实验性的
BeyondBoundsInterval
,当自定义LazyList
实现布局超出可见边界范围的项目时,可以使用它。(Ifabfb, b/184670295) LineHeightBehavior
已重命名为LineHeightStyle
LineVerticalAlignment
已重命名为LineHeightStyle.Alignment
- 将
LineHeightTrim
重命名为LineHeightStyle.Trim
- 从
LineHeightStyle
中删除了默认构造函数值。(I582bf, b/181155707) - 为
LazyLayoutItemProvider
接口的可选成员添加了默认值。(Iba8a0) - 在
LazyLayoutItemProvider
api 中,我们现在有一个更简单的可组合函数 Item,它接受索引,而不是工厂按索引返回可组合的 lambda。(Id2196) - LazyLayoutItemsProvider 已重命名为 LazyLayoutItemProvider (I0638c)
LazyLayoutItemsProvider.itemsCount
已重命名为itemCount
(Id409c)- 将 Brush 添加到
TextStyle
和SpanStyle
中,以提供使用渐变颜色绘制文本的方式。(I53869, b/187839528) trimFirstLineTop
、trimLastLineBottom
的LineHeightBehavior
属性已更改为单个枚举:LineHeightTrim
。LineHeightTrim
有 4 个由两个布尔值定义的状态值:FirstLineTop
、LastLineBottom
、Both 和 None。(Ifc6a5, b/181155707)将
LineHeightBehavior
添加到TextStyle
和ParagraphStyle
。LineHeightBehavior
控制行高是否应用于第一行的顶部和最后一行底部。它还定义了行在由TextStyle
(lineHeight
) 提供的空间中的对齐方式。例如,可以使用类似于 CSS 通过
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
定义的行为。trimFirstLineTop
、trimLastLineBottom
配置仅在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-alpha08
和 androidx.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。这使您能够构建自己的组件,例如LazyColumn
或LazyVerticalGrid
。请注意,此 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-alpha07
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha07
已发布。 版本 1.2.0-alpha07 包含以下提交。
API 更改
- 添加了一个
PinnableParent
API,它允许延迟布局的子级阻止当前合成项目被处置。(Ibbdd0, b/184670295) LazyListLayoutInfo
和LazyGridLayoutInfo
现在具有beforeContentPadding
和afterContentPadding
字段。(I3b628, b/200920410)- 添加了
KeyboardType.Decimal
作为Keyboard.Number
的替代方案,专门用于在 IME 中包含小数点分隔符。(Iec4c8, b/209835363) - 添加新的字体描述符 Font(DeviceFontFamilyName) 以在字体回退链期间选择性地查找系统安装的字体。(I30468, b/219754572)
PointerEventType.Scroll
和PointerEvent.scrollDelta
现在是稳定的 API。(I574c5, b/225669674)- 添加了
includeFontPadding
在TextStyle/ParagraphStyle
中的临时兼容性配置。可以使用TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))
更改includeFontPadding
。这是一个用于启用迁移的临时配置选项,将被移除。(If47be, b/171394808) - 更新了
FontFamily.Resolver
以集成系统范围的粗体文本辅助功能设置。(I6c1e7) ComposeView
的consumeWindowInsets
扩展属性允许开发者禁用 Android WindowInsets 的消耗。这允许层次结构中独立的ComposeViews
每个都应用WindowInsets
,而不会相互干扰。(I0ef08, b/220943142)
版本 1.2.0-alpha06
2022 年 3 月 23 日
androidx.compose.foundation:foundation:1.2.0-alpha06
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha06
已发布。 版本 1.2.0-alpha06 包含以下提交。
API 更改
- 添加了
RequestFocus
语义操作,以请求可聚焦目标的焦点。(I17b71) FocusOrder
现已合并到FocusProperties
中,focusProperties()
现在拥有focusOrder()
的所有功能。FocusOrder
和focusOrder()
已被弃用。 接受focusRequester
的focusOrder()
应替换为与focusProperties()
结合使用的focusRequester()
修饰符。 这允许修饰符具有更强的关注点分离。 (I601b7)WindowInsets.asPaddingValues(Density)
已被添加,允许开发者在不需要组合的情况下进行转换。 (I94c35)- 更新了矢量可绘制对象的解析,以支持自动镜像,如果当前布局方向为 RTL,则翻转
VectorPainter
的内容。 (I79cd9, b/185760237)
错误修复
- 滚动修饰符(
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-alpha05
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha05
已发布。 版本 1.2.0-alpha05 包含这些提交。
API 更改
LazyVerticalGrid
和LazyHorizontalGrid
现在稳定了。 (I307c0)LazyGridItemInfo.Unknown
已被单独的LazyGridItemInfo.UnknownRow
和LazyGridItemInfo.UnknownColumn
替换 (I56d51)LazyVerticalGrid
/LazyHorizontalGrid
和所有相关 API 已移入.grid
子包。 请将您的导入从androidx.compose.foundation.lazy
更新到androidx.compose.foundation.lazy.grid
。 (I2d446, b/219942574)- 文本:
includeFontPadding
现在默认关闭。 由于includeFontPadding=false
导致的裁剪问题已得到解决,并且高脚本不应出现裁剪。 (I31c84, b/171394808) - 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-alpha04
和 androidx.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) 添加了
ComposableTarget
、ComposableTargetMarker
和ComposableOpenTarget
,允许在编译时报告可组合函数何时被调用来定位它没有被设计为使用的应用器。在大多数情况下,注释可以由 compose 编译器插件推断,因此直接使用这些注释应该很少见。 无法推断的情况包括创建和使用自定义应用器、抽象可组合函数(例如接口方法)、字段或可组合 lambda 的全局变量(局部变量和参数被推断),或者当使用
ComposeNode
或相关的可组合函数时。对于自定义应用器,调用
ComposeNode
或ReusableComposeNode
的可组合函数需要为该函数及其任何可组合 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-alpha03
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha03
已发布。 版本 1.2.0-alpha03 包含这些提交。
API 更改
TextInputSession
和TextInputService
中的notifyFocusedRect
方法现在已弃用,不会被调用。 使用BringIntoViewRequester
代替。 (Ia4302, b/192043120, b/216842427, b/178211874)- 已为具有 Modifier.animateItemPlacement() 的惰性网格的项目启用动画。 (Ib6621, b/211753218)
BringIntoViewRequester
现在将请求传播到托管的 Android 视图。 (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) LazyListLayoutInfo
和LazyGridLayoutInfo
现在具有新的属性:viewportSize
、orientation
、reverseLayout
(Ifc8ed, b/200920410)- 现在您可以为 LazyColumn/LazyRow 的项目指定内容类型 - LazyListScope 上的 item/items 函数现在接受此参数。提供此类信息有助于项目组合重用逻辑以提高效率,并且仅重用类似类型项目的项目之间的内容。 (I26506)
- 接受
maxSlotsToRetainForReuse
的SubcomposeLayoutState
构造函数现已弃用。取而代之的是一个接受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-alpha02
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha02
已发布。 版本 1.2.0-alpha02 包含这些提交。
API 更改
- 已将
NonRestartableComposable
添加到对现有方法进行重载的方法中,这些方法没有复杂的逻辑。这减少了为所有在内部调用的函数中重复的参数生成的编译器生成的记忆检查(等于)。 (I90490) - 添加了
excludeFromSystemGesture
修饰符,以便轻松访问 Android 的setSystemGestureExclusionRects
(I46f07)
错误修复
- 文本选择放大镜行为已经过优化,以匹配平台放大镜。 (Idd918, b/206833278)
LazyColumn
、LazyRow
、Modifier.verticalScroll
和其他使用Modifier.scrollable
的容器现在支持鼠标滚轮滚动。 (I2b5e1, b/198214718)
版本 1.2.0-alpha01
2022 年 1 月 12 日
androidx.compose.foundation:foundation:1.2.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha01
已发布。 版本 1.2.0-alpha01 包含这些提交。
API 更改
- 已将新参数
userScrollEnabled
添加到LazyColumn
、LazyRow
和LazyVerticalGrid
中,以便允许用户通过触摸手势或辅助功能操作暂时或永久禁用用户发起的滚动。通过状态上的方法以编程方式进行滚动仍然允许。 (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.1
和 androidx.compose.foundation:foundation-layout:1.1.1
已发布。 版本 1.1.1 包含这些提交。
错误修复
- 修复
androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
处的NullPointerException
(aosp/1947059, b/206677462) - 修复了在 Android 上从剪贴板读取时由剪贴板内容引起的崩溃。 (I06020, b/197769306)
- 修复了
LazyVerticalGrid
中的 RTL (aosp/1931080, b/207510535)
版本 1.1.0
2022 年 2 月 9 日
androidx.compose.foundation:foundation:1.1.0
和 androidx.compose.foundation:foundation-layout:1.1.0
已发布。 版本 1.1.0 包含这些提交。
自 1.0.0 以来的重要更改
- 对 Android 12 过度滚动效果 的稳定支持
- 对触摸目标大小的改进
- 请注意,关于 Compose 1.0,Material 组件将扩展其布局空间以满足 Material 辅助功能指南 中关于 触摸目标大小 的内容。例如,即使您将按钮的大小设置为更小,按钮触摸目标也会扩展到至少 48x48dp。这使 Compose Material 与 Material Design 组件具有相同的行为,如果您混合使用视图和 Compose,则会提供一致的行为。此更改还确保使用 Compose Material 组件创建 UI 时,将满足触摸目标辅助功能的最低要求。
- 对 导航栏 的稳定支持
- 将许多以前实验性的 API 提升为稳定版
- 对较新版本的 Kotlin 的 支持
版本 1.1.0-rc03
2022 年 1 月 26 日
androidx.compose.foundation:foundation:1.1.0-rc03
和 androidx.compose.foundation:foundation-layout:1.1.0-rc03
已发布。 版本 1.1.0-rc03 包含这些提交。
错误修复
- 更新以支持 Compose Material 1.1.0-rc03
版本 1.1.0-rc01
2021 年 12 月 15 日
androidx.compose.foundation:foundation:1.1.0-rc01
和 androidx.compose.foundation:foundation-layout:1.1.0-rc01
已发布。 版本 1.1.0-rc01 包含这些提交。
错误修复
- 现在允许将负滚动偏移量传递到
LazyListState.scrollToItem()
和LazyListState.animateScrollToItem()
中。 (Iceb90, b/184252837) - 修复了导致缺少辅助功能滚动操作的错误 (I7cbfb)
版本 1.1.0-beta04
2021 年 12 月 1 日
androidx.compose.foundation:foundation:1.1.0-beta04
和 androidx.compose.foundation:foundation-layout:1.1.0-beta04
已发布。 版本 1.1.0-beta04 包含这些提交。
新功能
- 更新为与 Kotlin
1.6.0
兼容
API 更改
- 清理了
androidx.core.view
中的可空性 (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-beta03
和 androidx.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.item
或LazyListScope.items
提供一个键时,此修饰符将启用项目重新排序动画。除了项目重新排序之外,由排列或对齐更改等事件引起的任何其他位置更改也将被动画化。 (I59e7b, b/150812265)
- 当您通过
版本 1.1.0-beta02
2021 年 11 月 3 日
androidx.compose.foundation:foundation:1.1.0-beta02
和 androidx.compose.foundation:foundation-layout:1.1.0-beta02
已发布。 版本 1.1.0-beta02 包含这些提交。
错误修复
- 涟漪和其他指示现在将仅在
Modifier.scrollable()
容器内延迟,而不是始终延迟按下事件。 (Ibefe0, b/203141462) - 已添加实验性 BringIntoView API,让您可以向父级发送请求,以便它们滚动以将项目带入视图 (Ib918d, b/195353459)
外部贡献
- 已添加
Modifier.pointerHoverIcon
(I95f01)
版本 1.1.0-beta01
2021 年 10 月 27 日
androidx.compose.foundation:foundation:1.1.0-beta01
和 androidx.compose.foundation:foundation-layout:1.1.0-beta01
已发布。 版本 1.1.0-beta01 包含这些提交。
错误修复
- 已添加实验性 BringIntoView API,让您可以向父级发送请求,以便它们滚动以将项目带入视图 (Ib918d, b/195353459)
版本 1.1.0-alpha06
2021 年 10 月 13 日
androidx.compose.foundation:foundation:1.1.0-alpha06
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha06
已发布。 版本 1.1.0-alpha06 包含这些提交。
API 更改
- 添加了一个无子级的 Layout 重载,效率更高 (Ib0d9a)
SemanticsNodeInteraction.performSemanticsAction
现在返回调用该函数的SemanticsNodeInteraction
。 (I9e5db)- 添加了
performScrollToNode(matcher: SemanticsMatcher)
,该方法将可滚动容器滚动到与给定匹配器匹配的内容处。 (Ic1cb8)
版本 1.1.0-alpha05
2021 年 9 月 29 日
androidx.compose.foundation:foundation:1.1.0-alpha05
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha05
已发布。 版本 1.1.0-alpha05 包含这些提交。
API 更改
- 为 PointerEventChange 添加了实验性的历史指针。 (Ic1fd8, b/197553056, b/199921305)
错误修复
- 修复了关于滚动的可滚动组件(包括延迟加载和非延迟加载)的无障碍支持问题。 (I6cdb0)
版本 1.1.0-alpha04
2021 年 9 月 15 日
androidx.compose.foundation:foundation:1.1.0-alpha04
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha04
已发布。 版本 1.1.0-alpha04 包含这些提交。
API 更改
- 弃用
performGesture
和GestureScope
,它们已被performTouchInput
和TouchInjectionScope
替换。 (Ia5f3f, b/190493367) - 为
SemanticsNode
添加了touchBoundsInRoot
,该方法包含最小触摸目标大小,使开发者能够确保触摸目标满足无障碍要求。 (I2e14b, b/197751214)
错误修复
- Android 12 设备上已添加了对拉伸过度滚动的支持。 (Iccf3c, b/171682480)
版本 1.1.0-alpha03
2021 年 9 月 1 日
androidx.compose.foundation:foundation:1.1.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha03
已发布。 版本 1.1.0-alpha03 包含这些提交。
新功能
- 将 Compose
1.1.0-alpha03
更新为依赖于 Kotlin1.5.30
。 (I74545)
API 更改
- 添加了滚动的辉光效果。添加了新的实验性 OverScrollConfiguration API,用于配置过度滚动视觉效果。提供 null 以关闭过度滚动效果。 (I0c304, b/171682480)
- AwaitPointerEventScope 现在具有 withTimeout() 和 withTimeoutOrNull() (I507f0, b/179239764, b/182397793)
- 添加了用于获取裁剪边界的测试方法。 (I6b28e)
- 为 ViewConfiguration 添加了最小触摸目标大小,用于语义和指针输入,以确保无障碍。 (Ie861c)
版本 1.1.0-alpha02
2021 年 8 月 18 日
androidx.compose.foundation:foundation:1.1.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha02
已发布。 版本 1.1.0-alpha02 包含这些提交。
API 更改
- 为
Modifier.size
和requiredSize
添加了 DpSize 版本。 (I3fc7e, b/194219828)
版本 1.1.0-alpha01
2021 年 8 月 4 日
androidx.compose.foundation:foundation:1.1.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha01
已发布。 版本 1.1.0-alpha01 包含这些提交。
API 更改
- 更新了
DrawScope#drawImage
方法,该方法使用源和目标矩形来使用可选的 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.5
和 androidx.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.4
和 androidx.compose.foundation:foundation-layout:1.0.4
已发布。 版本 1.0.4 包含这些提交。
依赖项更新
- 更新为依赖于 Kotlin
1.5.31
版本 1.0.3
2021 年 9 月 29 日
androidx.compose.foundation:foundation:1.0.3
和 androidx.compose.foundation:foundation-layout:1.0.3
已发布。 版本 1.0.3 包含这些提交。
依赖项更新
- 更新为依赖于 Kotlin
1.5.30
版本 1.0.2
2021 年 9 月 1 日
androidx.compose.foundation:foundation:1.0.2
和 androidx.compose.foundation:foundation-layout:1.0.2
已发布。 版本 1.0.2 包含这些提交。
更新为支持 Compose 1.0.2
版本。Compose 1.0.2
仍然与 Kotlin 1.5.21
兼容。
版本 1.0.1
2021 年 8 月 4 日
androidx.compose.foundation:foundation:1.0.1
和 androidx.compose.foundation:foundation-layout:1.0.1
已发布。 版本 1.0.1 包含这些提交。
依赖项更新
- 更新为依赖于 Kotlin
1.5.21
。
版本 1.0.0
2021 年 7 月 28 日
androidx.compose.foundation:foundation:1.0.0
和 androidx.compose.foundation:foundation-layout:1.0.0
已发布。 版本 1.0.0 包含这些提交。
1.0.0 的主要功能
这是 Compose 的第一个稳定版本。有关更多详细信息,请参阅官方的 Compose 发布博文!
已知问题
如果使用的是 Android Studio Bumblebee Canary 4 或 AGP
7.1.0-alpha04
/7.1.0-alpha05
,可能会遇到以下崩溃java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
要修复,请在
build.gradle
文件中将 minSdkVersion 临时提高到 24+。此问题将在下一个版本的 Android Studio Bumblebee 和 AGP7.1
中修复。 (b/194289155)
版本 1.0.0-rc02
2021 年 7 月 14 日
androidx.compose.foundation:foundation:1.0.0-rc02
和 androidx.compose.foundation:foundation-layout:1.0.0-rc02
已发布。 版本 1.0.0-rc02 包含这些提交。
- 更新了通用形状的边框渲染,以解决使用固定尺寸定义的路径问题。 (aosp/1748871, b/191817116)
版本 1.0.0-rc01
2021 年 7 月 1 日
androidx.compose.foundation:foundation:1.0.0-rc01
和 androidx.compose.foundation:foundation-layout:1.0.0-rc01
已发布。 版本 1.0.0-rc01 包含这些提交。
API 更改
- Canvas 现在支持用于无障碍的 contentDescription 参数。 (Ib547c)
错误修复
- 禁用的按钮、卡片、复选框以及总体的
Modifier.clickable(enabled=false)
将阻止点击事件传递到父级。 (Ic2c3b, b/183908811)
版本 1.0.0-beta09
2021 年 6 月 16 日
androidx.compose.foundation:foundation:1.0.0-beta09
和 androidx.compose.foundation:foundation-layout:1.0.0-beta09
已发布。 版本 1.0.0-beta09 包含这些提交。
API 更改
- 已移除
ManualFrameClock
。如果您需要控制动画,请改用composeTestRule.mainClock
。 (I3c3e8, b/189951065) - 将枚举 Role 和 LiveRegionMode 更改为使用私有构造函数的内联类。 (Id1890)
- KeyboardCapitalization 已转换为内联类。 (Id5a1c)
- TextOverflow 已更改为内联类。 (I433af)
错误修复
- 现在,当为 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>
是一个或多个字符H
、S
和P
,用于指示该方法是否应被标记为“热”、“启动”或“启动后”。The
<CLASS_DESCRIPTOR>
是目标方法所属类的描述符。例如,类androidx.compose.runtime.SlotTable
将具有描述符Landroidx/compose/runtime/SlotTable;
。The
<METHOD_SIGNATURE>
是方法的签名,包括方法的名称、参数类型和返回类型。例如,方法fun isPlaced(): Boolean
在LayoutNode
上具有签名isPlaced()Z
。这些模式可以包含通配符(
**
、*
和?
)以便单个规则涵盖多个方法或类。
规则的作用是什么?
具有标志
H
的方法表示该方法是“热”方法,应提前编译。具有标志
S
的方法表示它是启动时调用的方法,应提前编译以避免启动时编译和解释方法的成本。具有标志
P
的方法表示它是启动后调用的方法。此文件中存在的类表示它在启动期间使用,应预先分配在堆中以避免类加载的成本。
它是如何工作的?
- 库可以定义这些规则,这些规则将打包在 AAR 工件中。当构建包含这些工件的应用程序时,这些规则会合并在一起,并且合并后的规则用于构建特定于应用程序的紧凑二进制 ART 配置文件。ART 然后可以在应用程序安装在设备上时利用此配置文件,以便提前编译应用程序的特定子集以提高应用程序的性能,尤其是第一次运行。请注意,这不会影响可调试的应用程序。
版本 1.0.0-beta08
2021 年 6 月 2 日
androidx.compose.foundation:foundation:1.0.0-beta08
和 androidx.compose.foundation:foundation-layout:1.0.0-beta08
已发布。 版本 1.0.0-beta08 包含这些提交。
API 更改
- NestedScrollSource 枚举被内联类取代。(Ie321b,b/187055290)
- 将枚举用法重构为内联类以避免在添加新的枚举值时出现详尽的 when 语句问题。(I2b5eb)
- 向可点击/可切换添加了点击超时,以防止在滚动/拖动期间显示涟漪(Ia2704,b/168524931)
- ContentDescription 和文本语义属性不再是单个值,而是列表。这使得能够将它们合并,而不是连接。还提供了更好的测试 API 来利用这些更改(Ica6bf,b/184825850)
Modifier.focusModifier()
已弃用,并被Modifier.focusTarget()
取代(I6c860)- KeyboardType 枚举被内联类取代。(I73045,b/187055290)
- 将
FocusState
枚举替换为FocusState
接口(Iccc1a,b/187055290) - ImeAction 枚举被内联类取代。(I18be5,b/187055290)
AnnotatedString.withAnnotation
函数现在是 ExperimentalTextApi 而不是 ExperimentalComposeApi。(I0cd0a)- 带 TextUnitType 的 TextUnit 构造函数现在是 ExperimentalTextApi 而不是 ExperimentalComposeApi。
- PaddingValues 现在是
@Stable
而不是@Immutable
(I88c50)
错误修复
- 修复了在非空文本中长按空白区域导致的崩溃问题。(I33ab5,b/187437299)
- 在全选后显示工具栏(I495d9,b/185919613)
- 修复了可滚动容器在交叉轴上裁剪其子项的问题。如果您有一个带有 Card 项的 LazyRow,它很容易重现。现在阴影不会被裁剪。(Icb635,b/186318448)
- 修复了使用 Modifier.combinedClickable 时涟漪/其他指示有时会在长按时卡住的问题(I2298c,b/186223077)
- 现在
detectDragGesures
、detectVerticalGestures
和detectHorizontalGestures
将自动使用位置变化,无需在 onDrag 回调中调用 change.consumePositionChange(I42fc4,b/185096350,b/187320697) Modifier.onGloballyPositioned()
已更改为报告修饰符链中此修饰符的坐标,而不是应用所有修饰符后的布局坐标。这意味着现在修饰符的顺序会影响报告的坐标。(Ieb67d,b/177926591)
版本 1.0.0-beta07
2021 年 5 月 18 日
androidx.compose.foundation:foundation:1.0.0-beta07
和 androidx.compose.foundation:foundation-layout:1.0.0-beta07
已发布。 版本 1.0.0-beta07 包含这些提交。
API 更改
- 为 LazyColumn/Row 引入了下一个可见项预取逻辑(I8a4bc,b/184940225)
- 添加了剪切选择句柄(Iff80d,b/183408447)
错误修复
- LazyColumn/Row 现在将最多保留 2 个先前可见的项处于活动状态(未释放),即使它们已经滚动到屏幕外。这使得组件能够在需要合成新项时重用活动子合成,从而提高滚动性能。(Ie5555)
- 移除 paintBackground。(I38660)
- 使用 DrawScope 绘制选择背景。(I73c61,b/186674472)
- 修复了影响使用 spacedBy 布局来布局加权子项的 Row/Column 的 beta06 回归问题。(Ifaf8c,b/187326588)
版本 1.0.0-beta06
2021 年 5 月 5 日
androidx.compose.foundation:foundation:1.0.0-beta06
和 androidx.compose.foundation:foundation-layout:1.0.0-beta06
已发布。 版本 1.0.0-beta06 包含这些提交。
API 更改
- 解决与导航手势的冲突(I1145e)
- 添加了 CollectionInfo 和 CollectionItemInfo 可访问性 API,允许为可访问性服务标记集合及其项目(Id54ef,b/180479017)
- 添加了
SemanticsActions.ScrollToIndex
用于将具有索引项目的列表滚动到具有特定索引的项目,以及SemanticsProperties.IndexForKey
用于获取具有键项目的列表中项目的索引。这两个操作都由 LazyList 实现。- 添加了
SemanticsNodeInteraction.performScrollToIndex
用于将列表滚动到给定索引,以及SemanticsNodeInteraction.performScrollToKey
用于将列表滚动到具有给定键的项目。(I4fe63,b/178483889,b/161584524)
- 添加了
- AnnotatedString 保存支持到 TextFieldValue.Saver。向 AnnotatedString.Builder 添加了 addTtsAnnotation 和 withAnnotation 实用函数(I8cbdc,b/178446304)
- 向
PaddingValues(horizontal, vertical)
添加了默认0.dp
参数值(I05571,b/181336792)
错误修复
- 具有
weight(fill = false)
的 Row 和 Column 子项不再使父项填充整个可用主轴空间。(Ied94d,b/186012444,b/184355105)
版本 1.0.0-beta05
2021 年 4 月 21 日
androidx.compose.foundation:foundation:1.0.0-beta05
和 androidx.compose.foundation:foundation-layout:1.0.0-beta05
已发布。 版本 1.0.0-beta05 包含以下提交。
API 更改
- FlingBehavior 接口现在标记为 @Stable。所有实现都应符合
@Stable
契约。(I93354, b/184830577)
错误修复
- 修复了
ACTION_SCROLL_FORWARD
、ACTION_SCROLL_BACKWARD
、accessibilityActionScrollLeft
、accessibilityActionScrollUp
、accessibilityActionScrollRight
和accessibilityActionScrollDown
无障碍滚动操作。现在它不会滚动到可滚动区域的末尾,而是在给定方向上滚动一屏。(Ieccb0) - 来自 ui-test-manifest 和 ui-tooling-data 的 AndroidManifest 文件现在与 Android 12 兼容 (I6f9de, b/184718994)
版本 1.0.0-beta04
2021 年 4 月 7 日
androidx.compose.foundation:foundation:1.0.0-beta04
和 androidx.compose.foundation:foundation-layout:1.0.0-beta04
已发布。 版本 1.0.0-beta04 包含以下提交。
API 更改
- 将 SoftwareKeyboardController 上的 hideSoftwareKeyboard 和 showSoftwareKeyboard 分别重命名为
hide()
和show()
。- 为 LocalSoftwareKeyboardController 提供完整的 CompositionLocal 接口,允许对其进行设置(在测试中特别有用)(I579a6)
TextOverflow.Visible
已引入。(Ic8f89)- 已删除
RowScope
、ColumnScope
、BoxScope
、BoxWithConstraintsScope
的公共实例。(I4e83e, b/181869067)
错误修复
- 修复了快速滑动后
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-beta03
和 androidx.compose.foundation:foundation-layout:1.0.0-beta03
已发布。 版本 1.0.0-beta03 包含以下提交。
API 更改
DefaultMonotonicFrameClock
已弃用。现在,在没有MonotonicFrameClock
的情况下调用withFrameNanos
或Recomposer.runRecomposeAndApplyChanges
会抛出IllegalStateException
。(I4eb0d)
错误修复
FlingBehavior.performFling()
现在即使在速度为 0 时也会被调用 (I0b6e5, b/181237123)
版本 1.0.0-beta02
2021 年 3 月 10 日
androidx.compose.foundation:foundation:1.0.0-beta02
和 androidx.compose.foundation:foundation-layout:1.0.0-beta02
已发布。 版本 1.0.0-beta02 包含以下提交。
API 更改
- 在 LazyColumn 测量逻辑中添加了多个小的优化 (Ic6889)
- 添加了新的
LocalSoftwareKeyboardController
组合本地 API 来替换 TextField 上以前的 SoftwareKeyboardController 接口。(I5951e, b/168778053) - 添加了新的
LocalSoftwareKeyboardController
组合本地 API 来替换 TextField 上以前的 SoftwareKeyboardController 接口。(I84472, b/168778053)
错误修复
- 强制执行对实验性 API 的公共使用的限制 (I6aa29, b/174531520)
版本 1.0.0-beta01
2021 年 2 月 24 日
androidx.compose.foundation:foundation:1.0.0-beta01
和 androidx.compose.foundation:foundation-layout:1.0.0-beta01
已发布。 版本 1.0.0-beta01 包含以下提交。
这是 Compose 1.0.0 Beta 的第一个版本。
API 更改
- 已将 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() }
传递给诸如Button
和Modifier.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)
compositionLocalOf
和staticCompositionLocalOf
的defaultFactory
现在是必需的,而不是可选的。此更改消除了没有提供默认工厂的不可为空类型的潜在类型错误。以前,这将为不可为空类型提供空引用。
对于可为空类型,请考虑提供
{ 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-alpha12
和 androidx.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 是针对不需要自动镜像的情况而引入的。(I61040,b/152756983)
canDrag 已从 Modifier.scrollable 中删除。(Id66e7,b/175294473)
Compose 编译器插件的目标 API 已重构为使用接口而不是具体类。该接口也不再使用类型参数。
这是一个内部更改,不应影响源代码兼容性,但会造成二进制兼容性问题。(I3b922,b/169406779)
Modifier.scaleGestureFilter 已被删除。请改用 Modifier.zoomable。或者,使用
Modifier.pointerInput { detectMultitouchGestures { ... }}
(Id5da1,b/175294473)AnimatedValue/Float 现已弃用。请改用 Animatable。(I71345,b/177457083)
- 已从公共 API 中删除 CoreText 和 CoreTextField
- 已删除弃用的 SelectionContainer 重载 (I99c19)
删除弃用的非挂起滚动函数 继续上一个版本中的更改,非挂起滚动函数现在已完全删除。请转换为具有相同名称的挂起函数。可以通过 rememberCoroutineScope() 获取协程作用域。(I3d39c,b/178169563)
androidx.compose.foundation.layout.ConstraintLayout 已弃用,取而代之的是 androidx.constraintlayout.compose.ConstraintLayout。您需要添加对
androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01
的依赖项。(I87adc)tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicaitonGestureFilter 已被弃用。请改用 Modifier.clickable 或 Modifier.pointerInput 以及 detectTapGestures 函数。(I6baf9,b/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-alpha11
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha11
已发布。 版本 1.0.0-alpha11 包含这些提交。
API 更改
弃用非挂起 scrollBy,删除非挂起 scrollTo
我们现在建议使用挂起函数来控制滚动并等待滚动完成。作为此转换的一部分,我们正在弃用和/或删除这些函数的非挂起版本。(Ie9ced)
弃用非挂起 smoothScrollBy 我们现在建议使用挂起函数来控制滚动并等待滚动完成。作为此转换的一部分,我们正在弃用这些函数的非挂起版本。(I12880)
内容描述参数已添加到 Image 和 Icon 中。它用于向辅助功能服务提供描述 (I2ac4c)
BasicTextField 收到一个名为“decorationBox”的新参数。它允许向文本字段添加装饰,如图标、占位符、标签等,并增加文本字段的点击目标区域。(I16996)
canDrag 参数已从 Modifier.draggable 中删除 (Ic4bec,b/175294473)
已删除接受 FlingConfig 的 AnimatedFloat.fling。请改用挂起 Animatable.animateDecay。(I4659b,b/177457083)
已从以下类中删除
data class
- InlineTextContent
- LocaleList
- (I605c7)
clickable、toggleable 和 selectable 现在可以在合成之外创建 (I0a130,b/172938345,b/175294473)
ScrollableColumn/Row 已被弃用。当您拥有大量滚动内容时,使用 ScrollableColumn 的效率不如 LazyColumn,因为 LazyColumn 只能合成/测量/绘制可见元素。为了防止用户使用效率低下的方式,我们决定弃用 ScrollableColumn 和 ScrollableRow,并推广 LazyColumn 和 LazyRow 的使用。用户仍然可以决定他们不需要延迟行为并直接使用修饰符,例如:Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b,b/170468083)
LazyColumn/LazyRow/LazyVerticalGrid 作用域的新
items(count: Int)
工厂方法。items(items: List)
和itemsIndexed(items: List)
现在是扩展函数,因此您在使用时必须手动导入它们。用于数组的新扩展重载:items(items: Array) 和 itemsIndexed(Array) (I803fc,b/175562574)已删除弃用的 AbsoluteArrangement。(Iffa96,b/177641870)
propagateMinConstraints 参数已添加到 Box 中,用于指定传入的最小约束是否应传递到 Box 的内容中。默认值为 false。(I0125b,b/152613457)
错误修复
- onCommit、onDispose 和 onActive 已被弃用,取而代之的是 SideEffect 和 DisposableEffect API (If760e)
- WithConstraints 已重新设计为 BoxWithConstraints 并移动到 foundation.layout 中。(I9420b,b/173387208)
对 Font/FontFamily/Typeface 的工厂函数的更改
- 添加了以大写字母开头的工厂函数
- 弃用之前以小写字母开头的工厂函数
- 新的工厂函数返回 FontFamily 而不是子类
- 隐藏子类的构造函数,以便它们只能通过工厂函数构造。
- 将 Font.asFontFamily 重命名为 Font.toFontFamily
- (I42aa7)
引入了
ComposeContentTestRule
,它扩展了ComposeTestRule
并定义了setContent
,后者已从ComposeTestRule
中删除。添加了一个工厂方法createEmptyComposeRule()
,它返回一个ComposeTestRule
并且不会为您启动 Activity。当您想要在测试期间启动 Activity 时使用它,例如使用ActivityScenario.launch
(I9d782,b/174472899)animateAsState 现在是 animateFooAsState,其中 Foo 是正在动画处理的变量的类型。例如 Float、Dp、Offset 等 (Ie7e25)
Density 现在是 Arrangement 接口的接收器范围。(I18aad)
TextFieldValue 接受 AnnotatedString。但这只是 API 更改,尚未实现多样式文本编辑。
- 已从 EditingBuffer 构造函数参数中删除
initial
。(I326d5)
- 已从 EditingBuffer 构造函数参数中删除
invalidate 和 compositionReference() 现在已弃用,取而代之的是 currentRecomposeScope 和 rememberCompositionReference。(I583a8)
AnnotatedString 已更改为扩展 kotlin.CharSequence。因此,length 和 subSequence 现在是实例函数,扩展函数已删除。(Iaf429)
Duration 和 Uptime 将替换为 Long 毫秒,此步骤将删除指针输入对这些类的依赖项。(Ia33b2,b/175142755,b/177420019)
RememberObserver 替换 CompositionLifecycleObserver,CompositionLifecycleObserver 现在已弃用。
RememberObserver
是CompositionLifecycleObserver
的替代品,具有修改后的语义和重命名的方法。对于仅被记住一次的对象,可以机械地更改为新的 API,这始终是,并且仍然是推荐的做法。但是,如果在合成中多次记住某个引用,则会为每个引用调用onRemembered
,而onEnter
只调用一次。如果对象在子合成中使用,例如WithConstraints
和Scaffold
,则onEnter
会被多次调用,这使得单个onEnter
调用保证不可靠,因此已从RememberObserver
中删除。RememberObserver
添加了onAbandoned
,如果从传递给remember
的回调中返回了RememberObserver
实例,但没有在合成状态中记住,因此永远不会调用onRemembered
,则会调用它。如果在完成之前异常终止了合成,或者合成被丢弃,因为正在为其生成合成的状态不再是当前状态或不再需要,则可能会发生这种情况。如果上面的单个引用推荐之后的RememberObserver
实例正在跟踪外部资源,则onForgotten
和onAbandoned
都指示不再需要该资源。如果对象正在跟踪在onRemembered
中启动的工作或分配的资源,则可以忽略onAbandoned
,因为它不会在调用onRemembered
时被调用。(I02c36)将 TransformedText.transformedText 重命名为 TransformedText.text
- TransformedText 不再是数据类 (Ie672a)
以下类不再是数据类
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
已移除实验性的 monotonicFrameAnimationClockOf 方法 (Ib753f, b/170708374)
已弃用全局坐标方法,并创建了新的基于窗口的坐标方法。 (Iee284)
请使用 ImeAction.None 代替 ImeAction.NoAction
- 请使用 ImeAction.Default 代替 ImeAction.Unspecified (Ie1bcc)
FocusRequester.createRefs 现在标记为实验性,因为它可能会更改。 (I2d898, b/177000821)
SemanticsPropertyReceiver.hidden 已重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。AccessibilityRangeInfo 已重命名为 ProgressBarRangeInfo。stateDescriptionRange 已重命名为 progressBarRangeInfo。AccessibilityScrollState 已重命名为 ScrollAxisRange。horizontalAccessibilityScrollState 已重命名为 horizontalScrollAxisRange。verticalAccessibilityScrollState 已重命名为 verticalScrollAxisRange。 (Id3148)
已将 VisualTransformation 更改为函数式接口 (I3bba4)
在测试中利用 TestCoroutineDispatcher (I532b6)
已移除 PointerInputData,并修改了 PointerInputChange 以赋予它 PointerInputData 的所有字段。PointerInputEvent 和 PointerInputEventData 已变为内部,因为它们没有在任何公共 API 中使用。 (Ifff97, b/175142755)
已将 TextInputService.onStateUpdated 重命名为 updateState (Id4853)
已移除 displaySize,因为它应该避免使用。通常最好使用 onRoot() 的大小,或者至少使用窗口大小。 (I62db4)
版本 1.0.0-alpha10
2021 年 1 月 13 日
androidx.compose.foundation:foundation:1.0.0-alpha10
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha10
已发布。 版本 1.0.0-alpha10 包含以下提交。
API 更改
- ImeOptions 和 KeyboardOptions 不再是数据类 (I3c898, b/168684531)
- VisualTransformation API 更改
- 已将 OffsetMap 重命名为 OffsetMapping
- 已将 OffsetMapping.identityOffsetMap 重命名为 OffsetMapping.Identity
- PasswordTransformation 不再是数据类
- 已将 OffsetMapping 移动到其自己的文件中
- (I0bdf3)
- EditOperations API 更改
- 已将 EditOperation 重命名为 EditCommand
- 已为 EditOperation 的具体实现添加了 Command 后缀
- EditCommand 不再是数据类
- 已将 EditOperation.process 函数重命名为 applyTo
- 已将 InputEventListener 重命名为 InputEventCallback
- (I0a366)
- 已修改 Velocity 以具有组成部分和数学运算。 (Ib0447)
- 已将 @ExperimentalTesting 重命名为 @ExperimentalTestApi,以与类似的实验性 API 注释保持一致 (Ia4502, b/171464963)
- 已为 LazyColumn/LazyRow 添加实验性的 stickyHeader 方法 (I0a81d)
- 已将 Color.useOrElse() 重命名为 Color.takeOrElse() (Ifdcf5)
- 已弃用 TestUiDispatcher。请使用 Dispatchers.Main 代替 (Ic171f, b/175385255)
- 已将 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-alpha09
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha09
已发布。 版本 1.0.0-alpha09 包含以下提交。
API 更改
已添加 Scrollable 接口
这使得 ScrollState 和 LazyListState 可以作为一种通用类型处理,从而允许在两种类型上实现自定义滚动。
这也将 smoothScrollBy 移动到 Scrollable 的扩展函数中,利用了此功能。 (I2153b)
已添加 LazyVerticalGrid。 (I17267, b/162213211)
已弃用 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed。请使用 LazyColumn 和 LazyRow 代替 (I5b48c)
对于挂起指针输入 API,已将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。 (Idf0a1, b/175142755)
已添加 LazyListState.layoutInfo,它公开当前可见项目的尺寸和偏移列表 (If8678, b/170472532)
已移除 ExperimentalPointerInput 注释 (Ia7a24)
已添加对 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()
将节点插入其正在编辑的树中,具体取决于哪种方法的性能更好。一些树,例如
LayoutNode
和View
,自下而上构建比自上而下构建效率高得多。在此更改之前,需要使用插入堆栈来实现自下而上的构建,该堆栈需要复制到每个需要自下而上构建的应用器中以实现性能。通过此更改,Applier
重写了insertBottomUp()
来自下而上构建树,并重写了insertTopDown()
来自上而下构建树。(Icbdc2)添加了 painterResource API 来处理从栅格化资产格式(如 PNG)或 VectorDrawables 不透明地加载 Painter 对象。使用者不再需要提前确定资产类型,并可以调用此方法获取 Painter 对象以在 Image 可组合物或 Painter 修饰器中使用。(I2c703,b/173818471)
添加了 buildAnnotatedString 工厂函数以构建 AnnotatedString。弃用了 annotatedString 构建器函数。(Idfe0b)
版本 1.0.0-alpha08
2020 年 12 月 2 日
androidx.compose.foundation:foundation:1.0.0-alpha08
和 androidx.compose.foundation:foundation-layout:1.0.0-alpha08
已发布。 版本 1.0.0-alpha08 包含这些提交。
API 更改
- 从
CoreTextField
中删除了maxLines
参数。如果您想通过行数限制文本字段的高度,请改用BasicTextField
。(Iec002) - 更改了
await*TouchSlop()
方法以不再检测指针按下,并将它们重命名为*OrCancellation
。还删除了对orientationLock
参数的需要。(Ie96e1) - 添加了用于可组合 lambda 参数命名和位置的 lint 检查,以检查与 Compose 指南的一致性。根据 lint 检查和指南,还将使用
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 以将文本字段设置为可水平滚动的单行。(I57004,b/168187755)
使用新的挂起指针输入添加了用于点击、双击、长按和按下指示的手势检测器。还添加了一些实用程序,使开发人员更容易编写自己的手势检测器。(I00807)
在基础中添加了 Modifier.focusable。使用此方法将可聚焦行为添加到组件,并提供正确的语义和可访问性。(I41eb9,b/152525426,b/162865824)
以前已弃用的 API 已被删除:Border 已被删除,请改用 BorderStroke。Modifier.drawBorder 已被删除,请改用 Modifier.border。Modifier.gravity 已被删除,请改用 Modifier.align。Stack 已被删除,请改用 Box (I32c2b,b/172470874)
AbsoluteArrangement 已重命名为 Arrangement.Absolute。(If26f2)
错误修复
- 将 DrawModifier API 从 androidx.compose.ui 包移至 androidx.compose.ui.draw 包。创建 DrawModifierDeprecated.kt 文件以包含类型别名/辅助方法以帮助从已弃用的 API 迁移到当前 API。(Id6044,b/173834241)
- 将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer 还根据 API 委员会的反馈更新了相关类以使用 GraphicsLayer。(I0bd29,b/173834241)
<T>
已从 SubcomposeLayout 声明中删除。现在您可以使用它而不指定类型。(Ib60c8)- 使 PointerInputData 的 uptime 和 position 字段不可为空。(Id468a)
- MaterialTheme 现在为选择句柄和选择背景设置了正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColors 来自定义用于选择的颜色。(I1e6f4,b/139320372,b/139320907)
- Box 的 alignment 参数已重命名为 contentAlignment。(I2c957)
- offsetPx 修饰器已重命名为 offset。它们现在使用 lambda 参数而不是 State。(Ic3021,b/173594846)
- 添加了 WindowManager.isWindowFocused 来检查主机窗口是否处于焦点,以及提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2a,b/170932874)
- 将 resetInput 参数添加到 TextInputService#onStateUpdated (I3e8f5,b/172239032,b/171860947)
- 更新了 TextFieldValue API
- 使 TextFieldValue.composition 成为只读
- 删除了为无效选择范围抛出的异常 (I4a675,b/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 及其用法)现在是实验性的 (I6ef86,b/171378521)
- 删除旧的 ui-test 模块及其存根 (I3a7cb)
- TextUnit.Inherit 已重命名为 TextUnit.Unspecified,与其他单位保持一致。(Ifce19)
- Alignment 接口已更新并变得功能化。(I46a07,b/172311734)
foundation:foundation-text
模块已合并到foundation:foundation
中 (Idac0f)- 弃用 place(Offset) 和 placeRelative(Offset)。改用使用 int 偏移量的重载 (I4c5e7)
id
已重命名为layoutId
,用于LayoutIdParentData
。Measurable.id
已重命名为Measurable.layoutId
。(Iadbcb,b/172449643)
版本 1.0.0-alpha07
2020 年 11 月 11 日
androidx.compose.foundation:foundation:1.0.0-alpha07
、androidx.compose.foundation:foundation-layout:1.0.0-alpha07
和 androidx.compose.foundation:foundation-text:1.0.0-alpha07
已发布。 版本 1.0.0-alpha07 包含这些提交。
API 更改
- 与
Modifier.fillMaxSize[Width|Height]
类似,我们现在在LazyColumn/Row
的范围内支持Modifier.fillParentMaxSize[Width|Height]
中的小数 (I797e2,b/166586426) - 从公共 API 中删除了
KeyboardOptions.toImeOptions
。(Ic2e45) - 基础 AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor 已被弃用。改用 Material 库中提供的新的版本。对于非 Material 应用,您应该改为创建自己的设计系统特定主题环境,这些环境可以在您自己的组件中使用。(I74acc,b/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-alpha06
、androidx.compose.foundation:foundation-layout:1.0.0-alpha06
和 androidx.compose.foundation:foundation-text:1.0.0-alpha06
已发布。 版本 1.0.0-alpha06 包含这些提交。
API 更改
- androidx.compose.foundation.Icon 已移至 androidx.compose.material.Icon。如果您不想使用 Material 库,也可以使用 Image 组件 / Modifier.paint() 和 Painter。(I9f622)
- 将 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-alpha05
、androidx.compose.foundation:foundation-layout:1.0.0-alpha05
和 androidx.compose.foundation:foundation-text:1.0.0-alpha05
已发布。 版本 1.0.0-alpha05 包含这些提交。
API 更改
- CoreTextField 现在支持光标功能 (Id23aa)
弃用 contentColor() 和 currentTextStyle() API,并分别用 AmbientContentColor 和 AmbientTextStyle 环境替换它们。您可以通过对环境属性使用
.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-alpha04
、androidx.compose.foundation:foundation-layout:1.0.0-alpha04
和 androidx.compose.foundation:foundation-text:1.0.0-alpha04
已发布。 版本 1.0.0-alpha04 包含这些提交。
API 更改
- Stack 已重命名为 Box。以前存在的 foundation.Box 将被弃用,支持 compose.foundation.layout 中的新 Box。新 Box 的行为是在有多个子项时将子项彼此叠放 - 这与以前的 Box 不同,以前的 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-alpha03
、androidx.compose.foundation:foundation-layout:1.0.0-alpha03
和 androidx.compose.foundation:foundation-text:1.0.0-alpha03
已发布。 版本 1.0.0-alpha03 包含这些提交。
API 更改
- 将 InnerPadding 重命名为 PaddingValues。(I195f1, b/167389171)
- 在布局 API 中,对重力的使用始终重命名为 align 或 alignment。(I2421a, b/164077038)
- 向 Stack 添加了 alignment 参数,它允许为所有 Stack 子级指定默认对齐方式。(Ie80ca, b/164085265)
错误修复
- DpConstraints 及其使用的 API 已弃用。(I90cdb, b/167389835)
- 参数
minWidth
和maxWidth
的widthIn
被重命名为min
和max
。类似地,对于preferredWidthIn
、heightIn
、preferredHeightIn
。(I0e5e1, b/167389544) - 在 ComposeTestRule 上添加了 onNode 和其他全局方法,因为当前的全局方法将被弃用。(Ieae36)
- 修复了 GestureScope 中的大小和位置计算,这会导致生成无效的滑动手势,例如 (Iaf358, b/166589947)
- 将
createAndroidComposeRule
和AndroidInputDispatcher
从androidx.ui.test.android
移动到androidx.ui.test
(Idef08, b/164060572)
版本 1.0.0-alpha02
2020 年 9 月 2 日
androidx.compose.foundation:foundation:1.0.0-alpha02
、androidx.compose.foundation:foundation-layout:1.0.0-alpha02
和 androidx.compose.foundation:foundation-text:1.0.0-alpha02
已发布。 版本 1.0.0-alpha02 包含这些提交。
错误修复
- 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") } }
版本 1.0.0-alpha01
2020 年 8 月 26 日
androidx.compose.foundation:foundation:1.0.0-alpha01
、androidx.compose.foundation:foundation-layout:1.0.0-alpha01
和 androidx.compose.foundation:foundation-text:1.0.0-alpha01
已发布。 版本 1.0.0-alpha01 包含这些提交。
版本 0.1.0-dev
版本 0.1.0-dev17
2020 年 8 月 19 日
androidx.compose.foundation:foundation:0.1.0-dev17
、androidx.compose.foundation:foundation-layout:0.1.0-dev17
和 androidx.compose.foundation:foundation-text:0.1.0-dev17
已发布。 版本 0.1.0-dev17 包含这些提交。
API 更改
- 添加了 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-dev16
、androidx.compose.foundation:foundation-layout:0.1.0-dev16
和 androidx.compose.foundation:foundation-text:0.1.0-dev16
已发布。 版本 0.1.0-dev16 包含这些提交。
API 更改
- 为 Lazy 列表的 itemContent 参数添加了 LazyItemScope。它提供了用于填充父级最大尺寸的修饰符,这解决了项目应填充视口且常规 Modifier.fillMaxSize() 不起作用(因为项目是以无限约束进行测量的)的用例。(Ibd3b2, b/162248854)
- 将对话框移至 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 添加了自定义曲线支持。已添加
enabled
和onZoomStarted
功能 (If8b8f) - Material FilledTextField 已重命名为 TextField,基础 TextField 已重命名为 BaseTextField,以使最简单的 API 易于发现和使用 (Ia6242, b/155482676)
- 先前已弃用的 AdapterList 已移除。改用 LazyColumnItems (I12b9b)
- Modifier.drawBackground 已重命名为 Modifier.background (I13677)
- 已移除旧的 ConstraintLayout DSL。ConstraintSet2 已重命名为 ConstraintSet。(If58d1, b/162450908)
- 添加了 Modifier.absoluteOffset() 和 Modifier.absoluteOffsetPx()。与 offset 修饰符不同,absolute offset 修饰符不会在从右到左的上下文中自动镜像 (I3aa21)
Row
和Column
现在是内联函数,大大减少了使用它们的开销。(I75c10)
错误修复
- 解决广泛的 API 修复 (I077bc)
- 移除未使用的 OffsetBase 接口
- 调整 Offset 和 IntOffset 类以具有一致的 API 表面
- 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
- 将 nativeCanvas 方法从 Canvas 接口移出,以支持消费者创建自己的 Canvas 实例
- 创建了 stub EmptyCanvas 类,将 DrawScope 重构为非空参数,而不是 lateinit,并确保字段的非空性
- 将 ClipOp 枚举重命名为 PascalCase
- 将 FilterQuality 枚举重命名为 PascalCase
- 将 StrokeJoin 枚举重命名为 PascalCase
- 将 PointMode 枚举重命名为 PascalCase
- 将 PaintingStyle 枚举重命名为 PascalCase
- 将 PathFillType 枚举重命名为 PascalCase
- 将 StrokeCap 枚举重命名为 PascalCase
- 更新 DrawCache 实现以不再使用 lateinit 参数
- 更新 DrawScope 以不再对 fillPaint 和 strokePaint 内部参数使用延迟委托
- 更新 Image 可组合函数以避免使用 Box,以减少开销
- 更新 Outline 类以包含 @Immutable 注释
- 更新 PathNode 以包含每个路径指令的 @Immutable 注释
- 更新 Vector 子组合以移除对相等性的冗余条件检查,因为 compose 已经处理了这些检查
- 弃用 Rect 伴随构造函数方法,以支持函数构造函数
- 使用 @Immutable 和 @Stable API 更新 Brush 类和函数构造函数
- 将 VertexMode 枚举更新为 PascalCase
- 更新 DrawScope selectPaint 方法以在参数更改时有条件地覆盖 paint 上的笔划参数
- 更新 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-dev15
、androidx.compose.foundation:foundation-layout:0.1.0-dev15
和 androidx.compose.foundation:foundation-text:0.1.0-dev15
已发布。 版本 0.1.0-dev15 包含这些提交。
要使用 Compose 的 0.1.0-dev15
版本,您需要
依赖项更新
- 要使用 Compose 的
0.1.0-dev15
版本,您需要根据上面 声明依赖项 中显示的新代码段更新您的依赖项。
API 更改
- 类似于 ScrollableColumn/ScrollableRow 中的新参数,LazyColumnItems/LazyRowItems 现在也具有 contentPadding 参数,它允许在内容被裁剪后添加 padding,而这无法通过修饰符参数来实现。它还允许仅在第一个项目之前/最后一个项目之后添加间距。(Ibc24e)
- 文本字段中的 onFocusChange 回调已重命名为 onFocusChanged (Ida4a1)
- VerticalScroller 和 HoriziontalScroller 已被弃用。请使用 ScrollableColumn 和 ScrollableRow 来构建具有 Column/Row 行为和参数的内置体验,或者在您自己的元素上使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。类似地,ScrollerPosition 已被弃用,取而代之的是 ScrollState ( I400ce,b/157225838,b/149460415,b/154105299)
- Modifier.draggable 和 Modifier.scrollable API 已重新设计。DragDirection 已被移除,取而代之的是 Orientation。可滚动所需的 State 已被简化。ScrollableState 已重命名为 ScrollableController ( Iab63c,b/149460415)
- 单值语义属性现在使用调用样式。例如,'semantics { hidden = true }' 现在写成:
semantics { hidden() }
。 (Ic1afd,b/145951226,b/145955412) - RoundedCornerShape 和 CutCornerShape 使用的角尺寸现在可以大于 50% (Id2340,b/160400213)
- 将 Image 可组合的默认 ContentScale 参数从 Inside 更改为 Fit。这样做是为了在布局大小大于绘图程序的内在大小的情况下按比例放大底层 Painter,同时保持纵横比。这种行为更好地匹配了为 Image 提供固定大小的预期,同时不会影响仅使用内在大小来计算可组合大小的默认行为。 (I40ae3,b/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 替代 ( I4066d,b/155211005)
- 用 Int 替换了 IntPx 的用法。用 IntOffset 替换了 IntPxPosition。用 IntSize 替换了 IntPxSize。 (Ib7b44)
- androidx.ui.foundation.shape.RectangleShape 已移除;使用 androidx.ui.graphics.RectangleShape ( I94939,b/154507984)
- 为了合并用于表示大小信息的类数量,标准化使用 Size 类而不是 PxSize。这提供了内联类的优势,可以利用 long 来打包 2 个浮点值,以表示用浮点值表示的宽度和高度。 (Ic0191)
- 为了合并用于表示定位信息的类数量,标准化使用 Offset 类而不是 PxPosition。这提供了内联类的优势,可以利用 long 来打包 2 个浮点值,以表示用浮点值表示的 x 和 y 偏移量。 (I3ad98)
- 添加了 Modifier.zoomable 以实现捏合缩放功能 ( Id5d63)
- Toggleable 组件已被弃用。请改用 Modifier.toggleable ( I35220,b/157642842)
- MutuallyExclusiveSetItem 已被弃用。请改用 Modifier.selectable。 (I02b47,b/157642842)
- TestTag 现在已弃用。请改用 Modifier.testTag。 (If5110,b/157173105)
- 在 Text 中添加了 fontWeight 参数,该参数之前意外没有添加 ( I56937)
- 在各种 Compose 类中替换了 Px 类的用法,作为大型重构工作的一部分,仅依赖 Dp 和原始类型来表示像素参数 ( I19d02)
- VerticalScroller 现在开箱即用地提供 Column。HorizontalScroller 现在开箱即用地提供 Row。 (Ieca5d,b/157020670)
- 在各种 Compose 类中替换了 Px 类的用法,作为大型重构工作的一部分,仅依赖 Dp 和原始类型来表示像素参数 ( Iede0b)
- Modifier.indication 已添加到 foundation 包中。使用它在您自定义的可交互元素上显示按下/拖动/其他指示 ( I8425f,b/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 不会使用保存的实例状态恢复其滚动位置。 (Ia0fae,b/155075048)
- FocusManagerAmbient 已移除。使用 FocusModifier.requestFocus 来获取焦点。 (Ic4826)
- 表格布局暂时被移除,直到我们用更新的 API 重新提供它为止。 (Id88a7)
创建了 CanvasScope API,它包装了 Canvas 对象以公开无状态、声明式绘图 API 表面。变换包含在它们自己的接收器范围内,大小信息也被范围限定到相应的内插边界。它不需要消费者为配置绘图操作而维护自己的 Paint 状态对象。
添加了 CanvasScopeSample,以及更新了演示应用程序以包含声明式图形演示 ( Ifd86d)
ColoredRect 已被移除。请改用具有 drawBackground 修饰符的 Box ( I983c7,b/152753731)
在 TextField 中添加了光标颜色自定义 ( I6e33f)
现在可以通过使用 SoftwareKeyboardController 来隐藏/显示软件键盘,该控制器由 onTextInputStarted 回调传递 ( I8dc44,b/151860051)
与 TextField 一起使用的 TextFieldValue 现在可以像这样在活动重建时存活:
var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
(I5c3ce,b/155075724)在 Text() 中添加了常用的参数。如果您当前正在创建一个本地文本样式来传递少量这些参数,例如
Text(style = TextStyle(textAlign = TextAlign.Center))
,您现在可以直接提供参数:Text(textAlign = TextAlign.Center)
(I82768)用 FocusNode 替换了 CoreTextField/TextField focusIdentifier 参数,以便与焦点子系统集成。 (I7ea48)
TextField 更新 - 在水平方向上,它将占用授予它的所有可用空间 ( Ib08df,b/154638552)
添加了 InteractionState 和 Interaction,使构建对 UI 状态更改(如按下和拖动)做出反应的组件变得更加容易 ( Icfe25,b/152525426)
RectangleShape 从 androidx.ui.foundation.shape.* 移动到 androidx.ui.graphics.* ( Ia74d5,b/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 产生相同的结果 ( I45f09,b/152842521)
删除了 ProvideContentColor,请改用 ContentColorAmbient 直接与
Providers
一起使用 ( Iee942)在文本中添加了颜色参数,允许覆盖文本样式的颜色,而无需手动与主题中提供的样式合并。 (I41a66)
改进 DrawModifier API
- 将 draw() 的接收器范围设为 ContentDrawScope
- 删除了 draw() 上的所有参数
- DrawScope 与以前的 CanvasScope 具有相同的接口
- ContentDrawScope 具有 drawContent() 方法(Ibaced,b/152919067)
ColoredRect 已被弃用。请改用
Box(Modifier.preferredSize(width, height).drawBackground(color))
。 (I499fa,b/152753731)形状主题系统已根据 Material Design 规范更新。现在,您可以提供小型、中型和大型形状供大多数组件使用 (Ifb4d1)
用工厂扩展函数替换 Modifier 加运算符 (I225e4)
Draggable 已移至修饰符 (Id9b16,b/151959544)
将
Text
从 androidx.ui.core 移动到 androidx.ui.foundation 包中。 (I87ce5)向 Checkbox、Switch 和 Toggleable 添加
enabled
参数 (I41c16)Ripple 现在是 Modifier。虽然 Clickable 尚未转换,但建议的用法是
Clickable(onClick = { ... }, modifier = ripple())
(Ie5200,b/151331852,b/150060763)添加了 VectorPainter API 以替换用于矢量图形的现有子合成 API。子合成的结果是 VectorPainter 对象,而不是 DrawModifier。弃用以前的 DrawVector 可组合项,以支持 VectorPainter。
将
Image(Painter)
API 重命名为PaintBox(Painter)
。创建了 Vector 可组合项,其行为类似于 Image 可组合项,但使用的是 VectorAsset 而不是 ImageAsset (I9af9a,b/149030271)创建了 Image 可组合项来处理大小/布局,以及将给定的 ImageAsset 绘制到屏幕上。此可组合项还支持绘制任何任意 Painter 实例,同时尊重其内在大小,以及支持给定的固定大小或最小大小 (Ibcc8f)
Button、FloatingActionButton 和 Clickable 现在都有一个单独的
enabled
参数。Button 上的一些参数已重命名或重新排序。 (I54b5a)将 Image 重命名为 ImageAsset,以便更好地区分 Image 数据和即将推出的 Image 可组合项(用于参与布局和绘制内容)。
在 android.graphics.Bitmap 上创建了扩展方法
Bitmap.asImageAsset()
,用于创建 ImageAsset 的实例,这对于将传统的 Android 应用程序开发与 Compose 框架结合起来很有用。 (Id5bbd)删除了 DrawImage 可组合项。使用 ImagePainter 在现有布局上绘制图像,或使用 SimpleImage 来引入占据空间的 Image (I595e1,b/149827027)
Stack 组件支持从右到左的方向性 (Ic9e00)
添加了 Icon、IconButton 和 IconToggleButton,并删除了 AppBarIcon。您可以直接将 AppBarIcon 的现有用法替换为 IconButton,它们现在将具有正确的触摸目标。有关使用方法的信息,请参见示例,并参见 Icons 以了解您可以直接与这些组件一起使用的 Material Icons。 (I96849)
删除了 DrawShape 可组合项。请改用 DrawBackground 修饰符。 (I7ceb2)
添加了 AdapterList,这是一种滚动列表组件,它只合成和布局可见的项目。目前已知的问题包括它只支持垂直滚动,并且不会完全处理对子项更改的所有情况。 (Ib351b)
已添加 Scrollable 组件,它允许创建自定义滚动器/列表 (I5fd37)
将 background 重命名为 DrawBackground,并将其默认设置为记忆 (Ia0bd3)
向 Box 添加 padding、边框、形状和 background 参数 (I05027,b/148147281)
添加了 Canvas 组件。此可组合项占据一定大小(由用户提供),并允许您使用 CanvasScope 绘制 (I0d622)
将
Border
修饰符重命名为DrawBorder
(I8ffcc)添加了 Box 组件,用于组合布局和绘制常用功能。 (I6e2a7)
滚动器现在展示原生 Android 抛掷运动行为。 (I922af,b/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)
已添加 (I94985,b/157133803)删除了 Row 和 Column 中已弃用的 RowAlign、ColumnAlign。 (If60d4,b/155858731)
删除了已弃用的 LayoutTag(),请改用 Modifier.tag()。删除了已弃用的 Modifier.matchParent(),请改用 Modifier.matchParentSize()。 (If8044)
添加了 offsetPx 布局修饰符,它可用于定义(动态)偏移量(以像素为单位)。 (I5af57)
AlignmentLineOffset 可组合项已弃用,请改用 relativePaddingFrom() 修饰符。CenterAlignmentLine 可组合项已删除。 (I60107)
添加了 defaultMinSizeConstraints 布局修饰符,它仅在传入的对应约束未指定(最小约束为 0,最大约束为无穷大)时将大小约束设置为包装布局。 (I311ea,b/150460257)
Container 已删除。请改用 Box (Ibbc2b,b/151407926)
删除了已弃用的 LayoutWidth/Height/Size 修饰符。 (Ib0bc1)
为 offset 修饰符添加了默认参数值。 (I37f06)
添加了对称 padding 修饰符。 (I39840)
删除了已弃用的 LayoutAspectRatio 修饰符。 (I65a74)
删除了已弃用的 LayoutAlign 修饰符。 (I10877)
修复了 width 和 height 修饰符中的一个错误,该错误导致包装布局在没有相反轴约束的情况下进行测量。 (I210b8,b/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。 (I675ce,b/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 (I46919,b/160822875,b/160922136)
runOnIdleCompose
重命名为runOnIdle
(I83607)- 几个测试 API 进行了重命名,以使其更加直观。所有 findXYZ API 都重命名为 onNodeXYZ。所有 doXYZ API 都重命名为 performXYZ。(I7f164)
- 删除了以前弃用的 Modifier.ripple。Clickable 现在使用 ripple 作为默认指示(如果您的应用程序中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用 clickable 即可免费获得 ripple 指示。如果您需要自定义 ripple 的颜色/大小/边界参数,您可以手动创建一个 RippleIndication 并将其作为指示参数传递给 clickable。(I663b2, b/155375067)
- 删除了过时的尺寸测试 API。(Iba0a0)
- 使 LayoutNode 成为实验性 API (I4f2e9)
- Compose 中实现了滚动方向锁定版本 1。(I1ce7a, b/150289741)
- 弹出窗口、对话框和菜单现在继承了上下文 MaterialTheme (Ia3665, b/156527485)
- 从 Layout() 函数的测量块中删除了布局方向参数。但是,布局方向可通过测量范围对象在回调中使用。(Ic7d9d)
- 添加 AbsoluteArrangement - 允许在 Row 中排列子项,而不会在 RTL 中自动镜像。(I3a1df)
- @Untracked 注释已被弃用。用 @ComposableContract(tracked=false) 替换。(Id211e)
- 在此更改之前,如果存在(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)
runOnIdleCompose
和runOnUiThread
现在是全局函数,而不是 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 已弃用。改为使用
setContent
或setViewContent
。Compose.disposeComposition 已弃用。改为使用setContent
返回的Composition
上的dispose
方法。androidx.compose.Compose.subcomposeInto 已移至 androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt 已重命名为 ComponentNode#insertAt ComponentNode#emitRemoveAt 已重命名为 ComponentNode#removeAt ComponentNode#emitMode 已重命名为 ComponentNode#move (Idef00)弃用 Wrap 可组合函数。它可以使用 LayoutAlign 修饰符或 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)