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