Compose Foundation
最新更新 | 稳定版本 | 发布候选版本 | Beta 版本 | Alpha 版本 |
---|---|---|---|---|
2025 年 6 月 4 日 | 1.8.2 | - | - | 1.9.0-alpha04 |
结构
Compose 是 androidx
中 7 个 Maven Group Id 的组合。每个 Group 都包含功能的目标子集,每个子集都有自己的一组版本说明。
此表解释了这些 Group 并链接到每组版本说明。
Group | 描述 |
---|---|
compose.animation | 在其 Jetpack Compose 应用中构建动画,以丰富用户体验。 |
compose.compiler | 使用 Kotlin 编译器插件转换 @Composable 函数并启用优化。 |
compose.foundation | 使用现成的构建块编写 Jetpack Compose 应用,并扩展 Foundation 以构建您自己的设计系统组件。 |
compose.material | 使用现成的 Material Design 组件构建 Jetpack Compose 界面。这是 Compose 的更高级别入口点,旨在提供与 www.material.io 中描述的组件相匹配的组件。 |
compose.material3 | 使用 Material Design 3 组件构建 Jetpack Compose 界面,这是 Material Design 的下一个演进。Material 3 包含更新的主题和组件以及 Material You 个性化功能(如动态颜色),旨在与新的 Android 12 视觉样式和系统 UI 保持一致。 |
compose.runtime | Compose 编程模型和状态管理的基础构建块,以及 Compose 编译器插件的核心运行时目标。 |
compose.ui | 与设备交互所需的 compose UI 基本组件,包括布局、绘图和输入。 |
声明依赖项
要添加对 Compose 的依赖项,您必须将 Google Maven 代码库添加到您的项目。请阅读Google Maven 代码库了解更多信息。
在您的应用或模块的 build.gradle
文件中添加您所需构件的依赖项
Groovy
dependencies { implementation "androidx.compose.foundation:foundation:1.8.2" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.foundation:foundation:1.8.2") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现了新问题或对改进此库有想法,请告知我们。在创建新问题之前,请查看此库中的现有问题。您可以通过点击星形按钮为您感兴趣的现有问题投票。
有关更多信息,请参阅问题跟踪器文档。
版本 1.9
版本 1.9.0-alpha04
2025 年 6 月 4 日
androidx.compose.foundation:foundation-*:1.9.0-alpha04
发布。版本 1.9.0-alpha04 包含这些提交。
API 变更
PrefetchScheduler
和自定义已被弃用,取而代之的是自动完成所有工作的内部实现。( I3a9a6, b/420551535 )- 已更新
Scrollable2DState
,使其在canScroll
方法中使用偏移量而不是角度。( I28694, b/417268474 ) - 将
AnnotatedOutputTransformation
中的addAnnotation
替换为addStyle
。( I91c6f, b/417991824 ) - 稳定了
LazyLayout
。( If5db4 ) - 稳定了
LazyLayoutPrefetchState
的空构造函数及其调度方法schedulePrecomposition
和schedulePrecompositionAndPremeasure
。( I4362f, b/252853717 ) - 在 Android 上引入了
ProcessTextKey
,用于为PROCESS_TEXT
intent 操作添加的上下文菜单项。( If0ac4 ) - 将上下文菜单 API 公开。暴露了
Modifier.addTextContextMenuComponents
和Modifier.filterTextContextMenuComponents
以添加和删除上下文菜单中的项。此外,还将以下基本 API 公开,以便构建自定义上下文菜单TextContextMenuProvider
TextContextMenuDataProvider
TextContextMenuData
TextContextMenuComponent
LocalTextContextMenuDropdownProvider
LocalTextContextMenuToolbarProvider
( I1b7b0 )
- 使
LazyLayoutItemProvider
稳定 (Icce09, b/261565751) - 引入了 Android 智能选择功能,可通过
ComposeFoundationFlags.isSmartSelectionEnabled
启用/禁用。它还公开了一个静态compositionLocal
LocalTextClassifierCoroutineContext
,可用于指定启动TextClassification
作业的CoroutineContext
。( I1dbaa, b/139321320 )
版本 1.9.0-alpha03
2025 年 5 月 20 日
androidx.compose.foundation:foundation-*:1.9.0-alpha03
发布。版本 1.9.0-alpha03 包含这些提交。
API 变更
- 添加了
AnnotatedOutputTransformation
,提供了一种在渲染前向TextField
添加注释的方式。( Ibc6f0, b/389978748 ) - 引入
LazyLayoutMeasurePolicy
并使LazyLayoutMeasureScope
稳定。( I8c5df, b/252853717 ) BasicSecureTextField
现在提升了其内部BasicTextField
的 ScrollState。( I6e576 )- 引入了
Modifier.onFirstVisible
和Modifier.onVisibilityChanged
修饰符,这些是基于Modifier.onLayoutRectChanged
构建的高级修饰符。这些修饰符专门用于处理许多常见的应用需求,例如日志记录展示、自动播放视频等。这些修饰符在构建时考虑了性能,因此可以在关键的基于列表的场景中使用,而不会牺牲滚动性能。除了这些修饰符 API,还向RelativeLayoutBounds
添加了额外的 API,以支持这些用例,并使开发者更容易轻松创建适合其用例的类似自定义修饰符。( I759b8 ) - 引入了具有触控阈值和方向锁定控制的
detectDragGestures
重载。( Iadb0d ) - 引入
Modifier.scrollable2D
、Scrollable2DState
以及用于状态创建的配套 API。此外还引入了常见的滚动扩展函数。( Ic61c8, b/214410040 ) - Compose 的 64 位颜色值无法直接与 Android
ColorLongs
进行比较,因为某些颜色空间的颜色空间 ID 顺序不对。为了与 Android 颜色空间相互转换,添加了两个新的 API:toColorLong()
和fromColorLong()
。( I36899 )
Bug 修复
- 从
SelectionContainer
中多个 Text 可组合项复制的文本现在将在来自不同 Text 可组合项的文本之间添加换行符\n
。( I25332, b/285036739 )
版本 1.9.0-alpha02
2025 年 5 月 7 日
androidx.compose.foundation:foundation-*:1.9.0-alpha02
发布。版本 1.9.0-alpha02 包含这些提交。
API 变更
- 修复了在
DragGestureNode
中将指针输入更改添加到VelocityTracker
的方式,这可以通过新的标志isOffsetPositionBeforeAddingToVelocityTrackerEnabled
控制。( Ic7992, b/292556787, b/236451818 ) - 将
await[Vertical/Horizontal]PointerSlopOrCancellation
公开 (I6968b, b/298903681) AbstractComposeView.consumeWindowInsets
现在默认为 false。WindowInsets
在设置为 false 时会自动根据子项大小和位置进行调整,因此不再需要将其默认设置为 true。这解决了子视图默认不接收WindowInsets
更新的问题。开发者可以通过将实验性标志ComposeFoundationLayout.isWindowInsetsDefaultPassThroughEnabled
设置为 true 来选择退出更新,或者(更推荐的方式)通过在所有 Compose 视图实例上将AbstractComposeView.consumeWindowInsets
设置为 true 来选择退出更新。( I6fa0a, b/411868840 )
外部贡献
- 修复了 Pager 在 beyondViewportPageCount 值非常大时崩溃的问题 (Idb2db)
版本 1.9.0-alpha01
2025 年 4 月 23 日
androidx.compose.foundation:foundation-*:1.9.0-alpha01
发布。版本 1.9.0-alpha01 包含这些提交。
行为变更
Compose 附带的 Lint 检查现在要求最低 AGP 版本为 8.8.2。如果无法升级 AGP,可以使用
android.experimental.lint.version=8.8.2
(或更新版本)在gradle.properties
中单独升级 Lint。要在 IDE 中运行 Compose Lint 检查,需要 Android Studio Ladybug 或更高版本。重大变更:不带 Indication 参数的
clickable
、combinedClickable
、selectable
、toggleable
和triStateToggleable
重载现在仅支持使用LocalIndication
提供的IndicationNodeFactory
实例。当您使用此版本的 Compose 重新编译这些修饰符的用法时,此变更将生效。二进制/传递性依赖项不受影响。如果您向LocalIndication
提供了已弃用的 Indication 实现,并使用这些 API,这将在运行时导致崩溃。此行为变更旨在提高性能,并允许使用这些修饰符的 Composable 函数在重新组合期间跳过。您可以使用ComposeFoundationFlags.isNonComposedClickableEnabled=false
暂时选择退出此行为变更,以便在未被此迁移阻止的情况下升级 Compose。此标志将在一个稳定版本后移除。要解决此问题,请迁移任何已弃用的 Indication 实现,转而使用IndicationNodeFactory
。您还可以使用带有显式 Indication 参数的重载 - 这些重载将继续支持非IndicationNodeFactory
的 Indication 实例,但出于性能原因不推荐这样做。( I6bcdc, b/316914333 )
API 变更
- 引入用于通过
AnnotatedString
创建自定义项目符号列表的 API (I1d066, b/383269496, b/139326648) - 允许 Compose 触发
ViewTreeObserver.OnScrollChanged
。此行为在标志isOnScrollChangedCallbackEnabled
下引入。我们还引入了DelegatableNode dispatchOnScrollChanged
的扩展函数。( I34b9d, b/238109286 ) - 与 Kotlin 2.0 一起发布的项目需要 KGP 2.0.0 或更高版本才能使用 (Idb6b5)
- 添加了对
TextFieldState
的 Lint 检查支持,以确保它在组合中被记住。考虑使用rememberTextFieldState
代替。( I53d74 ) - 添加了对
FocusRequester
的 Lint 检查支持,以确保它在组合中被记住 (I6bf91) - 添加了对
BringIntoViewRequester
的 Lint 检查支持,以确保它在组合中被记住。( Ibfba6 ) - 为网格和列表策略中的
schedulePrefetch
调用引入了作用域,以与LazyListPrefetchState
提供大小和索引信息的能力保持一致。( Iad80c ) - 重大变更:不带 Indication 参数的
clickable
、combinedClickable
、selectable
、toggleable
和triStateToggleable
重载现在仅支持使用LocalIndication
提供的IndicationNodeFactory
实例。当您使用此版本的 Compose 重新编译这些修饰符的用法时,此变更将生效。二进制/传递性依赖项不受影响。如果您向LocalIndication
提供了已弃用的 Indication 实现,并使用这些 API,这将在运行时导致崩溃。此行为变更旨在提高性能,并允许使用这些修饰符的 Composable 函数在重新组合期间跳过。您可以使用ComposeFoundationFlags.isNonComposedClickableEnabled=false
暂时选择退出此行为变更,以便在未被此迁移阻止的情况下升级 Compose。此标志将在一个稳定版本后移除。要解决此问题,请迁移任何已弃用的 Indication 实现,转而使用IndicationNodeFactory
。您还可以使用带有显式 Indication 参数的重载 - 这些重载将继续支持非IndicationNodeFactory
的 Indication 实例,但出于性能原因不推荐这样做。( I6bcdc, b/316914333 ) - 引入了控制自动嵌套预取行为的标志:
isAutomaticNestedPrefetchEnabled
(I8d448) - 引入了接受
LazyLayoutCacheWindow
的LazyGridState
和rememberLazyGridState
的重载。( I51151 ) - 添加了 Window Insets 的 Ruler。添加了
DerivedRuler
以允许从另一个 Ruler 计算 Ruler。修改了PlacmentScope
以实现 Density。( I658bc, b/359260964 ) - 添加了一个零参数
WindowInsets()
工厂函数,以轻松创建空的WindowInsets
。( I65f62, b/395311689 ) - 添加了
PaddingValues.Zero
用于表示空的PaddingValues
。( If193e, b/386255688 )
Bug 修复
BasicTextField
的state
重载将在其大小改变时保持光标滚动到视图内。( I0eb41, b/406187741 )- 更新了
LazyListPrefetchStrategy
和LazyGridPrefetchStrategy
中的onVisibleItemsUpdated
API,以通知初始状态。( If2cfa )
版本 1.8
版本 1.8.2
2025 年 5 月 20 日
androidx.compose.foundation:foundation-*:1.8.2
发布。版本 1.8.2 包含这些提交。
Bug 修复
- 引入了一项修复,可防止计算用于焦点搜索的项数导致除以零。将检查应用于所有使用
LazyLayoutBeyondBoundsState
的布局。( 8e6dc8 )
版本 1.8.1
2025 年 5 月 7 日
androidx.compose.foundation:foundation-*:1.8.1
发布。版本 1.8.1 包含这些提交。
Bug 修复
- 修复了
BasicText
和TextAutoSize
中的一个错误,其中使用TextOverflow.Ellipsize
会导致文本小于最佳大小。( I1e1d8, b/396582066 ) - 修复了
BasicTextField
中的一个错误,该错误在TextFieldDecorator
跳过调用innerTextField
时导致了各种崩溃。( I2638c ), b/308398612 - 修复了
TextField
中的一个错误,该错误在TextFieldState
实例更改时导致文本工具栏和选择手柄完全消失。( I8068a ), b/390477786 - 修复了
BasicText
中的一个错误,该错误在textAlign
设置为非默认值时,更改最小宽度约束不会更新文本位置。( I77a96 ), b/406305552
版本 1.8.0
2025 年 4 月 23 日
androidx.compose.foundation:foundation-*:1.8.0
发布。版本 1.8.0 包含这些提交。
版本 1.8.0-rc03
2025 年 4 月 9 日
androidx.compose.foundation:foundation-*:1.8.0-rc03
发布。版本 1.8.0-rc03 包含这些提交。
版本 1.8.0-rc02
2025 年 3 月 26 日
androidx.compose.foundation:foundation-*:1.8.0-rc02
发布。版本 1.8.0-rc02 包含这些提交。
版本 1.8.0-rc01
2025 年 3 月 12 日
androidx.compose.foundation:foundation-*:1.8.0-rc01
发布。版本 1.8.0-rc01 包含这些提交。
版本 1.8.0-beta03
2025 年 2 月 26 日
androidx.compose.foundation:foundation-*:1.8.0-beta03
发布。版本 1.8.0-beta03 包含这些提交。
Bug 修复
- 添加了一个新的语义属性
InputText
,该属性捕获应用输出转换之前的文本字段值。( Iae46a, b/395911609, b/176949051 ) - 移除了已弃用的
AutoSize
重载。请使用提供相同功能的TextAutoSize
API。( I2c90f ) - 修复了
TextAutoSize
的缓存问题,其中使用相同约束进行第二次布局传递可能导致使用次大的合适字体大小,而不是最大的。( Id367f )
版本 1.8.0-beta02
2025 年 2 月 12 日
androidx.compose.foundation:foundation-*:1.8.0-beta02
发布。版本 1.8.0-beta02 包含这些提交。
Bug 修复
- 修复了使用
LayoutModifierNode
实现的 overscroll 在滚动容器内无法正常工作的问题。
版本 1.8.0-beta01
2025 年 1 月 29 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-beta01
。版本 1.8.0-beta01 包含 这些提交。
API 变更
SemanticsNodeInteraction.semanticsId()
已被移除。请改用SemanticsNodeInteraction.fetchSemanticsNode().id
。(Ie397a)- 重写
requestAutofill
API,使其存在于 autofill manager 之外。(Id1929) ContextualFlowRow
和ContextualFlowColumn
已被标记为已弃用。此实验性组件在 1.7 中引入,尚未稳定,且其实现已被认为不理想。将来可能会提供一个用于解决这些组件旨在解决的用例的组件。FlowRow
和FlowColumn
具有在 1.7 中引入的实验性重载,其中包含一个overflow
参数。此参数的使用已被弃用,可以改用不带此参数的重载。这些重载的默认“overflow”行为将是“Clip”,这与自引入以来的行为一致。ContextualFlowRow
的许多用例都可以使用FlowRow
实现,但我们承认这并非完全普遍适用。ContextualFlowRow
在用户空间中完全可实现,如果需要,可以尝试复制其实现并进行调整。将来,我们希望以不同的方式解决这些用例。(Ibafec)
Bug 修复
- 修复了带有省略号的文本布局在动画期间有时会错误转换的问题,详情请参阅 b/389707025(Ie55b1,b/389707025)
- 修复了
BasicText
在TextAutoSize
和maxLines
都设置为 1 时的一个错误。(Ic0450,b/376834366) - 文本的最小固有高度现在会考虑
minLines
参数。这意味着报告的最小固有高度不会小于满足minLines
参数所需的高度。(I225f9,b/388299762)
版本 1.8.0-alpha08
2025 年 1 月 15 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha08
。版本 1.8.0-alpha08 包含 这些提交。
API 变更
- AutoSize: 将
AutoSize
重命名为TextAutoSize
,并发布了允许创建自定义TextAutoSize
实现的 API。请参阅TextAutoSizeSample
了解自定义文本自动大小实现的示例。(I85756) - 将
DetectTapGesturesEnableNewDispatchingBehavior
功能标志移至ComposeFoundationFlags
并重命名为isDetectTapGesturesImmediateCoroutineDispatchEnabled
。旧标志已弃用,现在将委托给ComposeFoundationFlags.isDetectTapGesturesImmediateCoroutineDispatchEnabled
。(I62932)
Bug 修复
- 默认启用
DetectTapGesturesEnableNewDispatchingBehavior
。TapGestureDetector
API 现在默认使用新的调度行为(即时调度)。(I9f2bc,b/369648479) - 修复了
requiredWidth/Height/Size
修饰符以正确处理固有尺寸。(Ie3d7d,b/368113212)
外部贡献
- 将 foundation 中的
BasicTooltip
和 material3 中的BasicTooltip/Tooltip
进行通用化。(Ifc2e6) - 添加了一个新的 Clipboard 接口和一个用于它的组合局部变量。(I80809)
版本 1.8.0-alpha07
2024 年 12 月 11 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha07
。版本 1.8.0-alpha07 包含 这些提交。
API 变更
- 删除了
ComposeFoundationFlags.RemoveBasicTextGraphicsLayerEnabled
标志,该标志曾用于回滚从BasicText
中移除内部graphicsLayer
的操作。如果您正在使用此标志,请通过提交错误报告告知我们原因。您也可以直接在调用BasicText
时传入Modifier.graphicsLayer()
以实现之前的行为。(Id9f90) - 为新的
stickyHeader
DSL 添加了默认实现。(I68986) - 使
LocalAutofillHighlightColor
组合局部变量使用 Color 类型。(I0e05b) - 将
OverscrollEffect#withoutDrawing
重命名为OverscrollEffect#withoutVisualEffect
。(I1a154)
Bug 修复
- 对
AnchoredDraggable
的目标计算中一个问题的后续修复,该问题可能导致在特定滑动时停留在错误的锚点。(I23b87,b/367660226)
外部贡献
- 将
BringIntoViewResponderModifierNode
添加到 UI,这提供了一种实现 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) - 将 Autofill manager 更改为一个接口。(I84914,b/376080755)
- 添加了
OverscrollEffect#withoutDrawing
和OverscrollEffect#withoutEventHandling
API - 这些 API 创建提供的 overscroll 效果的包装实例,分别不进行绘制/处理事件,这允许在与事件分发组件分离的单独组件中渲染 overscroll。例如,禁用在惰性列表内部绘制 overscroll,然后在顶部/其他位置单独绘制 overscroll。(Idbb3d,b/266550551,b/204650733,b/255554340,b/229537244) - 在文本工具栏中添加 autofill 支持。(Ie6a4c)
- 弃用了
OverscrollConfiguration
和LocalOverscrollConfiguration
,并添加了rememberPlatformOverscrollFactory
以创建/自定义默认 overscroll 实现的参数。要禁用 overscroll,请使用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,允许在层级结构中配置 overscroll。通过LocalOverscrollFactory
提供的值将默认用于创建一个OverscrollEffect
。要从当前提供的工厂创建并记住一个效果,请使用rememberOverscrollEffect()
。(I51ca4,b/255554340)
API 变更
- 引入了
CompositionLocal
,可用于修改 Autofill 成功填充高亮显示的色调。(I32092) - 移除了
ScrollableDefaults.overscrollEffect
- 您应该改用rememberOverscrollEffect
。这将根据通过LocalOverscrollFactory
提供的当前 overscroll 实现创建一个实例。(I1651a,b/255554340),(b/234451516) - 引入了新的
AutofillManager
接口,可用于微调用户的 Autofill 流程,以及一个isSemanticAutofillEnabled
标志来启用此新版本的 Autofill。(I9d484) - 移除了
CombinedClickableNode
。此实验性 API 曾为解除性能瓶颈而临时暴露,但现已不再需要。您应像使用其他修饰符 API 一样直接使用Modifier.combinedClickable
。(I4b658) - 为
horizontalScroll
、verticalScroll
、LazyColumn
、LazyRow
、LazyHorizontalGrid
、LazyVerticalGrid
、LazyHorizontalStaggeredGrid
、LazyVerticalStaggeredGrid
、HorizontalPager
和VerticalPager
添加了重载,支持指定自定义OverscrollEffect
。提供的OverscrollEffect
将接收事件,并在这些组件的边界内渲染。请注意,不支持两次绘制同一个OverscrollEffect
- 因此,您不能使用Modifier.overscroll
单独绘制提供给其中一个组件的同一个OverscrollEffect
。在这些组件边界之外绘制 overscroll 的用例将在未来单独处理。(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) - Paragraph 和
ParagraphIntrinsics
现在接受应用于AnnotatedString
的所有注解列表,而之前只包含SpanStyles
列表。(I12f80) - 引入了
PointerInputModifierNode#touchBoundsExpansion
,可用于扩大单个指针输入修饰符的触摸边界。(Iccf02,b/335339283)
Bug 修复
- 修复了在某些情况下传递给
AnchoredDraggableDefaults.flingBehavior
的位置阈值未被正确考虑的问题。(Ifdf0d,b/367660226) - 引入了针对在进行中的 fling 期间从节点树中移除的嵌套滚动容器的修复。现在,这些节点将取消 fling 并正确发送包含剩余速度的
onPostFling
事件。我们还引入了NewNestedScrollFlingDispatchingEnabled
标志,用于在出现回归时控制行为。该标志将在 beta 版本之前移除。(I05c37,b/371168883) - 修复了传递给
Modifier.anchoredDraggable
的OverscrollEffects
会接收 2D 增量而不是 1D 增量的问题。(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) - 引入了一种新的 Semantics Role,名为 Carousel,用于在 Pagers 中模拟列表行为以供无障碍服务使用。(Id354b,b/354109776,b/239672673)
- 移除了
BasicText
可组合项中隐式的graphicsLayer
修饰符。添加了实验性标志ComposeFoundationFlags.RemoveBasicTextGraphicsLayerEnabled
,以便能够恢复旧的行为。(Ie478d) - 添加了
Modifier.recalculateWindowInsets()
,允许层级结构中的子项使用insetsPadding
,即使父项在对齐时未使用consumeWindowInsets()
。(I7f9e4)
Bug 修复
- 在
detectDragGestures
、可拖动项和可滚动项中实现了手势拾取。现在,如果子级可拖动项放弃某个手势,父级有机会拾取它。这使得手势处理更加连续和集成。(Ic88fe) - 更新了可滚动项中的 fling 取消行为。现在,如果可滚动项进行 fling 并触及边界,它将正确地将 fling 速度传递给链中的下一个可滚动项,而不是继续驱动 fling。(I9326a)
版本 1.8.0-alpha02
2024 年 9 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha02
。版本 1.8.0-alpha02 包含 这些提交。
API 变更
TextOverflow.StartEllipsis
和TextOverflow.MiddleEllipsis
现已可用,允许将省略号放置在单行文本的开头或中间。(I38913,b/185418980)
版本 1.8.0-alpha01
2024 年 9 月 4 日
发布了 androidx.compose.foundation:foundation-*:1.8.0-alpha01
。版本 1.8.0-alpha01 包含 这些提交。
版本 1.7
版本 1.7.8
2025 年 2 月 12 日
发布了 androidx.compose.foundation:foundation-*:1.7.8
。版本 1.7.8 包含 这些提交。
Bug 修复
- 修复了在
BasicTextField
中使用输入转换功能替换部分粘贴文本时发生的崩溃。(I73702)
版本 1.7.7
2025 年 1 月 29 日
发布了 androidx.compose.foundation:foundation-*:1.7.7
。版本 1.7.7 包含 这些提交。
Bug 修复
已知错误
- 发现了一个错误,在 Android API Level 35 的罕见场景下可能导致文本意外换行。此问题无法在 1.7 中修复,将在 1.8 中修复。(b/391378120)
版本 1.7.6
2024 年 12 月 11 日
发布了 androidx.compose.foundation:foundation-*:1.7.6
。版本 1.7.6 包含 这些提交。
Bug 修复
- 修复了文本内嵌内容对无障碍服务不可见的问题。
- 修复了
AndroidEmbeddedExternalSurface
在惰性列表中重复使用时无法正确重置并卡住的问题。
版本 1.7.5
2024 年 10 月 30 日
发布了 androidx.compose.foundation:foundation-*:1.7.5
。版本 1.7.5 包含 这些提交。
Bug 修复
- 确保固定项在内容填充区域不会被两次子组合。(Ic6224)
版本 1.7.4
2024 年 10 月 16 日
发布了 androidx.compose.foundation:foundation-*:1.7.4
。版本 1.7.4 包含 这些提交。
Bug 修复
- 修复了导致文本字段在罕见情况下崩溃的错误。(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 修复
- 修复了在
BasicText
中当 minLines 设置为非默认值时发生的内存泄漏。
版本 1.7.2
2024 年 9 月 18 日
发布了 androidx.compose.foundation:foundation-*:1.7.2
。版本 1.7.2 包含 这些提交。
Bug 修复
- 修复了可拖动项缺少 down 事件导致 fling 看起来比正常慢的问题。
版本 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 相比,这带来了性能更高的 Indication 实现。有关迁移信息,请参阅 developer.android.com。 clickable
/combinedClickable
/selectable
/toggleable
现在接受可为空的MutableInteractionSource
参数。如果为 null,并且提供的 Indication 是IndicationNodeFactory
,则 Indication 只在需要时惰性创建,从而提高性能。如果您不提升和使用MutableInteractionSource
,建议传递 null 而不是传递remember { MutableInteractionSource() }
。Indication#rememberUpdatedInstance
已被弃用。它具有较高的不可避免的性能开销,并阻碍了其他优化。您应该改用新的IndicationNodeFactory
API。
- 添加了新的 Indication API,
- 使用
TextFieldState
的BasicTextField
现在已稳定,我们建议所有调用点开始从BasicTextField(value, onValueChange)
迁移到BasicTextField(TextFieldState)
。 ClickableText
已被弃用。要为您的文本添加可点击链接,请在AnnotatedString
中使用新的LinkAnnotation
注解来使用BasicText
。LinkAnnotation
允许根据链接状态(例如,聚焦、悬停)进行自定义样式设置。- 引入了带有
MaxLines
和Overflow
的ContextualFlowRow
和Enhanced FlowRow/Column
。我们很高兴地宣布对实验性FlowRow
和FlowColumn
进行了增强,现支持maxLines
和 overflow,同时首次推出了ContextualFlowRow
和ContextualFlowColumn
。此次更新旨在提供性能最优的组件,其中ContextualFlow*
非常适合使用少量 maxLines 配置和动态 +N 查看更多按钮的大量项目,而FlowRow
和FlowColumn
非常适合少量项目(少于 100 项)。重要提示:要保持FlowRow
或FlowColumn
中现有行为,即无论所有项目是否符合交叉轴最大值都进行组合,请在初始化时将 overflow 设置为FlowRowOverflow.Visible
或FlowColumnOverflow.Visible
。请查看ContextualFlowRowSample
和FlowRowSample
以获取这些新功能的示例。(Ib9135,b/293577082) - 在
LazyColumn
和LazyRow
中添加了项的出现和消失动画支持。之前可以通过添加Modifier.animateItemPlacement()
修饰符来支持位置(重新排序)动画。我们弃用了此修饰符,并引入了一个新的非实验性修饰符Modifier.animateItem()
,它允许您支持所有三种动画类型:出现(淡入)、消失(淡出)和重新排序。(I2d7f7,b/150812265) - 使用官方 Android API (
ScrollCaptureCallback
) 在 Compose 滚动容器中实现了长截图的实验性支持。 NestedScroll
来源 Drag 和 Fling 正在被UserInput
和SideEffect
取代,以适应这些来源的扩展定义,这些定义现在包括动画(Side Effect)以及鼠标滚轮和键盘(UserInput
)。LazyLayout
预取请求现在可以标记为紧急,这意味着我们预计下一帧将需要此项,并且希望忽略帧预算以确保提前完成更多工作。(Id513f)- 在 Android U 及更高版本设备上支持手写笔手写功能。(I002e4)
- 多个 API 已升级为稳定版本
- Pagers、 snapping、window insets
版本 1.7.0-rc01
2024 年 8 月 21 日
发布了 androidx.compose.foundation:foundation-*:1.7.0-rc01
。版本 1.7.0-rc01 包含 这些提交。
Bug 修复
- 修复了一个回归问题,即当任何元素在一个可聚焦(或可点击)但被禁用的父级内部聚焦时会发生崩溃。(b/317561689)
版本 1.7.0-beta07
2024 年 8 月 7 日
androidx.compose.foundation:foundation-*:1.7.0-beta07
已发布。1.7.0-beta07 版本包含 这些提交。
Bug 修复
- 文本输入相关的
SemanticsNodeInteraction
函数performTextReplacement
、performTextInput
和performTextClearance
现在在对只读TextFields
调用时将抛出断言错误。(I4ae8f) - 修复了超链接中的视觉故障。(I23311)
- 修复了
contentReceiver
修饰符不适用于某些输入法的问题。 - 速度生成:防止 NaN 值在 Compose UI 和 Foundation 中传播。
1.7.0-beta06 版本
2024 年 7 月 24 日
androidx.compose.foundation:foundation-*:1.7.0-beta06
已发布。1.7.0-beta06 版本包含 这些提交。
1.7.0-beta05 版本
2024 年 7 月 10 日
androidx.compose.foundation:foundation-*:1.7.0-beta05
已发布。1.7.0-beta05 版本包含 这些提交。
Bug 修复
- 修复了
SnapFlingBehavior
和Pager
中 Nan 值的处理问题。
1.7.0-beta04 版本
2024 年 6 月 26 日
androidx.compose.foundation:foundation-*:1.7.0-beta04
已发布。1.7.0-beta04 版本包含 这些提交。
Bug 修复
- 避免在测量非常长的文本行(例如 1 万字符)时发生崩溃 (8157ab)
- 修复了测量非常长的文本导致新的
BasicTextField
中崩溃的问题 (6b7575) - 恢复了
Row
/Column
测量中的行为更改,该更改导致Text
在某些场景下无法正常使用 (69e8ba)
1.7.0-beta03 版本
2024 年 6 月 12 日
androidx.compose.foundation:foundation-*:1.7.0-beta03
已发布。1.7.0-beta03 版本包含 这些提交。
1.7.0-beta02 版本
2024 年 5 月 29 日
androidx.compose.foundation:foundation-*:1.7.0-beta02
已发布。1.7.0-beta02 版本包含 这些提交。
API 变更
- 添加了一个实验性 API,用于配置
LazyGrids
的预取行为,类似于现有的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
属性中移除了 'Default'。(I1d8a0) - 从
MarqueeDefaults
属性中移除了 'Marquee'。(Iad4f4) - 从
TextStyle
类中移除了TextLinkStyles
。相反,TextLinkStyles
现在是LinkAnntation
构造函数和AnnotatedString.fromHtml
方法的一部分。(I90b2b) - 修复了一个 bug,在该 bug 中,
Pager
在向边界滑动时会快速对齐 (snap),即使它已经停留在边界上。(I9f373, b/339171222) BTF2
现在具有正确的鼠标选择手势。(Ibe8c6)
外部贡献
- 重新提交 '使预取中的 compose/measure 时间计算基于内容类型以提高准确性' (Iea622)
- 使预取中的 compose/measure 时间计算基于内容类型以提高准确性 (Ibccb1)
- 使
WindowInsetsPadding
修饰符可从通用源集使用 (I070b2)
1.7.0-beta01 版本
2024 年 5 月 14 日
androidx.compose.foundation:foundation-*:1.7.0-beta01
已发布。1.7.0-beta01 版本包含 这些提交。
API 变更
- 为了二进制兼容性,添加回了
KeyboardOptions.shouldShowKeyboardOnFocus
属性作为隐藏的已弃用属性。(I15cfe) - 现在,当在 RTL 布局中使用时,
Modifier.anchoredDraggable
默认反转水平方向组件的拖动手势 delta 值。(I3c6d9) - 将
AnnotatedString.hasEqualsAnnotations
重命名为hasEqualAnnotations
。(I685c0) - 更新了用于在文本中获取 Material 主题链接的 API。具体来说,移除了
TextDefaults
中用于构建主题化LinkAnnotations
和解析带主题链接的 HTML 的方法。相反,添加了一个TextLinkStyles
类,允许将链接样式化作为参数传递给Text
可组合项。(I31b93) - 将
onDragStarted
和onDragStopped
替换为非挂起的回调。(I59de8)
Bug 修复
- 修复了一个 bug,在该 bug 中,当
contentPadding
大于传入的约束条件时,Pager
会崩溃。Pager
现在将从PageSize
返回的负值强制转换为 0。(Iba5d8, b/314008560)
1.7.0-alpha08 版本
2024 年 5 月 1 日
androidx.compose.foundation:foundation-*:1.7.0-alpha08
已发布。1.7.0-alpha08 版本包含 这些提交。
新功能
API 变更
LazyLayout
预取请求现在可以标记为紧急,这意味着我们预计下一帧将需要此项,并且希望忽略帧预算以确保提前完成更多工作。(Id513f)- 将
isPositionedByParentWithDirectManipulation
重命名为introducesFrameOfReference
。注意,现在其效果相反,这意味着默认情况下,大多数LayoutCoordinates
会引入一个参考系,并且只有在直接操作下放置时,该属性才为 false。要仅对引入参考系的元素查询位置,请使用positionInLocalFrameOfReference(...)
。或从LookaheadScope
使用positionInLocalLookaheadFrameOfReference
。(Ifc5f7) - 将
onClicked
重命名为onClick
(在LinkInteractionListener
内部)(Iaa35c) - 根据 API 委员会的反馈,更改了
getScrollViewportLength
的操作 lambda。(Ibc74a) - 重命名了手写笔手写委托 API。(Ica45f, b/327271923)
- 将
TextInclusionStrategy.isInside
重命名为isIncluded
。将Paragraph/MultiParagraph#getRangeForRect()
返回类型改为非空。(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
以及解析应用了MaterialTheme
到链接的 HTML 标记字符串的方法。(I98532, b/139312671) - 已向
LazyVerticalGrid
和LazyHorizontalGrid
添加了项出现和消失动画支持。以前,可以添加Modifier.animateItemPlacement()
修饰符以支持位置(重新排序)动画。我们已弃用此修饰符,并引入了一个新的非实验性修饰符Modifier.animateItem()
,该修饰符允许您支持所有三种动画类型:出现(淡入)、消失(淡出)和重新排序。(Ib7d12, b/330510929) - 已向
LazyVerticalStaggeredGrid
和LazyHorizontalStaggeredGrid
添加了项出现和消失动画支持。以前,可以添加Modifier.animateItemPlacement()
修饰符以支持位置(重新排序)动画。我们已弃用此修饰符,并引入了一个新的非实验性修饰符Modifier.animateItem()
,该修饰符允许您支持所有三种动画类型:出现(淡入)、消失(淡出)和重新排序。(I69bc9, b/330511290)
API 变更
- 添加了
ContextMenuColors
和相关的LocalContextMenuTheme
ProvidableCompositionLocal
。可以通过提供该 composition local 来修改文本字段和可选文本上的上下文菜单颜色。(Ifa154) - 文本链接除了正常样式、悬停和聚焦样式外,还添加了按下状态样式选项。(I5f864, b/139312671)
- 引入了
ViewConfiguration.HandwritingGestureLineMargin
用于手写笔手势。支持BasicTextField
的手写笔手势。(Ie6e13, b/325660505) - 对于 1.7 版本,移除了
DelegatableNode.scrollIntoView
,因为我们没有时间完成稳定其余相关 API 表面。该函数将在 1.8 版本中重新引入。(I6cf61, b/333421581, b/332900232) - 在查询
Layout
坐标时,您现在可以使用excludeDirectManipulationOffset
参数来排除使用Placeable.PlacementScope.withDirectManipulationPlacement
放置其子项的父级Layout
设置的偏移量。同样,一个频繁更改其子项位置的Layout
现在可以使用withDirectManipulationPlacement
放置它们(例如默认实现的Scroll
)。这有助于基于approachLayout
的动画更加直观,现在有机会区分在决定动画其接近方式时,哪些偏移量要进行动画,哪些要直接应用。 - 引入了
LazyStaggeredGrid
的requestScrollToItem
。对于每次测量过程,客户端现在可以通过调用requestScrollToItem
来选择不根据 key 维护索引。除非调用了requestScrollToItem
,否则这不会改变任何现有行为。(I63983) - 在
Pager
中引入了requestScrollToPage
。对于每次测量过程,客户端现在可以通过调用requestScrollToPage
来选择不根据 key 维护索引。除非调用了requestScrollToPage
,否则这不会改变任何现有行为。(Ic4213) - 引入了
LazyGrids
的requestScrollToItem
。对于每次测量过程,客户端现在可以通过调用requestScrollToItem
来选择不根据 key 维护索引。除非调用了requestScrollToItem
,否则这不会改变任何现有行为。(I0a7a0) ClickableText
已被标记为弃用。要向文本添加链接,请创建一个AnnotatedString
,其中包含一个对应的LinkAnnotation
,并将此AnnotatedString
传递给Text
可组合项。(I34d4b, b/323346994)UrlAnnotation
已弃用,请改用LinkAnnotation.Url
。如果您正在使用 Material 主题,则请使用TextDefaults
对象来创建应用了 Material 主题的注解。(I8d180, b/323346545)- 将
String.parseAsHtml
重命名为AnnotatedString.Companion.fromHtml
(I43dcd) - 添加了样式参数(
linkStyle
、focusedLinkStyle
、hoveredLinkStyle
)和一个链接交互监听器到parseAsHtml
方法。在解析带有<a>
标记的 HTML 字符串时,该方法将为每个此类标记构造一个LinkAnnotation.Url
,并将样式对象和链接交互监听器传递给每个注解。(I7c977) LinkAnnotation
现在接受基于状态的样式参数和一个LinkInteractionListener
。将此注解添加到AnnotatedString
以获取超链接。通过传递focusedState
和/或hoveredState
,您可以定义链接在聚焦和/或悬停时的视觉配置。(I81ce4, b/139312671)- 长截图的 feature flag 已被移除。(I28648, b/329128246)
LazyColumn
现在可以在长截图中正确渲染 sticky headers。(I8d239, b/329296635)- 稳定了随新的
BasicTextField
引入的剩余大部分实验性 API。(I714e2) - 向
BasicSecureTextField
添加了textObfuscationCharacter
参数,该参数控制在混淆内容时使用的字符。(I0588b) NestedScroll
源Drag
和Fling
已被替换为UserInput
和SideEffect
,以适应这些源的扩展定义,这些源现在包括动画(Side Effect
)以及鼠标滚轮和键盘(UserInput
)。(I40579)- 引入了
LocalBringIntoViewSpec
,这是一个平台相关的焦点滚动行为,应用于Scrollable
修饰符层。(I27aa5, b/317453911) - 移除了
TextFieldCharSequence
。TextFieldBuffer.originalValues
已被TextFieldBuffer.originalText
和TextFieldBuffer.originalSelection
替换。(I2c7d6) ImeOptions.hintLocales
不再是可空类型。如果您想传递一个空的 Locale 列表,请使用LocaleList.Empty
。(Ic5bc4)- 将
getOffsetFractionForPage
重命名为getOffsetDistanceInPages
。(Ia05e2)
Bug 修复
- 当
InputTransformations
与next
合并时,它们的KeyboardOptions
现在通过新的KeyboardOptions.merge
方法按单个选项正确合并。(Ie5304, b/295951492) AnchoredDraggableState
的targetValue
现在不再考虑位置阈值。它现在有一个隐式阈值 50%,这意味着targetValue
在两个 anchor 之间的中点发生变化。(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
的客户端现在可以选择不在即将到来的测量过程中根据 key 维护索引,方法是调用一个非挂起的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 表示未指定值。(Ia8ba0, b/295951492) - 将
outOfBoundsPageCount
重命名为beyondViewportPageCount
。(I129c6) - 将 fun
ClipEntry.getMetadata()
更改为 valClipEntry.clipMetadata
。(I50155) - 移除了
TextFieldState.valueAsFlow()
。建议使用snapshotFlow { state.text }
,或snapshotFlow { TextFieldCharSequence(state.text, state.selection) }
(I7d629) - 重新组织了
InputTransformation.transformInput
的参数。移除了originalValue: TextFieldCharSequence
。相反,TextFieldBuffer
现在携带同名的该值。还移除了valueWithChanges: TextFieldBuffer
参数。TextFieldBuffer
现在是该函数的接收者作用域。(I919cc) BasicTextField(state)
变体和BasicSecureTextField
现在使用KeyboardActionHandler
而不是KeyboardActions
来处理软键盘执行的操作。(I58dda)- 手写笔手写委托 API 支持在“假”文本输入字段上进行手写笔手写。(I9c09c, b/327271923)
- 将
KeyboardOptions.shouldShowKeyboardOnFocus
重命名为showKeyboardOnFocus
。(Ib4b7a, b/295951492) - 从
Modifier.contentReceiver
中移除了hintMediaTypes
参数。开发者已经被鼓励检查接收到的TransferableContent
的媒体类型,因为它可能与配置的hintMediaTypes
不兼容。(I82f99) - 重新排列了
BasicSecureTextField
的参数。移除了keyboardType
和imeAction
参数,转而使用完整的KeyboardOptions
类,同时保留适用于BasicSecureTextField
的相同默认值。还移除了scrollState
参数。(Ibbfa9) TextFieldState.text
的类型从TextFieldCharSequence
更改为CharSequence
。因此,添加了TextFieldState.selection: TextRange
和TextFieldState.composition: TextRange?
,以直接从状态对象读取当前选定和组成值。- 移除了
TextFieldState.forEachTextValue
。(Idb2a2) - 移除了
ClipboardManager.getClipMetadata
和ClipboardManager.hasClip
函数。请使用clipEntry.getMetadata()
读取当前剪贴项的元数据。此外,检查ClipboardManager.getClip
的结果是否为 null,以了解剪贴板是否有当前剪贴项。(I50498) ClipboardManager.setClip
现在接受 null,以便能够清空剪贴板。(I7d2e9)ReceiveContentListener
已转换为函数接口。此外,接受 lambda 的Modifier.receiveContent
重载已被移除,因为ReceiveContentListener
现在是一个函数接口。- 将
Modifier.receiveContent
重命名为Modifier.contentReceiver
。(I1e6af) - 将
TransferableContent.consumeEach
重命名为TransferableContent.consume
。(I1e462) rememberTextFieldState
已升级为 Stable API。(I37999)
Bug 修复
- 修复了一个 bug,在该 bug 中,
BasicTextField(state)
变体不适用于 CJK(基于组合输入)键盘。(I54425) - 修复了一个 bug,在该 bug 中,当
Modifier.Node
被重用时,Modifier.dragAndDropTarget()
在某些场景下可能会引用陈旧数据。(I05bb1) - 恢复了最近的一个契约更改,其中
AnchoredDraggableState#anchoredDrag
调用会在anchoredDrag
操作结束时快速对齐 (snap)。(I95715)
1.7.0-alpha05 版本
2024 年 3 月 20 日
androidx.compose.foundation:foundation-*:1.7.0-alpha05
已发布。1.7.0-alpha05 版本包含 这些提交。
API 变更
- 已移除用于超链接样式的实验性
LocalTextLinkStyle
组合局部变量。 (Iebfa7) - 已移除
BasicText
的实验性重写版本,该版本带有onLinkClicked
参数。将来会推出用于超链接支持的替代 API。 (I107d5) - 已移除
TextFieldState
和TextFieldBuffer
下与 Codepoints 相关的方法和属性。此外,还从剩余的选择和组合相关 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)
外部贡献
- 新增了两个 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 中滚动组件的信息传递给无障碍功能 (a11y) 系统。此 CL 还在 Foundation 可滚动列表中应用了该属性的使用。(Ic5fa2) BasicTextField2
已重命名为BasicTextField
。 (Ie5713)FocusRequester.createRefs
现已稳定 (I4d92c, b/261436820)- 引入了
DelegatableNode.scrollIntoView()
,允许修饰符节点直接发出scrollIntoView
请求。 (I2b3b7, b/299939840) - 引入了
DelegatableNode.requireView()
,允许修饰符节点获取当前的 AndroidView
,而无需读取组合局部变量。 (I40768) - 在 Contextual Flow Row Scope 和 Contextual Flow Column Scope 中引入了上下文布局信息,包括行索引、位置,以及在指定位置保持的最大宽度和高度约束。超出最大宽度/高度的项可能会流到下一行或根据溢出设置被忽略。 (Id13f8, b/292114798)
Bug 修复
- 修复了一个错误,该错误导致在某些条件下切换
TextField
的enabled
或readOnly
属性会引发崩溃。 (Iae17b)
版本 1.7.0-alpha03
2024 年 2 月 21 日
androidx.compose.foundation:foundation-*:1.7.0-alpha03
已发布。版本 1.7.0-alpha03 包含这些提交。
API 变更
- 引入了
DelegatableNode.requireLayoutCoordinates()
,这是一种获取Modifier.Node
当前LayoutCoordinates
的方法,而无需自行重写onPlaced
并将坐标存储在属性中。(Ia8657) - 引入了
DelegatableNode.currentLayoutCoordinates
,这是一种获取Modifier.Node
当前LayoutCoordinates
的方法,而无需自行重写onPlaced
并将坐标存储在属性中。(Iaebaa) AnchoredDraggable
使用的DraggableAnchors
中的性能优化。 (I89cff)BasicTextField2
及androidx.compose.foundation.text2
包下的相关 API 已移至androidx.compose.foundation.text
。 (I9f635)BasicTextField2
不再接受CodepointTransformation
参数。请使用BasicSecureTextField
或OutputTransformation
。 (Id34ff)- 新增了仅比较两个
AnnotatedStrings
注解的方法。 (I32659) - 引入
ContextualFlowRow
并增强FlowRow
/Column
,支持MaxLines
和Overflow
。我们很高兴宣布对实验性FlowRow
和FlowColumn
进行增强,现已支持maxLines
和 overflow,同时推出了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)- 在此更改中,我们在 Pager 中用
TargetedFlingBehavior
替换了SnapFlingBehavior
,以解锁其他用例并提供更大的灵活性。 (I762ea) - 在此更改中,我们将 Snapping API 设为稳定版。我们还清理了一些测试代码并为 Snapping 添加了更多示例。 (Id8da9)
- 引入
TargetedFlingBehavior
,这是一种FlingBehavior
,它允许传播有关正在进行的动画状态及其目标滚动偏移的信息。 (I6a207)
Bug 修复
BasicTextField2
现在在输入时,如果光标已滚动出视图或因输入而移出视图,会将其保持在视图内。 (Ieb856, b/237190748)
外部贡献
- 新增了一个实验性 API,用于配置 LazyLists 的预取行为。 (I022a4)
版本 1.7.0-alpha01
2024 年 1 月 24 日
androidx.compose.foundation:foundation-*:1.7.0-alpha01
已发布。版本 1.7.0-alpha01 包含这些提交。
新功能
- 新增了一个
Indication API
,即IndicationNodeFactory
。与之前(现已弃用)的rememberUpdatedInstance
API 相比,这使得Indication
实现的性能更高。有关迁移信息,请参阅 developer.android.com。 clickable / combinedClickable / selectable / toggleable
现在接受可为 null 的MutableInteractionSource
参数。如果为 null,且提供的Indication
是一个IndicationNodeFactory
,则Indication
可以在需要时才延迟创建,从而提高性能。如果您没有 hoisting 和使用MutableInteractionSource
,建议传递 null。
API 变更
- 在
AnchoredDraggable
中引入DecayAnimation
,此更改为AnchoredDraggable
添加了decayAnimationSpec
参数,以便在稳定到其中一个锚点时使用衰减动画。此更改还包括将现有的animationSpec
重命名为snapAnimationSpec
,以帮助理解每个 spec 的用例。 BasicTextField2
可用于实验性用途。它应与BasicTextField
在功能上大致相当,并且行为应可用于生产。但目前该 API 仍处于实验阶段。在稳定之前,它将被重命名为BasicTextField
并移至同一包下。- 引入了
BasicTextField2
的OutputTransformation
API 初稿。此 API 取代了旧版BasicTextField
中VisualTransformation
的大部分用例。但它尚未完成,并且有些功能可能无法正常工作,不过我们非常欢迎您就该 API 对您的用例的可用性提供任何反馈。(aosp/2708848) - 引入了
LinkAnnotation
,可用于在文本中添加链接和可点击项。链接功能尚未完成,未来还会进行更多 API 更改。 - 引入了
receiveContent
修饰符,它为开发者提供了在 Jetpack Compose 中接收富文本内容的方式。 receiveContent
与BasicTextField2
集成,以接受软键盘提供的富文本内容,或通过剪贴板粘贴的内容。KeyboardOptions.shouldShowKeyboardOnFocus
允许您禁用BasicTextField
在获得焦点时请求软键盘的默认行为。TextInputService
和LocalTextInputService
现已弃用。请改用PlatformTextInputModifierNode
直接与平台 IME API 集成。 (aosp/2862698)Indication#rememberUpdatedInstance
已被弃用。它具有较高的不可避免的性能开销,并阻碍了其他优化。您应该改用新的IndicationNodeFactory
API。
Bug 修复
BasicTextField
现在,当传递VisualTransformation
时,将预验证一小部分偏移映射。这有助于捕获常见的编码错误,这些错误可能导致在后续测量或绘制阶段出现不可恢复的异常。通过在组合期间抛出异常,开发者更有可能在开发过程中看到这些错误,从而有助于避免生产环境崩溃。(I0fd42)- 如果为无效的输入索引返回了无效的输出索引,
VisualTransformation
将不会抛出异常 (b/316401857 )
版本 1.6
版本 1.6.8
2024 年 6 月 12 日
androidx.compose.foundation:foundation-*:1.6.8
已发布。版本 1.6.8 包含 这些提交。
版本 1.6.7
2024 年 5 月 1 日
androidx.compose.foundation:foundation-*:1.6.7
已发布。版本 1.6.7 包含 这些提交。
版本 1.6.6
2024 年 4 月 17 日
androidx.compose.foundation:foundation-*:1.6.6
已发布。版本 1.6.6 包含 这些提交。
Bug 修复
- 修复了一个错误,该错误导致在某些条件下切换
TextField
的enabled
或readOnly
属性会引发崩溃。 (Iae17b)
版本 1.6.5
2024 年 4 月 3 日
androidx.compose.foundation:foundation-*:1.6.5
已发布。版本 1.6.5 包含 这些提交。
Bug 修复
- 为 Row/Column 中难以重现的错误添加了调试日志:(b/300280216 和 b/297974033)
版本 1.6.4
2024 年 3 月 20 日
androidx.compose.foundation:foundation-*:1.6.4
已发布。版本 1.6.4 包含 这些提交。
Bug 修复
- 长按然后拖动选择手势,在拖动的第一帧移出文本布局边界时,不再会引发崩溃。 (Icdf90, b/325307463)
版本 1.6.3
2024 年 3 月 6 日
androidx.compose.foundation:foundation-*:1.6.3
已发布。版本 1.6.3 包含 这些提交。
版本 1.6.2
2024 年 2 月 21 日
androidx.compose.foundation:foundation-*:1.6.2
已发布。版本 1.6.2 包含这些提交。
Bug 修复
- 修复
AnimateContentSize
未正确重置的问题。 (I07051) - 修复了在某些情况下文本的
intrinsicHeight
会被过度缓存的问题。 (3cd398, b/217910352)
版本 1.6.1
2024 年 2 月 7 日
androidx.compose.foundation:foundation-*:1.6.1
已发布。版本 1.6.1 包含这些提交。
Bug 修复
- 修复了交错网格在滚动超出限制时的测量问题。 (bffc39)
- 添加了针对具有大尺寸布局的检查。 (e74af5)
- 修复了交错网格开头大小为 0 的项目的放置问题。 (785f94)
- 按与 onForgotten 相同的顺序调用 onRelease 回调。 (31ce3b)
版本 1.6.0
2024 年 1 月 24 日
androidx.compose.foundation:foundation-*:1.6.0
已发布。版本 1.6.0 包含这些提交。
自 1.5.0 以来的重要更改
- 新的 Modifier
Modifier.anchoredDraggable
,解锁了在预定义锚点集之间拖动和动画的能力。此修饰符旨在替代Modifier.swipeable
。在迁移指南中了解如何使用它以及如何从Modifier.swipeable
迁移。 - 已添加应用和组件之间的拖放功能。请参阅
DragAndDropTarget
、Modifier.dragAndDropSource
及其他 API 以开始使用。 Modifier.draggable2D
是新的修饰符,支持轻松实现 2D 拖动。请参阅示例。- 已新增
AndroidExternalSurface
和AndroidEmbeddedExternalSurface
,以便更轻松地在 Compose 中添加 surface-driven 组件。 Pager
和snapFlingBehaviour
中的各项 API 更改和改进。- 各项焦点、文本和插边 API 已升级为稳定版 API。
版本 1.6.0-rc01
2024 年 1 月 10 日
androidx.compose.foundation:foundation-*:1.6.0-rc01
已发布。版本 1.6.0-rc01 包含这些提交。
API 变更
DragAndDropTarget()
扩展构造函数已移除。使用object: DragAndDropTarget {}
创建新实例。 (I32318)
版本 1.6.0-beta03
2023 年 12 月 13 日
androidx.compose.foundation:foundation-*:1.6.0-beta03
已发布。版本 1.6.0-beta03 包含这些提交。
Bug 修复
- 修复了影响使用无限约束测量超大文本时的崩溃问题。 (I1a7df, b/312294386)
PlatformImeOptions
现在是一个具体类,而不是接口。 (If40a4)
版本 1.6.0-beta02
2023 年 11 月 29 日
androidx.compose.foundation:foundation-*:1.6.0-beta02
已发布。版本 1.6.0-beta02 包含这些提交。
Bug 修复
- 修复了仅重新布局滚动后
canScroll
未更新的问题。 (I60a86) - 修复了小幅度滚动后
Modifier.animateItemPlacement()
和LookaheadScope
的问题。 (I3a2b7)
版本 1.6.0-beta01
2023 年 11 月 15 日
androidx.compose.foundation:foundation-*:1.6.0-beta01
已发布。版本 1.6.0-beta01 包含这些提交。
API 变更
- 的
DragAndDropTarget
修饰符现在显式接受接收方DragAndDropTarget
,并包含一个用于选择加入拖放会话的 lambda 表达式。现在有针对DragAndDropModifierNode
的两个工厂函数。一个用于接收传输,另一个用于传输数据。(I69481) - 将
maximumFlingVelocity
更新为表示为 Float 类型。更新了文档,以更清晰地说明maximumFlingVelocity
的单位。 (I8adc7) onDragAndDropStart
在DragAndDropModifierNode
工厂中已重命名为acceptDragAndDropTransfer
。已将
acceptsDragAndDropTransfer
添加到dragAndDropTarget
Modifier
,用于从拖放会话中接受内容。如果对拖放会话感兴趣,此 lambda 将返回一个可用的DragAndDropTarget
。用于处理拖动事件的其他 lambda 已被此 lambda 替换。已新增一个
DragAndDropTarget
工厂函数,用于从拖放会话中接收内容。(Iebf3a)在
AnchoredDraggable
中暴露startDragImmediately
提供了在使用时检测拖动手势的控制权。当 widget 正在动画到目标锚点时设置此属性非常有用。请参阅示例。(Ie6d13,b/285139987)Foundation Tooltip API 现已标记为
@ExperimentalFoundationApi
(I30b0b)移除了
DragAndDropInfo
类型,因为DragAndDropModifierNode.drag
现在接受transferData
、装饰尺寸和拖动装饰DrawScope
lambda 表达式的参数。DragAndDropTarget
提供了用于特定拖放事件的方法,而不是一个单一的抽象方法。onDragAndDropEvent
在DragAndDropModifierNode
工厂函数中已重命名为onDragAndDropStart
,以便更好地传达所提供的DragAndDropTarget
仅对给定的拖放会话有效。的
DragAndDropEventType
已被移除 (I645b1)将
PlatformTextInputModifierNode.runTextInputSession
重命名为establishTextInputSession
。 (I03cd0)用
TextSubstitution
替换OriginalText
。 (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(用于 Cards 和 Chips)现在依赖于基于 Slot 的 API(按照 Compose 的建议),而不是基于数据类实例来创建这些 Slot。这是一个破坏性更改,请参阅演示和示例代码,了解如何使用新的 API。(Ia8943)
Bug 修复
- 为
PageSize.Fixed
实现了 equals 和 hashcode 方法。 (Ie3ede, b/300134276) - 修复了一个错误,该错误导致当
minWidth
改变且minWidth
小于初始测量约束maxWidth
时,BasicText
布局不会收缩。 (Idb19c) - 为
ArcLine
添加扫描渐变 (Sweep Gradient) 的渲染器支持。(I4d5bb) - 修复 Window Inset 变更导致的二进制兼容性问题 (Iee695)
- 移除 Material3 Chip/Button 的 Material 核心层,因为微基准测试显示没有它可以获得更好的性能。(I55555)
版本 1.6.0-alpha08
2023 年 10 月 18 日
androidx.compose.foundation:foundation-*:1.6.0-alpha08
发布。 版本 1.6.0-alpha08 包含以下提交。
新功能
Modifier.draggable2D
是新的修饰符,支持轻松进行 2D 拖动。请参阅 示例 (Id95f5, b/214412658)
API 变更
Modifier.dragAndDrawSource
的onDrawDragShadow
lambda 已重命名为drawDragDecoration
,并且DragAndDropInfo
的 size 参数已重命名为dragDecorationSize
。(Id0e30, b/303904810)BasicTextField2
的decorationBox
参数已重命名为decorator
。其类型也已更改为等效的 fun 接口TextFieldDecorator
。(I23c1c)
Bug 修复
- 改进了关于
BasicTextField
的onValueChange
要求的文档。(I90fc9, b/160257648)
版本 1.6.0-alpha07
2023 年 10 月 4 日
androidx.compose.foundation:foundation-*:1.6.0-alpha07
发布。 版本 1.6.0-alpha07 包含以下提交。
API 变更
- 引入了
PlatformTextInputMethodTestOverride
,用于编写自定义文本编辑器的测试。(Id159b) - 将
GraphicsSurface
重命名为AndroidExternalSurface
(I11680) - 添加了临时标志
DisableNonLinearFontScalingInCompose
以禁用非线性字体缩放。如果在清理测试时需要时间,请在测试中设置DisableNonLinearFontScalingInCompose = true
。此标志将在 Compose 1.6.0-beta01 中移除。(Ic9486) - 添加了
ColorList
和ColorSet
集合,以避免分配。(I744bd) - 此更改移除了
shortSnapVelocityThreshold
,该参数已成为SnapLayoutInfoProvider
实现的内部细节。(I65f6d) - 添加了用于启动拖放会话的
dragAndDropSource
Modifier,以及用于接收拖放会话的dragAndDropTarget
Modifier (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
的新 Composable 封装容器:GraphicsSurface()
和EmbeddedGraphicsSurface()
。这是一个实验性 API,可能会发生变化和修改。(I9ddb2) Modifier.magnifier()
现在是一个稳定 API。这包括移除了MagnifierStyle
,取而代之的是在修饰符本身中使用内联参数。(I83bec, b/298381260, b/262367109, b/261438887)
API 变更
- 在
ScrollScope
中引入了updateCurrentPage
和updateTargetPage
,这是通过PagerState.scroll
自定义动画滚动的最后几个必要部分。(I9cad5, b/267744105, b/243786897) - 从
SnapFlingBehavior
中移除了 density。`SnapLayoutInfoProvider` 的所有实现都已经有访问 density 的方法,因此可以移除接收器作用域,这将使 `SnapFlingBehavior` 和 `SnapLayoutInfoProviders` 的实现更加简单。(I153c3) - 更多修饰符被标记为稳定。(I56af1, b/298046462)
- 从
SnapLayoutInfoProvider
中移除了SnapStepSize
。计算应使用 Layout 信息进行,并通过方法或对齐偏移量提供。(If320c)
行为变更
- Compose 现在使用非线性字体缩放,以提高可读性和可访问性。当系统设置中的字体缩放比例 > 100% 时,小文本将正常增大,但已经很大的文本只会稍微增大。此外,在 SP 中定义的行高将自动调整,以保持与 100% 缩放比例的预期高度成比例。有关更多信息,请参阅 字体缩放最佳实践。(I11518)
Bug 修复
- 移除了在提示框 (tooltips) 中使用
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) - 将
BasicTooltipBox
添加到了compose.foundation
,并更新了PlainTooltipBox
和RichTooltipBox
以使用带有新的PlainTooltip
和RichTooltip
可组合项的TooltipBox
。(I79e1d)
版本 1.6.0-alpha04
2023 年 8 月 23 日
androidx.compose.foundation:foundation-*:1.6.0-alpha04
发布。 版本 1.6.0-alpha04 包含以下提交。
API 变更
- 添加了
ReusableComposition
接口,用于管理子组合 (subcompositions) 的生命周期和复用。(I812d1, b/252846775) Modifier.focusGroup
已升级为稳定 API。(I7ffa3)- 添加了接受不可变值和用于更改该值的回调的
BasicTextField2
重载,就像当前的BasicTextField
API 一样。(I3f2b8) GridItemSpan::currentLineSpan
现在是稳定 API。(Icc29c)- 接受
contentDescription
的 Canvas 现在是稳定 API。(Ib3d29) - 在
ScrollState
中引入了viewportSize
,这是一种在测量发生后了解使用ScrollState
的组件的viewPort
大小的方法。(I8b85a, b/283102682) - 修复了 Pager 中的预取与 Views 中的行为不匹配的问题。(I93352, b/289088847)
Modifier.consumeWindowInsets(PaddingValues)
现在是稳定的。- 已废弃的
Modifier.consumedWindowInsets
API 现已移除。请改用Modifier.consumeWindowInsets
。(Id72bb)
- 已废弃的
版本 1.6.0-alpha03
2023 年 8 月 9 日
androidx.compose.foundation:foundation-*:1.6.0-alpha03
发布。 版本 1.6.0-alpha03 包含以下提交。
API 变更
- 添加了
LazyLayout
的重载,它接受LazyLayoutItemProvider
的 lambda,而不是像以前那样的普通对象。以前的重载已废弃。(I42a5a) - 添加了对配置
privateImeOptions
的支持。(Idb772)
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
不再是实验性 API。`LocalSoftwareKeyboardController` 现在也是一个正式的CompositionLocal
。(I4c364)Modifier.transformable
现在在canPan
参数中提供了平移增量 (pan delta),以帮助确定平移方向,从而允许或禁止平移。(I692aa, b/266829800)- 更新了修饰符
consumeWindowInsets
,使其扩展超类AbstractComposeView
(Iacd74, b/269479941)
版本 1.6.0-alpha01
2023 年 6 月 21 日
androidx.compose.foundation:foundation-*:1.6.0-alpha01
发布。 版本 1.6.0-alpha01 包含以下提交。
新功能
- 在 Foundation 中引入了一个新的
AnchoredDraggable
API。它可用于构建可在离散状态之间拖动的组件,例如模态底部表单。此 API 替代了 Material 的Swipeable
API。(I4a2ed)
API 变更
- 支持
InputConnection#requestCursorUpdates
(I0c69b) - 引入了
scrollAnimationSpec
以允许自定义动画规范。将BringIntoViewCalculator
更新为BringIntoViewScroller
。(Idb741) - 添加了
ResourceResolutionException
类型,用于封装尝试加载位图资源时抛出的异常,并提供失败的资源路径描述。(I19f44, b/230166331, b/278424788) - 添加了语义属性和操作以支持文本翻译。(I4a6bc)
- 引入了
BringIntoViewCalculator
API,可用于自定义Scrollable
等组件如何响应bringIntoView
请求。更改了 scrollable 的重载,使其可以选择接受BringIntoViewCalculator
实例。(Iaf5af)
Bug 修复
- 添加了一个 lint 检查,用于警告如果在组合中创建
MutableInteractionSource
而未记住它,类似于创建 mutable state /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 修复
- 修复了在某些情况下当语义无效时导致文本崩溃的错误。
版本 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,减少了初始组合的开销。 - 提升了 Pagers 的稳定性。许多错误已得到解决。
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
以提供心率和每日步数。SensorGateway
接口已从公共 API 中移除。(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) - 为懒交错网格项作用域 (lazy staggered grids item scope) 添加了实验性
Modifier.animateItemPlacement()
。您可以将其应用于项目,以实现自动化位置更改/重新排序动画。(I4b62d, b/257034719) - 将
GridCells.FixedSize
升级为稳定 API。FixedSize
定义了一个LazyGrid
,其中每个单元格在交叉轴上占用精确大小,剩余空间由交叉轴排列分布。(I8542f) - 为 Pager 引入了接收器作用域
PagerScope
,并添加了一个用于计算给定页面偏移量的实用函数。(If2577) - 在创建快速滑动行为 (snap fling behavior) 时引入了
snapPositionalThreshold
。使用此参数可以指定 Pager 中短程快速对齐 (short snapping) 的位置阈值。(If8f7f, b/275579012) - 将
SnapLayoutInfoProvider.calculateSnappingOffsetBounds
替换为calculateSnappingOffset
。在这个新方法中,我们只需请求下一个要对齐的偏移量。边界的计算应在实现级别执行,因为这可能因所需的对齐方式而异。(I923a4) LazyStaggeredGrid
API 已升级为稳定 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
时,在 Text 上获取语义的调用不再崩溃。(Ibd072) - 修复了由非
Dialog
可组合项创建的对话框内的文本字段不显示键盘的回归问题。(I82551, b/262140644)
版本 1.5.0-alpha03
2023 年 4 月 19 日
androidx.compose.foundation:foundation:1.5.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha03
发布。 版本 1.5.0-alpha03 包含以下提交。
此版本为 Compose 启用了新的文本渲染堆栈。新堆栈经过性能优化,您应该不会看到任何可见的变化。
如果您确实看到渲染文本发生变化,可以通过设置 NewTextRendering1_5 = false
来调试并确认行为差异。设置此项将强制重新组合。请将任何行为差异作为 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) AnnotatedString
中的UrlAnnotation
现在可以通过TalkBack
等无障碍服务打开。(If4d82, b/253292081)- 为文本字段添加了
InsertTextAtCursor
语义操作。(I11ed5) - 文本相关的测试操作(例如
performTextInput
)现在将直接请求焦点,使用语义操作,而不是点击字段。(I6ed05) - 添加了对使用
FlowRow
中的verticalArrangement
和FlowColumn
中的horizontalArrangement
进行交叉轴间距/排列的支持。我们还移除了FlowRow/FlowColumn
中的顶级verticalAlignment
和horizontalAlignment
。开发者可以使用Modifier.align
代替。这减少了verticalAlignment
和verticalArrangement
命名约定之间的混淆。(I87b60, b/268365538)
版本 1.5.0-alpha01
2023 年 3 月 22 日
androidx.compose.foundation:foundation:1.5.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.5.0-alpha01
发布。 版本 1.5.0-alpha01 包含以下提交。
API 变更
- Text 和
BasicText
已重构为使用新的修饰符系统。这在许多情况下显著提高了性能。不应有任何可见的变化。(If1d17, b/246961435) - 添加了
PerformImeAction
语义操作,用于在文本编辑器节点上调用 IME 操作。(Ic606f, b/269633506)
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
以及更底层的 Paragraph 添加了 Emoji compat 集成。配置 emojicompat 后,该功能默认启用。 - 可以使用
PlatformParagraphStyle
在特定的 Text 上配置EmojiCompat
。 - 为
LazyStaggeredGrid
添加了整行 span 支持 (I28252) - 为
ClickableText
添加了实验性onHover
功能 (I6938f) - 为
runComposeUiTest
函数和create*ComposeRule
函数引入了新的实验性重载,可接受CoroutineContext
参数。该上下文将用于测试组合以及组合中的任何LaunchedEffect
和rememberCoroutineScope()
调用。(I10614、b/265177763) FlowRow
和FlowColumn
现已作为@ExperimentalFoundationApi
提供,它们可实现更灵活的基于行和列的组件布局,当主轴空间不足时,组件将换行。(I3a7b2)Modifier.basicMarquee()
现已作为实验性功能提供,用于以滚动跑马灯效果显示内容。(I2df44、b/139321650)
版本 1.4.0-rc01
2023 年 3 月 8 日
androidx.compose.foundation:foundation:1.4.0-rc01
和 androidx.compose.foundation:foundation-layout:1.4.0-rc01
已发布。版本 1.4.0-rc01 包含以下提交。
API 变更
- 引入了新的低级别
PlatformTextInputAdapter
API,用于构建可直接与平台 API 通信的自定义文本输入实现。(I58df4) - 为
LazyStaggeredGrid
添加了对反向布局的支持。(I3ef4a)
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
参数,以支持在 Canvas 上绘制文本时使用不同的混合算法。(I57508) - 移除了
modifierElementOf()
API。请直接继承ModifierNodeElement
。(Ie6d21)
Bug 修复
- 调整选择手柄不再能选择部分字符。(Idedd1)
- 修复了在空的
TextField
上按 ctrl+backspace 时崩溃的问题。(I0427f、b/244185537)
版本 1.4.0-beta01
2023 年 2 月 8 日
androidx.compose.foundation:foundation:1.4.0-beta01
和 androidx.compose.foundation:foundation-layout:1.4.0-beta01
已发布。版本 1.4.0-beta01 包含以下提交。
新功能
- 自 1.3 版本起,已为
Text
和TextField
以及更底层的 Paragraph 添加了 Emoji compat 集成。配置 emojicompat 后,该功能默认启用。 - 可以使用
PlatformParagraphStyle
在特定的 Text 上配置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) - 为
runComposeUiTest
函数和create*ComposeRule
函数引入了新的实验性重载,可接受CoroutineContext
参数。该上下文将用于测试组合以及组合中的任何LaunchedEffect
和rememberCoroutineScope()
调用。(I10614、b/265177763)
API 变更
- 将
OverscrollEffect
的 pre/post API 合并到组合的“装饰器”applyToScroll
和applyToFling
函数中。请参阅文档中的更新示例,了解如何使用新 API 形状实现过滚动效果。(I8a9c4、b/255554340) - 改进了 inline/deprecated-hidden 函数的类型/可为 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) - 改进了 deprecated-hidden 函数的返回类型可为 null 性(Ibf7b0)
- 向
TextStyle
添加了实验性TextMotion
,用于将文本定义为Static
(默认)或 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 规则的 UI 测试中,在
withFrameNanos
回调期间恢复的延续在所有帧回调运行完毕之前不会被分派。这与 Compose 在正常运行时 Behaviour 一致。但是,依赖旧行为的测试可能会失败。这应该只影响直接调用withFrameNanos
或withFrameMillis
的代码,并且将传递给这些函数的 `callback` 外部的逻辑移到回调内部。请参阅 此 CL 中的动画测试更改以获取示例。 - 为
TestMonotonicFrameClock
构造函数和工厂函数添加了可选的onPerformTraversals: (Long) -> Unit
参数,用于在withFrameNanos
回调之后但在恢复调用者的协程之前运行代码。(Idb413、b/254115946、b/222093277、b/255802670) - 引入了页面辅助功能操作:
PageUp
、PageDown
、PageLeft
、PageRight
。请注意,这些操作仅在 API 29 及更高版本中可用。(Ida4ab) - 引入了
HorizontalPager
和VerticalPager
,一种以 Pager 方式显示可组合项的方法。引入了PagerState
来控制 Pager 并查询 Pager 的当前状态信息。引入了PageSize
,一种控制 Pager 页面大小的方法,可用于创建类似轮播的 Pager。引入了PagerSnapDistance
,一种控制 Pager 滚动行为中的吸附方式的方法。(I01120) - 在
SnapFlingBehavior.performFling
中引入了一个重载,以帮助理解滚动手势将在何处停止。(I569f6) - 移除了
OverscrollEffect#isEnabled
。您不再需要记住和设置此标志,只需在不希望显示过滚动效果的情况下不向过滚动效果分派事件即可(例如,如果ScrollableState#canScrollForward/backward
都返回 false)。(I1a4b0、b/255554340、b/255557085) - 添加了
ScrollableState#canScrollForward
和ScrollableState#canScrollBackward
,用于查询ScrollableState
在任一方向上是否有空间滚动(即是否处于其范围的最小值/最大值)。为了向后兼容ScrollableState
的现有实现,此参数默认为 true。消费者可以使用此参数向用户指示仍有空间滚动,也可用于避免向在给定方向上没有空间滚动的ScrollableStates
分派 delta,以减少不必要的工作。(Idf1a0、b/255557085) - 添加了一个 Modifier API 来查询祖先滚动信息。(I2ba9d、b/203141462)
- 用于
Clickable
,以便在手势可能变为滚动事件时正确延迟按下交互。 - 修复了在
Scrollable ViewGroup
中使用时,Clickables
未正确延迟涟漪效果的问题。 - 更新了抽屉和底部工作表,以便在手势可能变为滚动事件时正确延迟按下操作。
- 更新了
snapStepSize
命名,以便与SnapLayoutInfoProvider
中的其他方法保持一致。(Ife67c) - 为 Compose 添加了
EmojiCompat
(Ibf6f9、b/139326806) - 将
consumedWindowInsets()
重命名为consumeWindowInsets()
,将withConsumedWindowInsets()
重命名为onConsumedWindowInsetsChanged()
,并将这些 Modifier 设为公开。(Ie44e1)
Bug 修复
- 修复了
Modifier.animateItemPlacement()
和 Lazy 网格引起的崩溃问题。该问题在某些情况下会发生,即新项数量小于之前的项数量。(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.imeAnimationSource
和WindowInsets.imeAnimationTarget
,用于确定动画进度并了解 IME 在动画完成后将位于何处。(I356f1、b/217770337)
版本 1.3
版本 1.3.1
2022 年 11 月 9 日
androidx.compose.foundation:foundation:1.3.1
和 androidx.compose.foundation:foundation-layout:1.3.1
已发布。版本 1.3.1 包含以下提交。
Bug 修复
- 修复了
BeyondBoundsLayout
中的性能问题(aosp/2255266) ContentInViewModifier
除非附加,否则不会读取布局坐标(aosp/2241316)
版本 1.3.0
2022 年 10 月 24 日
androidx.compose.foundation:foundation:1.3.0
和 androidx.compose.foundation:foundation-layout:1.3.0
已发布。版本 1.3.0 包含以下提交。
自 1.2.0 以来的重要变更
- 引入了实验性版本的
LazyVerticalStaggeredGrid
和LazyHorizontalStaggeredGrid
。 SnapFlingBehavior
、rememberSnapFlingBehavior
和其他相应的 API 已作为实验性功能添加。- 如果使用键盘或遥控器上的方向键点击,
Modifier.clickable
、Modifier.toggleable
和Modifier.selectable
现在会显示涟漪效果。
版本 1.3.0-rc01
2022 年 10 月 5 日
androidx.compose.foundation:foundation:1.3.0-rc01
和 androidx.compose.foundation:foundation-layout:1.3.0-rc01
已发布。版本 1.3.0-rc01 包含以下提交。
API 变更
版本 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 变更
- 添加了自定义文本中换行选项。
BringIntoViewResponder
现在能够在处理请求时获取请求的最新边界。(If86a5、b/241591211)- 为实验性
Staggered Grid
引入了项间距支持(I10b82) - 为实验性
Staggered Grid
引入了内容内边距(I342ea) - 将
TextMeasurer.measure
方法中的size:IntSize
参数更改为constraints: Constraints
,以支持最小宽度约束。(I37530、b/242707525) - 添加了
Modifier.withConsumedWindowInsets()
,用于在windowInsetsPadding
之外获取消耗的WindowInsets
。 - 添加了
MutableWindowInsets
,允许轻松更改WindowInsets
而无需重新组合。(I7fd28、b/237019262、b/243119659)
版本 1.3.0-beta02
2022 年 9 月 7 日
androidx.compose.foundation:foundation:1.3.0-beta02
和 androidx.compose.foundation:foundation-layout:1.3.0-beta02
已发布。版本 1.3.0-beta02 包含以下提交。
API 变更
- 实验性
StaggeredGrid
的初始版本(Ia48be) - 将
FocusDirection.In
和FocusDirection.Out
重命名为FocusDirection.Enter
和FocusDirection.Exit
(Ia4262、b/183746982) - 引入了
rememberSnapFlingBehavior
的重载,提供了一种在 LazyLists 中快速启用吸附功能的方法。(Ifb48a) - 将
snapFlingBehavior
工厂替换为具体的SnapFlingBehavior
类。将SnapLayoutInfoProvider
方法作用域限定为 Density,以便 API 用户更容易进行 Dp<->Px 转换。(I54a11) - 更新了
LazyLayoutMeasureScope.measure
,使其返回可放置项的列表,突出强调返回值的期望不变性。(I48b7c) - 引入了
SnapLayoutInfoProvider
,它接受LazyListState
来创建一个SnapLayoutInfoProvider
实例,该实例可用于为 LazyLists 启用吸附FlingBehavior
。(I2dd10)
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
作为更复杂手势检测的额外构建块公开(I646e6、b/181577176) - 引入了
lazyListSnapLayoutInfoProvider
,以在 Lazy Lists 中启用吸附功能。(I3ecdf) - 引入了
SnapFlingBehavior
,这是一种可启用列表吸附的滚动行为。提供一个包含吸附布局信息的SnapLayoutInfoProvider
实例。(Ie754c)
版本 1.3.0-alpha03
2022 年 8 月 10 日
androidx.compose.foundation:foundation:1.3.0-alpha03
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha03
已发布。版本 1.3.0-alpha03 包含以下提交。
API 变更
- Resource 字体现在支持设置字体变体设置(API 26+)。(I900dd、b/143703328)
DeviceFontFamilyNameFont
中的可变字体支持(Ic1279、b/143703328)- 移除了
PlatformTextStyle
和LineHeightStyle
的实验性注解。(I64bef) - 当
VisualTransformation
提供的OffsetMapping
返回无效索引时,文本字段现在会抛出更详细的异常。(Ie73f9、b/229378536) - 引入了实验性 API,用于在 Lazy 布局之间共享项提供者逻辑。(Ic891c)
ScrollableDefaults.reverseDirection()
不再是实验性功能。(Iba646)- 弃用了
SemanticsModifier.id
,并将语义 ID 移至LayoutInfo.semanticsId
。(Iac808、b/203559524) checkScrollableContainerConstraints()
不再是实验性功能。(I2c290)Modifier.clipScrollableContainer()
不再是实验性功能。(Ia2b44)- 弃用了
TextInputService.show|hideSoftwareKeyboard
。请在应用代码中使用SoftwareKeyboardController
,在 IME 管理代码中使用TextInputSession
。(I14e4c、b/183448615)
版本 1.3.0-alpha02
2022 年 7 月 27 日
androidx.compose.foundation:foundation:1.3.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.3.0-alpha02
已发布。版本 1.3.0-alpha02 包含以下提交。
API 变更
- 在
DrawScope
上添加了drawText
扩展函数,提供了一种在处理DrawScope
的可组合项和修改器(例如Canvas
和drawBehind
)上绘制多样式文本的方法。(I16a62、b/190787898)
Bug 修复
- 当文本字段在获得焦点时被禁用,软键盘现在将隐藏。(I6e3e4、b/237308379)
- 向
Velocity Tracker
添加InputEventChange
事件时,我们现在将考虑 deltas 而不是 positions,这将保证在所有情况下(即使目标元素移动)都能正确计算速度(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
注解类型和相关方法,以支持TalkBack
在AnnotatedStrings
中支持链接。(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
现已稳定。- 您现在可以为 Lazy 列表和网格中的项指定内容类型。这将允许组件更有效地重用元素。
- Lazy 列表和网格现在具有
userScrollEnabled
参数,该参数允许通过用户手势禁用滚动。 - 添加了一个名为
LazyLayout
的新实验性 API。它是我们在内部用于支持 Lazy 列表和网格的 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()
,该 api 允许检查我们是否没有嵌套可滚动容器。您可以在通过LazyLayout
创建自己的可滚动 lazy 布局时使用它。 (Id6fab, b/233352497) - 移除了
androidx.compose.foundation.lazy
包中已弃用的LazyVerticalGrid
。新的稳定 api 位于androidx.compose.foundation.lazy.grid
中 (I73c76, b/225192009)
版本 1.2.0-beta03
2022 年 6 月 1 日
androidx.compose.foundation:foundation:1.2.0-beta03
和 androidx.compose.foundation:foundation-layout:1.2.0-beta03
已发布。 版本 1.2.0-beta03 包含这些提交。
API 变更
- 添加了新的实验性
IntervalList
和MutableIntervalList
。它允许通过多个间隔表示值的列表。当您想定义自己的 DSL(类似于LazyColumn
使用的 DSL)时,这将非常有用,其中可以通过多个 item/items 调用定义列表项。 (I2d05e, b/228580728)
Bug 修复
- 澄清了
WindowInsets.ime
的文档,说明ime
insets 早在 API 23 时就已报告,但仅在 30+ 时才具有动画效果。 (Ia7fc0, b/230756508) - 当光标位于文本字段末尾时按前进删除键将不再导致崩溃。
DeleteSurroundingTextCommand
和DeleteSurroundingTextInCodePointsCommand
现在要求它们的构造函数参数为非负数。 (Ica8e6, b/199919707)
版本 1.2.0-beta02
2022 年 5 月 18 日
androidx.compose.foundation:foundation:1.2.0-beta02
和 androidx.compose.foundation:foundation-layout:1.2.0-beta02
已发布。 版本 1.2.0-beta02 包含这些提交。
- 以前,如果可下载字体解析未改变 Text 或
TextField
的布局大小,则不会重绘,导致字体显示过时。此错误修复确保文本布局始终触发重绘 (b/229727404)。 (I1d49e, b/229727404)
版本 1.2.0-beta01
2022 年 5 月 11 日
androidx.compose.foundation:foundation:1.2.0-beta01
和 androidx.compose.foundation:foundation-layout:1.2.0-beta01
已发布。 版本 1.2.0-beta01 包含这些提交。
新功能
- 这是 1.2 的第一个 Beta 版本!
API 变更
- 添加了实验性
BeyondBoundsInterval
,自定义LazyList
实现可以在布局超出可见边界的项时使用它 (Ifabfb, b/184670295) LineHeightBehavior
已重命名为LineHeightStyle
LineVerticalAlignment
已重命名为LineHeightStyle.Alignment
- 重命名
LineHeightTrim
已重命名为LineHeightStyle.Trim
- 已移除
LineHeightStyle
的默认构造函数值 (I582bf, b/181155707) - 为
LazyLayoutItemProvider
接口的可选成员添加了默认值。 (Iba8a0) - 在
LazyLayoutItemProvider
api 中,我们现在有一个接受索引的更简单的可组合函数 Item,而不是返回按索引的 composable lambda 的工厂。 (Id2196) - LazyLayoutItemsProvider 已重命名为 LazyLayoutItemProvider (I0638c)
LazyLayoutItemsProvider.itemsCount
已重命名为itemCount
(Id409c)- 在
TextStyle
和SpanStyle
中添加了 Brush,以提供使用渐变着色绘制文本的方法。 (I53869, b/187839528) LineHeightBehavior
的trimFirstLineTop
、trimLastLineBottom
属性更改为单个枚举:LineHeightTrim
。LineHeightTrim
具有由两个布尔值定义的 4 个状态值:FirstLineTop
、LastLineBottom
、Both 和 None (Ifc6a5, b/181155707)在
TextStyle
和ParagraphStyle
中添加了LineHeightBehavior
。LineHeightBehavior
控制行高是否应用于第一行的顶部和最后一行的底部。它还定义了行在TextStyle
(lineHeight
) 提供的空间中的对齐方式。例如,可以通过
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
获得类似于 CSS 定义的行为。trimFirstLineTop
、trimLastLineBottom
配置仅在includeFontPadding
为 false 时正常工作。 (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)
外部贡献
MouseInjectionScope.scroll(delta = someDelta)
在 Android 上垂直滚动时现在已反转(如果 someDelta 为正,则将向下滚动) (Ifb697, b/224992993)
版本 1.2.0-alpha08
2022 年 4 月 20 日
androidx.compose.foundation:foundation:1.2.0-alpha08
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha08
已发布。 版本 1.2.0-alpha08 包含这些提交。
API 变更
- 在 Android 上使用
FontFamily.SansSerif
时,显示系统字体的所有可用权重。这将在 API 21-28 内部使用 sans-serif-medium 等回退字体名称。这是一种行为变更,因为之前在 API 21-28 上仅支持 400 和 700 权重。 (I380fe, b/156048036, b/226441992) - Paragraph 和 MultiParagraph 现在接受 Constraints 参数。传递
Constraints.maxHeight
目前无效,但将来可以进行一些计算,例如基于高度的省略。 (I6afee, b/168720622) SubcomposeSlotReusePolicy.getSlotsToRetain()
现在接受一个不允许添加新项的自定义 MutableSet 类似类。 (Icd314)- 在
PointerInputChange
中已弃用部分消耗(down 或 position)。您可以使用consume()
完全消耗变更。您可以使用isConsumed
来确定其他人是否已消耗了该变更。 PointerInputChange::copy()
现在总是进行浅拷贝。这意味着一旦其中一个拷贝被消耗,PointerInputChange
的拷贝也会被消耗。如果您想创建一个不受约束的PointerInputChange
,请改用构造函数。 (Ie6be4, b/225669674)- 引入了新的实验性
LazyLayout
API。这允许您构建自己的组件,例如LazyColumn
或LazyVerticalGrid
。请注意,此 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,该 API 允许 lazy 布局的子项阻止当前组合的项被释放 (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()
应该被focusRequester()
修饰符与focusProperties()
结合使用替代。这允许修饰符具有更强的关注点分离。 (I601b7)- 添加了
WindowInsets.asPaddingValues(Density)
,以允许开发者无需在组合中进行转换。 (I94c35) - 更新了矢量可绘制对象的解析,以支持自动镜像,以便在当前布局方向为 RTL 时翻转
VectorPainter
的内容。 (I79cd9, b/185760237)
Bug 修复
- 如果滚动区域调整大小且之前聚焦的可组合项可见,则滚动修饰符(
Modifier.verticalScroll()
、Modifier.horizontalScroll()
和Modifier.scrollable()
)现在将滚动以保持聚焦的可组合项可见。 - 当 TextFields 聚焦且键盘显示时,如果在非 lazy 可滚动区域内且软输入模式为
ADJUST_RESIZE
,它们现在将保持在键盘上方。 (I4a485, b/190539358, b/192043120, b/216842427)
版本 1.2.0-alpha05
2022 年 3 月 9 日
androidx.compose.foundation:foundation:1.2.0-alpha05
和 androidx.compose.foundation:foundation-layout:1.2.0-alpha05
已发布。 版本 1.2.0-alpha05 包含这些提交。
API 变更
LazyVerticalGrid
和LazyHorizontalGrid
现已稳定。 (I307c0)LazyGridItemInfo.Unknown
已替换为单独的LazyGridItemInfo.UnknownRow
和LazyGridItemInfo.UnknownColumn
(I56d51)LazyVerticalGrid
/LazyHorizontalGrid
及所有相关 api 已移至.grid
子包中。请将导入从androidx.compose.foundation.lazy
更新为androidx.compose.foundation.lazy.grid
。 (I2d446, b/219942574)- 文本:
includeFontPadding
现在默认关闭。由于includeFontPadding=false
导致的剪切问题已得到处理,对于高大的脚本不应发生剪切。 (I31c84, b/171394808) - Measured 接口现在公开 parentData 属性 (I3313f)
- 引入了实验性
Modifier.onFocusedBoundsChanged
,以允许观察子焦点项的边界。 (I14283, b/220030968, b/190539358, b/192043120, b/216842427) - LazyHorizontalGrid 已添加。 (I61ae7, b/191238807)
- 添加了新的
LazyVerticalGrid
API 以定义交叉轴大小 (I17723) - 添加了 FocusGroup 修饰符 (I64bc0, b/213508274, b/184670295)
Bug 修复
WindowInsets.toString()
现在将显示正确的值。 (I1585d)
外部贡献
- 更新为使用 Kotlinx coroutines 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
现在支持在跨度不适合当前行的项之前进行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() 的 lazy 网格项启用动画。 (Ib6621, b/211753218)
BringIntoViewRequester
现在将请求传播到托管的 Android View。 (Ia7a51)FontFamilyResolver
现在可通过LocalFontFamilyResolver.current
获取- 添加了
createFontFamilyResolver(context)
和createFontFamilyResolver(context, coroutineScope)
,用于在 Compose 用法之外创建新的 FontFamily 解析器。 - Paragraph 和 MultiParagraph 现在接受
FontFamily.Resolver
TextLayoutResult.layoutInput.fontFamilyResolver
现在包含用于此布局的解析器,已弃用TextLayoutResult.layoutInput.resourceLoader
,因为它不再使用。 (Id5a45, b/174162090)
- 添加了
- 添加了
AndroidFont
,这是一个新的低级 API,用于在 Android 上提供新型字体资源描述符。例如,从应用特定后端加载字体、选择性地查找设备上预安装的字体,或从当前 Font factories 未提供的资源加载字体。- 扩展了
Font.ResourceLoaded
API 以支持可选和异步字体加载。不建议应用开发者直接使用此 API。要添加新型字体,请参阅 AndroidFont。 Font.AndroidResourceLoader
扩展函数允许在组合之外构建Font.ResourceLoader
。- 添加了
loadingStrategy
参数到基于资源的字体,以允许在资源字体引用可下载字体 XML 时进行异步加载。 (Ie5aea, b/174162090)
- 扩展了
- 已弃用
Typeface(FontFamily)
构造函数。此构造函数以前用于预加载字体,对于可下载字体可能需要长达 10 秒。对于可下载字体,此调用可能会阻塞 10 秒。请改用FontFamilyResolver.preload
- 已弃用
fontResource(FontFamily): Typeface
。此函数以前用于预加载字体,对于可下载字体可能需要长达 10 秒。请改用FontFamilyResolver.preload
(If8e7c, b/174162090)
- 已弃用
- 您现在可以为
LazyVerticalGrid
的项指定内容类型 -LazyGridScope
上的 item/items 函数现在接受此类参数。提供此类信息有助于项组合重用逻辑,从而提高效率,并且仅在相同类型的项之间重用内容。(I7b355、b/215372836) LazyListLayoutInfo
和LazyGridLayoutInfo
现在有了新属性:viewportSize
、orientation
、reverseLayout
(Ifc8ed、b/200920410)- 您现在可以为 LazyColumn/LazyRow 的项指定内容类型 - LazyListScope 上的 item/items 函数现在接受此类参数。提供此类信息有助于项组合重用逻辑,从而提高效率,并且仅在相同类型的项之间重用内容。(I26506)
- 接受
maxSlotsToRetainForReuse
的SubcomposeLayoutState
构造函数现已废弃。取而代之的是一个新的构造函数,它接受SubcomposeSlotReusePolicy
- 一个新接口,可以更精细地控制应该保留哪些槽以供将来重用。(I52c4d) - 添加了用于
WindowInsets
的 Modifier,包括内边距和尺寸。这允许某些内容延伸到内嵌区域,同时主要内容保持在内嵌区域之外。例如,windowInsetsPadding
可用于填充内容区域,以避免可能被完全或部分覆盖的区域。(Id0395、b/213942085)
Bug 修复
- 当 TextFields 被聚焦且软键盘显示时,在软输入模式为
ADJUST_PAN
时,它们现在将保持在软键盘上方。(I8eaeb、b/190539358、b/192043120) - 桌面端使用组合本地(composition local)来处理
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
Modifiers,方便访问 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) - 为放大镜 modifier 添加了
onSizeChanged
回调。(I6879f) - 在
SelectionContainer
中拖动选择手柄时,放大镜小组件现在会显示。(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 Overcroll 效果
- 改进了触控目标尺寸
- 请注意,相对于 Compose 1.0,Material 组件将扩展其布局空间,以满足 Material 无障碍功能指南对触控目标尺寸的要求。例如,Button 触控目标将扩展到最小尺寸 48x48dp,即使您将 Button 的尺寸设置为更小。这使得 Compose Material 与 Material Design Components 的行为保持一致,如果您混用 Views 和 Compose,则可提供一致的行为。此更改还确保当您使用 Compose Material 组件创建 UI 时,将满足触控目标无障碍功能的最低要求。
- 稳定支持 Navigation Rail
- 将许多以前的实验性 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
中的可空性(I7078a、b/204917439) - 添加了实验性 API,允许将 PointerInputchange 作为一个整体消费,或检查它是否已被消费。(I2e59d)
- 在文本字段内拖动光标或选择手柄时,显示一个放大镜小组件。(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)
添加了实验性能力来为 Lazy 列表项位置添加动画。在 LazyItemScope 内有一个新的 modifier
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
提供 key 时,此 modifier 将启用项重新排序动画。除了项重新排序外,所有其他由于排列或对齐更改导致的位置更改也将被动画处理。(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 修复
- 现在,Ripple 和其他指示仅在
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 变更
- 添加了无子级的 Layout 重载,提高了效率。(Ib0d9a)
SemanticsNodeInteraction.performSemanticsAction
现在返回调用该函数的SemanticsNodeInteraction
。(I9e5db)- 添加了
performScrollToNode(matcher: SemanticsMatcher)
,该函数会将可滚动的容器滚动到与给定匹配器匹配的内容处。(Ic1cb8)
版本 1.1.0-alpha05
2021 年 9 月 29 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha05
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha05
。版本 1.1.0-alpha05 包含这些提交。
API 变更
- 向 PointerEventChange 添加了实验性历史指针。(Ic1fd8、b/197553056、b/199921305)
Bug 修复
- 修复了可滚动项(包括 lazy 和非 lazy)在滚动方面的无障碍功能支持问题(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 设备上添加了对拉伸过度滚动(stretch overscroll)的支持。(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 变更
- 添加了滚动的辉光效果(Glow effect)。新增了实验性 OverScrollConfiguration API,允许配置过度滚动的视觉效果。提供 null 以关闭过度滚动效果。(I0c304、b/171682480)
- AwaitPointerEventScope 现在具有 withTimeout() 和 withTimeoutOrNull()(I507f0、b/179239764、b/182397793)
- 添加了获取裁剪边界的测试方法。(I6b28e)
- 将最小触控目标尺寸添加到 ViewConfiguration 中,用于语义和指针输入,以确保无障碍性。(Ie861c)
版本 1.1.0-alpha02
2021 年 8 月 18 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha02
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha02
。版本 1.1.0-alpha02 包含这些提交。
API 变更
- 为
Modifier.size
和requiredSize
添加了 DpSize 版本(I3fc7e、b/194219828)
版本 1.1.0-alpha01
2021 年 8 月 4 日
发布了 androidx.compose.foundation:foundation:1.1.0-alpha01
和 androidx.compose.foundation:foundation-layout:1.1.0-alpha01
。版本 1.1.0-alpha01 包含这些提交。
API 变更
- 更新了使用源矩形和目标矩形的
DrawScope#drawImage
方法,以接收可选的 FilterQuality 参数。这对于在放大后需要像素化以进行基于像素的艺术处理的像素艺术非常有用。更新了 BitmapPainter + Image composable,使其也接受可选的 FilterQuality 参数(Ie4fb0、b/180311607) - TextField 现在在按下返回按钮时会清除选择,这与 Android EditText 的行为一致。(I3ca16、b/174173645)
- 添加了光标手柄。(I07a82、b/173016579)
Bug 修复
- 现在,对于 lazy 列表和常规滚动组件,通过语义操作进行的滚动是动画的。(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 Release 博客了解更多详情!
已知问题
如果您使用的是 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 修复
- 禁用的 Button、Card、Checkboxes 以及整体
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 项指定唯一 key 时,滚动位置将基于 key 进行维护,这意味着如果您在当前可见项之前添加/移除项,具有给定 key 的项将保持为第一个可见项。(Id263f、b/184257857)
- key 常量目前是 @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
中指定。文件中的每一行指定一个规则,其中规则是用于匹配库中方法或类的模式。这些规则的语法是人类可读的 ART 配置文件格式的超集,当使用adb shell profman --dump-classes-and-methods ...
时使用。这些规则有两种形式,用于针对方法或类。方法规则具有以下模式
<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
标志的方法表示此方法是“热点”方法,应该提前编译。带有
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 语句的问题。
- 为 clickable / toggleable 添加了点击超时,以防止在滚动 / 拖动期间显示 ripple 效果。(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)
- 全选后显示工具栏( 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)
- 添加了 Clip Selection Handle ( Iff80d, b/183408447)
Bug 修复
- LazyColumn/Row 现在即使项目已滚出屏幕,也会保持最多 2 个先前可见的项目处于活动状态(未销毁)。这允许组件在需要组合新项目时重用活动子组合,从而提高滚动性能。( Ie5555)
- 移除了 paintBackground。( I38660)
- 使用 DrawScope 绘制选择背景。( I73c61, b/186674472)
- 修复了 beta06 版本中影响使用 spacedBy 排列方式布局加权子项的 Row/Column 的回归问题。( Ifaf8c, b/187326588)
版本 1.0.0-beta06
2021年5月5日
androidx.compose.foundation:foundation:1.0.0-beta06
和 androidx.compose.foundation:foundation-layout:1.0.0-beta06
已发布。版本 1.0.0-beta06 包含这些提交。
API 变更
- 解决与导航手势的冲突( I1145e)
- 添加了 CollectionInfo 和 CollectionItemInfo 无障碍 API,允许为无障碍服务标记集合及其项目( Id54ef, b/180479017)
- 添加了
SemanticsActions.ScrollToIndex
用于将带有索引的项目列表滚动到特定索引的项目,以及SemanticsProperties.IndexForKey
用于获取带有键的项目列表中某个项目的索引。这两个操作均由 LazyList 实现。- 添加了
SemanticsNodeInteraction.performScrollToIndex
用于将列表滚动到给定索引,以及SemanticsNodeInteraction.performScrollToKey
用于将列表滚动到具有给定键的项目。( I4fe63, b/178483889, b/161584524)
- 添加了
- AnnotatedString 保存支持到 TextFieldValue.Saver。向 AnnotatedString.Builder 添加了 addTtsAnnotation 和 withAnnotation 工具函数( I8cbdc, b/178446304)
- 向
PaddingValues(horizontal, vertical)
添加了默认的0.dp
参数值( I05571, b/181336792)
Bug 修复
- 带有
weight(fill = false)
的 Row 和 Column 子项不再使父项填充整个可用主轴空间。( Ied94d, b/186012444, b/184355105)
版本 1.0.0-beta05
2021年4月21日
androidx.compose.foundation:foundation:1.0.0-beta05
和 androidx.compose.foundation:foundation-layout:1.0.0-beta05
已发布。版本 1.0.0-beta05 包含这些提交。
API 变更
- FlingBehavior 接口现在标记为 @Stable。所有实现都应遵守
@Stable
契约。( I93354, b/184830577)
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) 在此更改之前,局部可组合函数基于其参数可以跳过。此更改后,任何局部可组合函数都不会跳过。之所以进行此更改,是因为局部函数捕获父级参数是常见且预期的行为,而它们跳过是常见的错误来源。
总而言之,考虑以下示例
@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
composition local API,以取代 TextField 上先前的 SoftwareKeyboardController 接口。( I5951e, b/168778053) - 添加了新的
LocalSoftwareKeyboardController
composition local 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,并成为一个 fun 接口。布局 API 已更新/简化以使用 MeasurePolicy。( Icab48, b/167662468, b/156751158)
InteractionState
已被[Mutable]InteractionSource
取代- 接口负责发出/收集交互事件。
- 不再将
interactionState = remember { InteractionState() }
传递给 `Button` 和 `Modifier.clickable()` 等组件,而是使用interactionSource = remember { MutableInteractionSource() }
。 - 不再使用:
Interaction.Pressed in interactionState
,而应该使用 InteractionSource 上的扩展函数,例如 InteractionSource.collectIsPressedAsState()。 - 对于复杂的用例,您可以使用 InteractionSource.interactions 来观察交互流。请参阅 InteractionSource 文档和示例了解更多信息。
- ( I85965, b/152525426, b/171913923, b/171710801, b/174852378)
- 移除了已弃用的 LayoutCoordinates 方法,对于 positionInParent 和 boundsInParent,请使用函数而不是属性( I580ed, b/169874631, b/175142755)
- 为 CoreTextField 等低级文本组件的输入会话创建了新的 TextInputSession。( I8817f, b/177662148)
- Placeable 现在公开了 measuredSize,表示子布局实际测量的尺寸。此尺寸可能不遵守测量约束。( Ib2729, b/172560206, b/172338608)
- 添加了 selectionGroup 修饰符,用于为无障碍目的标记 Tabs 或 RadioButtons 的集合( 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 }
作为默认工厂提供。我们不建议使用非可空类型的 locals,除非可以提供合理的默认值。如果不存在合理的默认值,
defaultFactory
lambda 应抛出异常。但是,抛出异常意味着 locals 的使用者将对其被提供存在隐式依赖,而这并未由类型系统强制执行。( Ifbd2a)将
Indication#createIndication()
更改为Indication#rememberUpdatedIndication(InteractionState)
,并从 IndicationInstance#drawIndication()
中移除了InteractionState
参数。IndicationInstance 应仅负责绘制视觉效果,而不应响应 InteractionState 更改启动动画/写入状态。这些动画和状态写入应在rememberUpdatedIndication()
中发生。Modifier.indication
中的indication
参数也已更改为必需参数。( Ic1764, b/152525426)文本操作现在自动检查焦点( I13777, b/179648629)
移除了
runBlockingWithManualClock
( I15cdc, b/179664814)Modifier.verticalScroll()/horizontalScroll() 中的滚动位置现在用 Int 表示( I81298)
smoothScrollBy 和 scrollBy 方法的包已更改为
androidx.compose.foundation.gestures.*
( I3f7c1, b/175294473)FlingConfig 已重命名为 FlingBehavior,现在允许自定义挂起动画,而不是预定义的衰减。( I02b86, b/175294473)
尺寸修饰符已重命名。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。( I5b414)
defaultMinSizeConstraints 已重命名为 defaultMinSize。( I4eaae)
Modifier.tapGestureFilter 已移除。请改用
Modifier.pointerInput { detectTapGestures(...) }
。( I266ed, b/175294473)从指针输入系统中移除了部分消耗。协调部分消耗的推荐方法是 Modifier.nestedScroll。( Ie9c9b)
Orientation 已移至 foundation 包。VelocirtTracker 已从 ui.gesture 移至 ui.input.pointer。( Iff4a8, b/175294473)
AnimationClockObservable 及其子类已移除。AnimatedFloat 已移除。( Icde52, b/177457083)
drawerState.open() 和 drawerState.close() 现在是 suspending 函数。使用 rememberCoroutineScope() 获取组合的作用域来调用它们( I16f60, b/175294473)
Providers 已重命名为 CompositionLocalProvider
- Composition 构造函数不再接受 key 参数,并且已弃用。
- currentCompositeKeyHash 已变为一个可组合的顶层属性,而不是一个可组合的顶层函数。
- CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空间
- ComposableLambda 已成为一个接口,而不是具体类,并且不再具有类型参数。
- ComposableLambdaN 已成为一个接口,而不是具体类,并且不再具有类型参数。
- snapshotFlow 函数已移至 androidx.compose.runtime 命名空间
- SnapshotMutationPolicy 的 merge 方法不再是实验性的了
- 已移除
@TestOnly
顶层 clearRoots 函数。它不再是必需的。 - keySourceInfoOf 和 resetSourceInfo 函数已移除。它们不再是必需的。
- Composer.collectKeySourceInformation 已移除。它不再是必需的。
- isJoinedKey、joinedKeyLeft 和 joinedKeyRight 方法已移除。它们不再是必需的。
- 各种顶层 API 已被移动并重组到不同的文件中。由于 Kotlin 的文件类语义,这将破坏二进制兼容性,但不会破坏源兼容性,因此对于大多数用户来说应该不是问题。
- ( I99b7d, b/177245490)
Modifier.scrollable 已被重写。现在它使用 Scrollable 接口而不是 ScrollableController 类( I4f5a5, b/174485541, b/175294473)
Modifier.draggable 现在接受 DraggableState 而不是简单的 lambda。您可以通过
rememberDraggableState { delta -> }
创建状态以获得与之前相同的行为( Ica70f, b/175294473)添加了 requiredWidth(IntrinsicSize) 和 requiredHeight(IntrinsicSize) 修饰符,用于强制调整到固有尺寸。( I0a6b4)
已移除已弃用的
emptyContent()
。请改用{}
。( Idb33f, b/179432510)删除了之前一些已弃用的 API ( Ice5da, b/178633932)
Bug 修复
- 添加了新的 LocalSoftwareKeyboardController composition local 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 keys 来指示何时应为新的依赖项重新启动指针输入检测协程。( I849cd)
- 测试更新:hasText() 将检查文本字段中的输入文本以及标签/提示/占位符文本( Iab803)
- 添加了 PaddingValues.Absolute,可在接受 PaddingValues 的 API 中使用。( Ia5f30)
- onImeActionPerformed 已弃用。请改用 KeyboardActions ( If0bbd, b/179071523)
- 为了更好地与 ImageBitmap 和 ImageVector 的命名约定匹配,ImagePainter 已重命名为 BitmapPainter,与 VectorPainter 并行。( Iba381, b/174565889)
- 改进了 substring 测试 API,现在 substring 作为参数( Icbe78)
- 引入了一个
InfiniteAnimationPolicy
协程上下文元素,将在无限动画中应用。默认情况下未安装任何策略,除非使用ComposeTestRule
运行测试。( I50ec4, b/151940543) - Animatable.snapTo 和 Animatable.stop 现在是 suspend 函数( 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 }) { ... } }
- ( Ia50ef, b/164901852)
将 Indication#createInstance 更改为 @Composable,并将 LocalIndication 更改为包含一个 Indication,而不是 () -> Indication。( I5eeea, b/157150564)
Constraints.enforce
已被Constraints.constrain
取代。( I8b8ea)loadFontResource 已弃用。请改用 fontResource。imageResource、loadImageResource、vectorResource 和 loadVectorResource 已弃用。请改用 painterResource。( I6b809)
出于性能原因,ScrollAxisRange semantics 现在接受返回 Floats 的 lambdas,而不是直接的 Float 值。( If4a35, b/178657186)
添加了 EditableText semantics,用于为无障碍标记文本字段的可编辑输入文本,以及相应的测试方法来检查 semantics ( I8e07a)
Modifier.clickable 现在不支持双击和长按。请改用 Modifier.combinedClickable 来实现此功能。( Iafad1)
toIntPx() 已重命名为 roundToPx()。( I9b7e4, b/173502290)
IntBounds 已重命名为 IntRect,并且 API 已改进。( I1f6ff)
Modifier.dragGestureFilter 已弃用。请改用
Modifier.pointerInput { detectDragGestures (...)}
。或者,对于单轴拖动,请使用 Modifier.draggable ( I0ba93, b/175294473)重命名了 Ambients 以匹配 Ambient -> CompositionLocal 的重命名。以前 Ambients 命名为 AmbientFoo,现在 CompositionLocals 命名为 LocalFoo。( I2d55d)
Selection 已移至 foundation。( I7892b)
与我们之前移除
state { 0 }
可组合函数并现在推广使用remember { mutableStateOf(0) }
类似,我们将移除savedInstanceState { 0 }
可组合函数。您应该改用rememberSaveable { mutableStateOf(0) }
,如果 MutableState 中使用的类型可以存储在 Bundle 中,它将自动保存和恢复。如果您之前传递了自定义 saver 对象,现在需要使用 rememberSaveable 的新重载,该重载具有stateSaver
参数。用法将如下所示:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }
( Ib4c26, b/177338004)添加了密码 semantics 用于无障碍( 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 将继续 recomposition,直到组合子协程完成。Recomposer.shutDown 重命名为 cancel,与 close 形成对比。( Ib6d76)
与 LazyVerticalGrid 相关的 API 标记为实验性的( Ia53e3, b/178519862)
rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 包。( I1366e, b/177338004)
RestorableStateHolder 已重命名为 SaveableStateHolder 并移至 androidx.compose.runtime.saveable 包。内部方法 RestorableStateProvider 已重命名为 SaveableStateProvider。移除了泛型类型,因此您只需将 Any 作为键传递即可。不再需要 Experimental 注解。( I0902e, b/174598702)
Saver, listSaver(), mapSaver(), autoSaver 已从 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable ( I77fe6)
构件 androidx:compose:runtime:runtime-saved-instance-state 已重命名为 androidx:compose:runtime:runtime-saveable ( I6dcac)
ui 包中许多长期弃用的 API 已删除。( I2f2dc)
compose:runtime-dispatch 构件现在已弃用。MonotonicFrameClock 现在可以在 compose:runtime 中找到,而 AndroidUiDispatcher 可以在 compose:ui 中找到。( Ib5c36)
RounderCornerShape、CutCornerShape 和 CornerBasedShape 上的参数从 left/right 重命名为 start/end,以支持形状在 rtl 方向上的自动镜像。引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape,用于不需要自动镜像的情况。( I61040, b/152756983)
canDrag 已从 Modifier.scrollable 中移除。( Id66e7, b/175294473)
Compose 编译器插件的目标 API 已重构,使用接口而不是具体类。该接口也不再使用类型参数。
这是一个内部更改,不应影响源代码兼容性,但会破坏二进制兼容性。
Modifier.scaleGestureFilter 已移除。请改用 Modifier.zoomable。或者,使用
Modifier.pointerInput { detectMultitouchGestures { ... }
( Id5da1, b/175294473)AnimatedValue/Float 现在已弃用。请改用 Animatable。( I71345, b/177457083)
- 从公共 API 中移除了 CoreText 和 CoreTextField
- 移除了已弃用的 SelectionContainer 重载( I99c19)
移除已废弃的非 suspend 滚动函数。继续上一版本的更改,非 suspend 滚动函数现已完全移除。请转换为同名的 suspend 函数。可以通过 rememberCoroutineScope() 获取协程作用域。(I3d39c, b/178169563)
androidx.compose.foundation.layout.ConstraintLayout 已废弃,请优先使用 androidx.constraintlayout.compose.ConstraintLayout。您需要添加对
androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01
的依赖。(I87adc)tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicaitonGestureFilter 已废弃。请改用 Modifier.clickable 或 Modifier.pointerInput 以及 detectTapGestures 函数。(I6baf9, b/175294473)
移除了
Recomposer.current()
。[Abstract]ComposeView 现在默认使用由窗口的 ViewTreeLifecycleOwner 驱动的惰性创建、窗口作用域的 Recomposer。当宿主 Lifecycle 停止时,重组和基于 withFrameNanos 的动画帧暂停。(I38e11)Recomposer.runningRecomposers 现在提供了一个全局的只读 RecomposerInfo StateFlow,用于观察进程中正在进行的组合状态。相比于现已废弃的 Recomposer.current(),更推荐使用此 API。(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 变更
废弃非 suspend 的 scrollBy,移除非 suspend 的 scrollTo
我们现在推荐使用 suspend 函数来控制滚动并等待滚动完成。作为此过渡的一部分,我们正在废弃和/或移除这些函数的非 suspend 版本。(Ie9ced)
废弃非 suspend 的 smoothScrollBy。我们现在推荐使用 suspend 函数来控制滚动并等待滚动完成。作为此过渡的一部分,我们正在废弃这些函数的非 suspend 版本。(I12880)
Image 和 Icon 中添加了 content description 参数。它用于向无障碍服务提供描述。(I2ac4c)
BasicTextField 接收了一个名为 'decorationBox' 的新参数。它允许为文本字段添加图标、占位符、标签等装饰,并增加其点击目标区域。(I16996)
Modifier.draggable 中移除了 canDrag 参数。(Ic4bec, b/175294473)
接受 FlingConfig 的 AnimatedFloat.fling 已移除。请改用 suspend Animatable.animateDecay。(I4659b, b/177457083)
从以下类中移除了
data class
- InlineTextContent
- LocaleList
- (I605c7)
clickable、toggleable 和 selectable 现在可以在组合外部创建。(I0a130, b/172938345, b/175294473)
ScrollableColumn/Row 已废弃。当您有大量可滚动内容时,与 LazyColumn 相比,使用 ScrollableColumn 的效率较低,因为 LazyColumn 只能组合/测量/绘制可见元素。为了避免用户采用低效的方式,我们决定废弃 ScrollableColumn 和 ScrollableRow,并推荐使用 LazyColumn 和 LazyRow。用户仍然可以决定不需要惰性行为,并直接使用修饰符,例如:Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b, b/170468083)
LazyColumn/LazyRow/LazyVerticalGrid 的作用域添加了新的
items(count: Int)
工厂方法。items(items: List)
和itemsIndexed(items: List)
现在是扩展函数,因此在使用时需要手动导入。Arrays 的新扩展重载:items(items: Array) 和 itemsIndexed(Array) (I803fc, b/175562574)已废弃的 AbsoluteArrangement 已移除。(Iffa96, b/177641870)
在 Box 中添加了 propagateMinConstraints 参数,用于指定传入的最小约束是否应该传递给 Box 的内容。默认值为 false。(I0125b, b/152613457)
Bug 修复
- onCommit、onDispose 和 onActive 已废弃,请优先使用 SideEffect 和 DisposableEffect API。(If760e)
- WithConstraints 被重构为 BoxWithConstraints 并移至 foundation.layout。(I9420b, b/173387208)
Font/FontFamily/Typeface 工厂函数更改
- 添加了以大写字母开头的工厂函数
- 废弃了之前以小写字母开头的工厂函数
- 新的工厂函数返回 FontFamily 而不是其子类
- 隐藏了子类的构造函数,以便只能通过工厂函数构造它们。
- 将 Font.asFontFamily 重命名为 Font.toFontFamily
- (I42aa7)
引入了
ComposeContentTestRule
,它扩展了ComposeTestRule
并定义了setContent
,setContent
已从ComposeTestRule
中移除。添加了一个工厂方法createEmptyComposeRule()
,它返回一个ComposeTestRule
并且不会为您启动 Activity。当您想在测试期间启动 Activity 时使用此方法,例如使用ActivityScenario.launch
。(I9d782, b/174472899)animateAsState 现在是 animateFooAsState,其中 Foo 是正在动画处理的变量的类型。例如 Float、Dp、Offset 等。(Ie7e25)
Density 现在是 Arrangement 接口的接收者作用域。(I18aad)
TextFieldValue 接受 AnnotatedString。但是这仅是 API 更改,多样式文本编辑尚未实现。
- 从 EditingBuffer 构造函数参数中移除了
initial
。(I326d5)
- 从 EditingBuffer 构造函数参数中移除了
invalidate 和 compositionReference() 已废弃,请分别优先使用 currentRecomposeScope 和 rememberCompositionReference。(I583a8)
AnnotatedString 已更改为继承自 kotlin.CharSequence。因此,length 和 subSequence 现在是实例函数,并移除了扩展函数。(Iaf429)
Duration 和 Uptime 将被 Long 毫秒替换,这一步移除了指针输入对这些类的依赖。(Ia33b2, b/175142755, b/177420019)
RememberObserver 替换了 CompositionLifecycleObserver,并且 CompositionLifecycleObserver 现已废弃。
RememberObserver
替换了CompositionLifecycleObserver
,并修改了语义并重命名了方法。对于仅被记住一次的对象(这是推荐的做法,并且将继续如此),可以机械地切换到新 API。但是,如果在组合中引用被记住多次,则onRemembered
对每个引用都会调用,而onEnter
只调用一次。如果对象在子组合(例如WithConstraints
和Scaffold
)中使用,则onEnter
会被多次调用,这使得单个onEnter
调用的保证不可靠,因此已从RememberObserver
中移除。RememberObserver
添加了onAbandoned
,如果在传递给remember
的回调中返回RememberObserver
实例,但该实例未在组合状态中被记住,则会调用此方法,因此永远不会调用onRemembered
。如果异常在组合完成之前终止了组合,或者因为组合正在为其生成的状态已不再是当前的或不再需要而被丢弃,则可能发生这种情况。如果遵循上述单引用建议的RememberObserver
实例正在跟踪外部资源,则onForgotten
和onAbandoned
都表明该资源不再需要。如果对象正在跟踪在onRemembered
中开始的工作或分配的资源,则可以忽略onAbandoned
,因为如果调用了onRemembered
,则不会调用onAbandoned
。(I02c36)将 TransformedText.transformedText 重命名为 TransformedText.text
- TransformedText 不再是 data class。(Ie672a)
以下类不再是 data class
- 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 现标记为实验性 API,因为可能会发生更改。(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 不再是 data class。(I3c898, b/168684531)
- VisualTransformation API 更改
- 将 OffsetMap 重命名为 OffsetMapping
- 将 OffsetMapping.identityOffsetMap 重命名为 OffsetMapping.Identity
- PasswordTransformation 不再是 data class
- 将 OffsetMapping 移至单独的文件
- (I0bdf3)
- EditOperations API 更改
- 将 EditOperation 重命名为 EditCommand
- 为 EditOperation 具体实现添加了 Command 后缀
- EditCommand 不再是 data class
- 将 EditOperation.process 函数重命名为 applyTo
- 将 InputEventListener 重命名为 InputEventCallback
- (I0a366)
- 修改了 Velocity,使其包含组件部分和数学运算。(Ib0447)
- 将 @ExperimentalTesting 重命名为 @ExperimentalTestApi,以便与其他实验性 API 注解保持一致。(Ia4502, b/171464963)
- 为 LazyColumn/LazyRow 添加了实验性的 stickyHeader 方法。(I0a81d)
- 将 Color.useOrElse() 重命名为 Color.takeOrElse()。(Ifdcf5)
- 废弃了 TestUiDispatcher。请改用 Dispatchers.Main。(Ic171f, b/175385255)
- 将 Toggle 添加到 foundation Strings.kt。(I4a5b7, b/172366489)
- 将 nativeClass 移至 ui 模块并设为内部。更新了 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,用于将 Selectable 更新通知给 SelectionManager。(I6ff30, b/173215242)
- 将
fun Dp.isFinite()
更改为val Dp.isFinite
。(I50e00) - Constraints#satisfiedBy 已重命名为 isSatisfiedBy。(I9cf5c)
- 为具有 Unspecified 常量的内联类添加了 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)- 添加了 Semantics 角色 API,并将 Role 作为 clickable、selectable 和 toggleable SemanticsModifier 的参数。更改了 Modifier.progressSemantics,以便 Slider 也可以使用它。(I216cd)
- 原生 keyEvent 现在可以通过 keyEvent.nativeKeyEvent 访问。(I87c57, b/173086397)
版本 1.0.0-alpha09
2020年12月16日
androidx.compose.foundation:foundation:1.0.0-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)
对于 suspending pointer input API,将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,将 handlePointerInput() 重命名为 awaitPointerEventScope()。(Idf0a1, b/175142755)
LazyListState.layoutInfo 已添加,它暴露了当前可见项的大小和偏移量列表。(If8678, b/170472532)
移除了 ExperimentalPointerInput 注解。(Ia7a24)
TextFields 添加了 InteractionState 支持。(I61d91)
为 LazyColumn/Row 添加了 reverseLayout 参数。当
true
时,项目将从下往上组合,并且LazyListState.firstVisibleItemIndex == 0
将意味着第一个项目位于底部。(I552ae, b/166589935)为 LazyColumn 添加了 verticalArrangement 参数。为 LazyRow 添加了 horizontalArrangement 参数。Arrangement 允许我们在项目之间添加间距,并在项目不足以填满整个最小尺寸时指定项目的排列方式。(Icf79a, b/170394300)
detectMultitouchGestures 现在使用一个回调,该回调包含组合的中心点、平移、缩放和旋转参数。(Ie6e1c)
将 ContentDrawScope 移至 ui-graphics 模块,使其与 DrawScope 在一起。(Iee043, b/173832789)
Bug 修复
- offset modifiers 中的 Lambdas 现在返回 IntOffset 而不是 Float。(Ic9ee5, b/174137212, b/174146755)
从公共 API 中移除了 SlotTable、SlotReader 和 SlotWriter。这些之前被标记为 InternalComposeAPI。现在它们是 compose 模块的内部。
CompositionData 和 CompositionGroup 已添加,作为 ui-tooling API 的替代品,用于提取组合信息。这些是公共的,但不适用于 ui-tooling API 之外,因为它们提供了 ui-tooling API 解析的原始信息。(I31a9c)
重构了 ShaderBrush,以便在绘制环境的大小信息可用时惰性创建着色器实例。这对于在组合时定义占据 composable 完整绘制边界的渐变很有用,而无需实现自定义 DrawModifier 实现。
废弃了 gradient 函数构造函数 API,请优先使用 Gradient 对象上的工厂方法。(I511fc, b/173066799)
Modifier.focusObserver 已废弃。请改用 Modifier.onFocusChanged 或 Modifier.onFocusEvent。(I30f17, b/168511863, b/168511484)
Autofill API 现为实验性 API,需要选择启用 (opt-in)。(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 composable 或 painter modifiers。(I2c703, b/173818471)
添加了 buildAnnotatedString 工厂函数,用于构建 AnnotatedString。废弃了 annotatedString builder 函数。(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) - 添加了 composable lambda 参数命名和位置的 lint 检查,以检查与 Compose 指南的一致性。同时根据 lint 检查和指导,将一些使用
children
作为尾随 lambda 名称的 API 迁移到content
。(Iec48e) foundation:foundation-text
API 移至foundation:foundation
。包结构保持不变。(Id3eb2)- 新的多点触控手势检测器,包括用于检测旋转、缩放和平移的辅助功能。(Ic459d)
- 新的拖动手势检测器 suspending pointer input API,包括方向锁定。(Icef25)
- 将 VectorAsset 重命名为 ImageVector。根据 API Council 指南,将 VectorAsset 移动并重命名为 Builder,使其成为 ImageVector 的内部类。添加了 VectorAssetBuilder 的类型别名,以链接到 ImageVector.Builder 实现兼容性。(Icfdc8)
- 将 ImageAsset 及相关方法重命名为 ImageBitmap。(Ia2d99)
- 将 foundation semantics 属性移至 ui。(I6f05c)
添加基于协程的滚动 API
添加了 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及用于滚动控制的低层 API。这些 API 提供了一个 suspend 接口来控制滚动,并在滚动完成后才返回。(Ie5642)
在 BasicTextField、TextField 和 OutlinedTextField 中添加了 singeLine 参数。将此参数设为 true 以使文本字段成为一个水平可滚动的单行。(I57004, b/168187755)
使用新的 suspending pointer input 添加了用于点击、双击、长按和按下指示的手势检测器。同时添加了一些实用程序,使开发者更容易编写自己的手势检测器。(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/辅助方法,以帮助从已废弃的 API 迁移到当前 API。(Id6044, b/173834241)
- 将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer。同时根据 API Council 的反馈,将相关类更新为 GraphicsLayer。(I0bd29, b/173834241)
- 从 SubcomposeLayout 声明中移除了
<T>
。您现在可以在不指定类型的情况下使用它。(Ib60c8) - 将 PointerInputData 的 uptime 和 position 字段设为非空。(Id468a)
- MaterialTheme 现在为选区手柄和选区背景设置了正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColors 自定义选区使用的颜色。(I1e6f4, b/139320372, b/139320907)
- Box 的 alignment 参数已重命名为 contentAlignment。(I2c957)
- offsetPx 修饰符已重命名为 offset。它们现在接受 lambda 参数而不是 State。(Ic3021, b/173594846)
- 添加了 WindowManager.isWindowFocused 以检查宿主窗口是否获得焦点,以及一个提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2a, b/170932874)
- 在 TextInputService#onStateUpdated 中添加了 resetInput 参数。(I3e8f5, b/172239032, b/171860947)
- 更新了 TextFieldValue API
- 将 TextFieldValue.composition 设为只读
- 移除了因无效选区范围而抛出的异常。(I4a675, b/172239032)
- 废弃了以后缀
Ambient
命名的 Ambients,并根据其他 Ambients 和 Compose API 指南,将其替换为以 Ambient 为前缀的新属性。(I33440) - 添加了 Android Typeface 包装器。您可以通过
typeface
函数加载 Android Typeface,例如typeface(Typeface.DEFAULT)
。同时将typefaceFromFontFamily()
重命名为typeface()
。(I52ab7) - 添加了 lint 检查,以检查 Modifier 工厂在内部使用
androidx.compose.ui.composed {}
,而不是被标记为@Composable
。(I3c4bc) - 添加了 lint 检查,以检查 Modifier 工厂函数是否定义为 Modifier 的扩展函数,以便它们可以流畅地链式调用。(I07981)
- Semantics 参数
mergeAllDescendants
已重命名为mergeDescendants
。 (Ib6250) - 测试中的时间控制 (
TestAnimationClock
及其用法) 现在处于实验阶段 (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 应用,您应该创建自己的特定于设计系统的主题 Ambient,以便在自己的组件中使用。 (I74acc, b/172067770) foundation.Text
已废弃,并替换为material.Text
。对于不依赖于主题值的基础、非特定的文本 API,请参阅androidx.compose.foundation.BasicText
。 (If64cb)- 为
TextFields
添加了maxLines
参数 (Ib2a5b) - 更新了
TextFields
,使其接受KeyboardOptions
(Ida7f3) - 添加了用于
TextFields
的KeyboardOptions
。 (I9ca32) - 添加了
BasicText
作为不依赖设计的文本 API,与BasicTextField
并行。 (I28268) ExperimentalLazyDsl
注解已移除。LazyColumn/LazyRow
现在可以在不添加@OptIn
的情况下使用。 (Idab7a, b/166584730)BaseTextField
已废弃。请改用BasicTextField
。 (I896eb)- 添加了
BasicTextField
,作为CoreTextField
和BaseTextField
的替代品。 (Id4cea) - 移除了已废弃的
LazyColumnItems/LazyRowItems
。 (I1d8a8) - 移除了用于根据固有测量值调整大小的已废弃的可组合项。 (I18537, b/171811496)
relativePaddingFrom
已重命名为paddingFrom
。添加了paddingFromBaseline
修饰符,方便指定布局边界到文本基线的距离。 (I0440a, b/170633813)- 为
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
注解已移除。SubcomposeLayout
现在可以在不添加@OptIn
的情况下使用。 (I708ad)- 引入
ui-test-junit4
模块。 (Ib91f8) - 更新了
Icon
API,使其可以将Color.Unspecified
作为可能的着色颜色,此时将绘制提供的资产或 Painter 而不应用 ColorFilter。之前尝试使用Color.Unspecified
忽略着色时,会使用透明颜色着色,最终导致没有任何内容被渲染。 (I049e2, b/171624632) MeasureResult
已移出MeasureScope
。 (Ibf96d, b/171184002)- 多个与布局相关的符号已从
androidx.compose.ui
移至androidx.compose.layout.ui
。 (I0fa98, b/170475424) androidx.ui.test
已移至androidx.compose.ui.test
(I9ffdb)FirstBaseline
和LastBaseline
已移至androidx.compose.ui.layout
包中。 (Ied2e7)- 添加了不带回调的
SelectionContainer
(Ibfadb) - 添加了
SelectionContainer
中选择柄位置的测试。 (Ie93db) - 添加了键盘自动更正 IME 选项 (I57b8d)
版本 1.0.0-alpha06
2020 年 10 月 28 日
androidx.compose.foundation:foundation:1.0.0-alpha06
、androidx.compose.foundation:foundation-layout:1.0.0-alpha06
和 androidx.compose.foundation:foundation-text:1.0.0-alpha06
已发布。版本 1.0.0-alpha06 包含这些提交。
API 变更
androidx.compose.foundation.Icon
已移至androidx.compose.material.Icon
。如果您不想使用 Material 库,也可以使用Image
组件 /Modifier.paint()
搭配 Painter。 (I9f622)- 为
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
添加了软换行功能。 (I21a4b)
Bug 修复
- 废弃
VectorPainter
,推荐使用rememberVectorPainter
,以便更好地指示可组合 API 在内部利用 'remember' 在多次组合期间持久化数据。 (Ifda43) - 在
ComposeTestRule
中启用了过渡;从ComposeTestRule
中移除了启用闪烁光标的选项。 (If0de3) - 为
CoreTextField
添加了单行键盘选项 (I72e6d) - 将
Radius
API 重命名为CornerRadius
,以便更好地表达其在 Compose 中的用途。更新了文档,以表明负数的角半径会被限制为零。 (I130c7, b/168762961) - 添加了在复合修饰符中指定检查器信息的能力。 (Idee08, b/163494569)
- 添加了键盘大写 IME 选项 (I8ac38)
- 修复了 RTL(从右到左)处理柄位置。 (I6e1e0)
- 重大变更:移除了
PointerInputFilter.onPointerEvent(...)
的返回值,因为指针事件中唯一可以更改的值是消费数据。现在,您不再从PointerInputFilter.onPointerEvent(...)
返回数据,而是直接修改传入的 PointerEvents 的消费数据。 (I6acd0) - 在选择菜单中添加了“全选”选项 (Ief02b)
版本 1.0.0-alpha05
2020 年 10 月 14 日
androidx.compose.foundation:foundation:1.0.0-alpha05
、androidx.compose.foundation:foundation-layout:1.0.0-alpha05
和 androidx.compose.foundation:foundation-text:1.0.0-alpha05
已发布。版本 1.0.0-alpha05 包含这些提交。
API 变更
CoreTextField
现在支持光标功能 (Id23aa)废弃了
contentColor()
和currentTextStyle()
API,并分别替换为AmbientContentColor
和AmbientTextStyle
Ambient。您可以通过在 Ambient 属性上使用.current
来访问当前值,就像使用其他 Ambient 一样。此更改是为了保持一致性并避免使用多种方式实现相同的功能。此外,还将某些 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.NaN
而不是Float.POSITIVE_INFINITY
。更新了 Painter 实现,以检查Size.Unspecified
以及非有限 Size。 (I95a7e) - 添加了 Paging Compose 模块和分页集成 (Ib85da)
- 修改了
LazyListScope
以接收可为空的值 (I1765b) OnPositionedModifier
已重命名为OnGloballyPositionedModifier
,onPositioned()
已重命名为onGloballyPositioned()
。 (I587e8, b/169083903)- 为
LazyColumn/Row
添加了示例 (Idc16d) - 修复了
items
和itemsIndexed
方法允许空列表的问题 (I06647) - 添加了用于指定检查器信息的 DSL (Ic9a22)
- 将
LongPress
移至Text
中。 (Iff2bc) - 禁用了
Text
中的选择功能,并提供了一个演示。 (Ie7e97) - 支持将
AnnotatedString
转换为SpannableString
以支持无障碍功能。 (Ief907) - 移除了
PointerInputFilter.onPointerInput(...)
。应改用PointerInputFilter.onPointerEvent(...)
。 (I6f04a)
版本 1.0.0-alpha04
2020 年 10 月 1 日
androidx.compose.foundation:foundation:1.0.0-alpha04
、androidx.compose.foundation:foundation-layout:1.0.0-alpha04
和 androidx.compose.foundation:foundation-text:1.0.0-alpha04
已发布。版本 1.0.0-alpha04 包含这些提交。
API 变更
Stack
已重命名为Box
。之前存在的foundation.Box
将被废弃,推荐使用compose.foundation.layout
中的新Box
。新的Box
的行为是在有多个子项时将子项堆叠在一起,这与之前的Box
不同,之前的Box
行为类似于Column
。 (I94893, b/167680279)Box
的装饰参数已废弃。如果想为Box
添加装饰/内边距,请改用 Modifiers(Modifier.background
、Modifier.border
、Modifier.padding
) (Ibae92, b/167680279)- 添加了新的
LazyListState
类。这允许观察和控制LazyRow
和LazyColumn
组件的滚动位置。可以使用rememberLazyListState()
创建实例,并将其传递给组件的状态参数。目前,在此初始版本中可以观察到第一个可见项及其偏移量。 (Ic7cb7, b/159307669) - Lazy 列表的位置和滚动偏移量现在可以在 Activity 重建时保存和恢复 (Ie045f, b/166589058)
- 添加了长按语义操作。 (I6281b, b/156468846)
- 添加了
MutatorMutex
工具类,用于在一段时间内保持共享状态的单一修改器,并按优先级取消冲突的修改器。 (I3f975) - 使用
@VisibleForTesting
为rootAnimationClockFactory
、transitionsEnabled
、blinkingCursorEnabled
和textInputServiceFactory
添加了注解,将其设为内部 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,使其在
DrawScope
和DrawTransform
中接受一个Offset
参数来表示枢轴坐标,而不是单独的 x/y 坐标浮点参数。 - 移除了
Rect.expandToInclude
和Rect.join
方法。 - 更新了
Radius
文档,除了 elliptical 外还提及 oval。 - 添加了文档,说明内联
Radius
类的公共构造函数不应直接调用,而应通过其函数构造函数实例化Radius
对象。 - 移除了查询
topRight
、bottomRight
、bottomCenter
等属性的RoundRect
API。 - 废弃了
Rect.shift
,推荐使用Rect.translate
。 - 移除了
RoundRect.grow
和Rect.shrink
API。 - 将
RoundRect.outerRect
重命名为Rect.boundingRect
。 - 移除了
RoundRect.middleRect
/tallMiddleRect
/wideMiddleRect
和Rect.isStadium
方法。 - 将
RoundRect.longestSide
重命名为RoundRect.maxDimension
。 - 将
RoundRect.shortestSide
重命名为RoundRect.minDimension
。 - 将
RoundRect.center
从函数更改为属性。 - 更新了
RoundRect
构造函数,使其接收Radius
属性,而不是 x/y 半径值的单个参数。 - 移除了假定原点在 (0,0) 的矩形的
Size
API。 - 为
Radius
添加了解构 API。 - 将各种
RoundRect
扩展函数迁移为属性。 - (I8f5c7, b/168762961)
- 更新了缩放和旋转转换 API,使其在
- 通过避免在每次滚动时进行不必要的重组,优化了
LazyColumnFor
/LazyRowFor
滚动的性能。 (I64f65, b/168293643, b/167972292, b/165028371) - 修复了
LazyColumnFor
/LazyRowFor
滚动后更改项目导致的崩溃,并实现了当之前可见的项目被移除时自动向上滚动,这样结尾处就不会再显示空白间隙了。 (I220ab, b/161480164, b/167855468) - 不再允许在同一方向上嵌套
ScrollableContainer
和LazyColumnFor
等可滚动容器。这从未被支持过,并且会破坏LazyColumnFor
项目组成的 fling 和所有懒加载特性。 (I6e101) - 更新了许多图形 API
- 更新了带有作用域转换方法的
DrawScope
API,以表明转换仅在回调函数内部应用,并在回调函数调用后移除。 - 更新了
clipPath
文档,使其引用Path
而非圆角矩形。 - 修复了
clipPath
中 right 参数文档的间距问题。 - 将
DrawScope.drawCanvas
重命名为drawIntoCanvas
并移除了 size 参数。 - 将
inset
方法中的dx/dy
参数重命名为horizontal
和vertical
。 - 添加了
inset
重载,该重载为所有 4 个边界提供相同的 inset 值。 - 移除了
inset
方法文档中指示 inset 将应用于所有 4 个边的内容。 - 更新了
Rect
类的文档。 - 更新了
Rect
参数的注释以匹配 kdoc 风格。 - 移除了
Rect.join
和Rect.expandToInclude
。 - 为
Rect.translate(offset)
创建了重载,并废弃了Rect.shift
。 - (If086a, b/167737376)
- 更新了带有作用域转换方法的
- 将
AccessibilityScrollState
添加到语义属性中。 (Ifeda9) - 将
TextRange
设为内联,以避免对象创建。 (Id034b) ParagraphConstraints
已移除。宽度现在直接传递给Paragraph
。 (Ica712)
版本 1.0.0-alpha03
2020 年 9 月 16 日
androidx.compose.foundation:foundation:1.0.0-alpha03
、androidx.compose.foundation:foundation-layout:1.0.0-alpha03
和 androidx.compose.foundation:foundation-text:1.0.0-alpha03
已发布。版本 1.0.0-alpha03 包含这些提交。
API 变更
InnerPadding
已重命名为PaddingValues
。 (I195f1, b/167389171)- 在布局 API 中,
gravity
的用法已统一重命名为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
以查看是否有内容正在等待该时钟的帧;runWithManualClock
作为runBlocking
的替代方案,用于运行需要ManualFrameClock
的测试;TestUiDispatcher.Main
,方便在测试中访问主 UI 调度程序。例如
@Test fun myTest() = runWithManualClock { clock -> // set some compose content withContext(TestUiDispatcher.Main) { clock.advanceClock(1000L) } if (clock.hasAwaiters) { println("The clock has awaiters") } else { println("The clock has no more awaiters") } }
版本 1.0.0-alpha01
2020 年 8 月 26 日
androidx.compose.foundation:foundation:1.0.0-alpha01
、androidx.compose.foundation:foundation-layout:1.0.0-alpha01
和 androidx.compose.foundation:foundation-text:1.0.0-alpha01
已发布。版本 1.0.0-alpha01 包含这些提交。
版本 0.1.0-dev
版本 0.1.0-dev17
2020 年 8 月 19 日
androidx.compose.foundation:foundation:0.1.0-dev17
、androidx.compose.foundation:foundation-layout:0.1.0-dev17
和 androidx.compose.foundation:foundation-text:0.1.0-dev17
已发布。版本 0.1.0-dev17 包含这些提交。
API 变更
- 为
Row
和Column
添加了spacedBy
Arrangement,用于以固定间距定位布局子项。还添加了aligned
Arrangement,用于将布局子项彼此相邻定位,并根据Alignment
在Row
/Column
中对齐。之前废弃了Arrangement.Vertical#arrange
和Arrangement.Horizontal#arrange
方法,未来将不再支持编写自定义Arrangements
。 (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。这可用于为mergeAllDescendants
语义合并定义自定义策略。默认策略是如果已存在父值则使用父值,否则使用子值。 (Iaf6c4, b/161979921) PlacementScope.placeAbsolute()
已重命名为PlacementScope.place()
,之前的PlacementScope.place()
已重命名为PlacementScope.placeRelative()
。因此,PlacementScope.place()
方法在从右到左(RTL)的上下文中将不再自动镜像位置。如果需要此行为,请改用PlacementScope.placeRelative()
。 (I873ac, b/162916675)- 移除了已废弃的
FilledTextField
组件。请改用TextField
来获取 Filled 文本字段的 Material Design 实现。 (I5e889) - 为
LinearProgressIndicator
添加了backgroundColor
参数,并移除了CircularProgressIndicator
的内部内边距。添加了新的ProgressIndicatorConstants.DefaultProgressAnimationSpec
,可作为在值之间动画进度时的默认AnimationSpec
。 (If38b5, b/161809914, b/161804677) - The
state { ... }
可组合项现已废弃,推荐为了清晰起见明确调用remember { mutableStateOf(...) }
。这减少了状态管理的整体 API 表面和概念数量,并与类属性委托的by mutableStateOf()
模式匹配。 (Ia5727) - 将
RRect
重命名为RoundRect
,以便更好地符合 Compose 命名模式。创建了与RRect
类似的函数构造函数,并废弃了RRect
函数构造函数。 (I5d325) - 移除了
onChildPositioned
和OnChildPositionedModifier
。开发者应改在子布局上使用onPositioned
和OnPositionedModifier
。 (I4522e, b/162109766) IntSize
现在是内联类 (I2bf42)- 长按空白区域进行编辑。 (Ib1e5b)
- 点击文本后隐藏浮动工具栏。 (If4525)
- 更新选择时隐藏浮动工具栏。 (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 变更
- LazyItemScope 已添加到 Lazy list 的 itemContent 参数中。它提供了填充父级最大尺寸的修饰符,解决了项目应填充视口,而常规的 Modifier.fillMaxSize() 在测量项目时受无限约束而不起作用的情况。(Ibd3b2、b/162248854)
- 将 dialog 移动到 ui 中(I47fa6)
- 添加了 LazyColumnForIndexed/LazyRowForIndexed - 作为 LazyColumnFor/LazyRowFor 的版本,它们在 itemCallback 中同时提供了索引和项目。这在你除了当前项目之外还需要知道当前索引时很有用。(I65ff3)
- Modifier.deternimateProgress 已被重命名为 Modifier.progressSemantics(I9c0b4)
- LazyColumnItems 已被重命名为 LazyColumnFor。LazyRowItems 已被重命名为 LazyRowFor(I84f84)
- 添加了一些 Marks/Annotations 以遵循最佳实践。(I66b20)
- foundation.shape.corner 包已被扁平化到 foundation.shape 中(I46491、b/161887429)
- 为 LazyRowItems/LazyColumnItems 添加了 crossaxis gravity 参数。LazyRowItems/LazyColumnItems 现在支持 wrap content 行为。(Ib39fc)
- ZoomableState 已被重命名为 ZoomableController。已为 smoothScale 添加了自定义曲线支持。已添加
enabled
和onZoomStarted
功能(If8b8f) - Material FilledTextField 已被重命名为 TextField,基础的 TextField 已被重命名为 BaseTextField,以便更容易发现和使用最简单的所需 API(Ia6242、b/155482676)
- 先前已弃用的 AdapterList 已被移除。请改用 LazyColumnItems(I12b9b)
- Modifier.drawBackground 已被重命名为 Modifier.background(I13677)
- 旧的 ConstraintLayout DSL 已被移除。ConstraintSet2 已被重命名为 ConstraintSet。(If58d1、b/162450908)
- 添加了 Modifier.absoluteOffset() 和 Modifier.absoluteOffsetPx()。与 offset 修饰符不同,absolute offset 修饰符在右到左的上下文中不会自动镜像(I3aa21)
Row
和Column
现在是内联函数,显著减少了使用它们的开销。(I75c10)
Bug 修复
- 解决广泛的 API 修复(I077bc)
- 移除未使用的 OffsetBase 接口
- 对齐 Offset 和 IntOffset 类,使其具有一致的 API 表面
- 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
- 将 nativeCanvas 方法从 Canvas 接口中移出,以支持消费者创建自己的 Canvas 实例
- 创建了存根 EmptyCanvas 类,以便将 DrawScope 重构为非空参数而不是 lateinit,并确保字段的非空性
- 将 ClipOp 枚举重命名为 Pascal Case
- 将 FilterQuality 枚举重命名为 Pascal Case
- 将 StrokeJoin 枚举重命名为 Pascal Case
- 将 PointMode 枚举重命名为 Pascal Case
- 将 PaintingStyle 枚举重命名为 Pascal Case
- 将 PathFillType 枚举重命名为 Pascal Case
- 将 StrokeCap 枚举重命名为 Pascal Case
- 更新了 DrawCache 实现,不再使用 lateinit 参数
- 更新了 DrawScope,不再对 fillPaint 和 strokePaint 内部参数使用惰性委托
- 更新了 Image 可组合项,避免使用 Box 以减少开销
- 更新了 Outline 类,添加了 @Immutable 注解
- 更新了 PathNode,为每个路径指令添加了 @Immutable 注解
- 更新了 Vector 子组合,移除了多余的相等性条件检查,因为 compose 已处理了它们
- 弃用了 Rect companion 构造方法,推荐使用函数构造方法
- 更新了 Brush 类和函数构造方法,添加了 @Immutable 和 @Stable API
- 将 VertexMode 枚举更新为 PascalCase
- 更新了 DrawScope 的 selectPaint 方法,如果 stroke 参数已更改,则有条件地覆盖 paint 上的 stroke 参数
- 更新了 Size,添加了 destructuring API,将 UnspecifiedSize 重命名为 Unspecified,并移除了未使用的方方法
添加了 MonotonicFrameAnimationClock,使你可以将 MonotonicFrameClock 用作 AnimationClockObservable,以弥合基于协程的新时钟与仍使用基于回调的旧时钟的 API 之间的差距。
MonotonicFrameClock 对应的 ManualAnimationClock 现在是 ManualFrameClock。(I111c7、b/161247083)
移除了
SemanticsNodeInteraction.performPartialGesture
。请改用SemanticsNodeInteraction.performGesture
。(Id9b62)将
SemanticsNodeInteraction.getBoundsInRoot()
重命名为SemanticsNodeInteraction.getUnclippedBoundsInRoot()
(Icafdf、b/161336532)已更新右到左支持的 API。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。Modifier.rtl 和 Modifier.ltr 已被移除。(I080b3)
Modifier.plus 已被弃用,请改用 Modifier.then。'Then' 具有更强的排序信号,同时禁止输入
Modifier.padding().background() + anotherModifier
,这会破坏链式调用且更难阅读(Iedd58、b/161529964)添加了
isFocused()
和isNotFocused()
SemanticsMatcher。(I0b760)RemeasurementModifier 已添加。它允许用户同步重新测量布局。一般来说,你不需要它,因为重新测量/重新布局是自动发生的,但我们在 LazyColumnItems 滚动时使用了它。(I5f331、b/160791058)
isSystemInDarkTheme 现在总是考虑系统范围的暗主题设置,并根据最新指导在 Q 版本之前忽略省电状态。(I0c10c)
OnChildPositioned 已被弃用。请改在子项上使用 OnPositioned。(I87f95、b/162109766)
将 AndroidComposeTestRule 重命名为 createAndroidComposeRule。(I70aaf)
添加 accessibility action 以获取 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
版本,你需要根据上面 Declaring dependencies 中显示的新代码片段更新你的依赖项。
API 变更
- 与 ScrollableColumn/ScrollableRow 中的新参数类似,LazyColumnItems/LazyRowItems 现在也具有 contentPadding 参数,它允许在内容被裁剪后为其添加内边距,这是仅通过 modifier 参数无法实现的。它还允许仅在第一个项目之前/最后一个项目之后添加间距。(Ibc24e)
- 文本字段中的 onFocusChange 回调已重命名为 onFocusChanged(Ida4a1)
- VerticalScroller 和 HorizontalScroller 已被弃用。请使用 ScrollableColumn 和 ScrollableRow 来获得内置的 Column/Row 行为和参数体验,或者在你自己的元素上使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。类似地,ScrollerPosition 已被弃用,推荐使用 ScrollState(I400ce、b/157225838、b/149460415、b/154105299)
- Modifier.draggable 和 Modifier.scrollable API 已被重做。DragDirection 已被移除,推荐使用 Orientation。scrollable 所需的状态已简化。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,以阐明静态动画规范的概念 - 通过移除创建 tween、spring 等 AnimationSpecs 的 lambda 要求来改进 transition DSL。它们现在直接接受构造函数参数。 - 通过开放构造函数而不是依赖构建器来提高 AnimationSpec 的整体易用性 - 将 KeyFrames 和 Tween 的 duration 和 delay 更改为 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 来打包两个 float 值,以表示宽度和高度(表示为 float)。(Ic0191)
- 为了整合用于表示位置信息的类的数量,标准化使用 Offset 类而不是 PxPosition。这提供了内联类的好处,可以利用一个 long 来打包两个 float 值,以表示 x 和 y 偏移量(表示为 float)。(I3ad98)
- 添加了 Modifier.zoomable 用于捏拉缩放功能(Id5d63)
- Toggleable 组件已被弃用。请改用 Modifier.toggleable(I35220、b/157642842)
- MutuallyExclusiveSetItem 已被弃用。请改用 Modifier.selectable。(I02b47、b/157642842)
- TestTag 现在已被弃用。请改用 Modifier.testTag。(If5110、b/157173105)
- 向 Text 添加了 fontWeight 参数,该参数之前意外未添加(I56937)
- 作为大规模重构工作的一部分,将各种 compose 类中 Px 类的用法替换为仅依赖 Dp 和原始类型作为像素参数(I19d02)
- VerticalScroller 现在开箱提供 Column。HorizontalScroller 现在开箱提供 Row。(Ieca5d、b/157020670)
- 作为大规模重构工作的一部分,将各种 compose 类中 Px 类的用法替换为仅依赖 Dp 和原始类型作为像素参数(Iede0b)
- Modifier.indication 已添加到 foundation 包中。使用它可以在自定义交互元素上显示按压/拖动/其他指示(I8425f、b/155287131)
- VerticalScroller 和 HorizontalScroller 现在支持反向滚动(如果在 ScrollerPosition 上设置了 isReversed)(I953bd)
- 支持将可组合项添加到文本布局中。(I1373c)
- 合并了 CanvasScope 实现,现在只有 DrawScope 和 ContentDrawScope 将 CanvasScope 重命名为 DrawScope。更新了 DrawScope 以实现 Density 接口并提供 LayoutDirection 删除了 ContentDrawScope 中的 DrawScope 子类 Painter 和 PainterModifier 已更新,不再自己维护 RTL 属性,因为 DrawScope 已提供此属性而无需手动提供(I1798e)
- 移除了已弃用的 DrawBackground API,推荐使用 Modifier 上的 drawBackground 扩展 API。重构了 color、brush 和 paint 的 drawBackground 实现,以减少代码路径并移除 Modifier 作为组合一部分创建的要求。(I0343a)
- 更新了公开 Canvas 的更高级别 compose API,以公开 CanvasScope。这消除了消费者维护自己 Paint 对象的需要。对于仍需要访问 Canvas 的消费者,他们可以使用 drawCanvas 扩展方法,该方法提供一个回调,以便使用底层 Canvas 发出绘图命令。(I80afd)
- HorizontalScroller 和 VerticalScroller 现在使用保存的实例状态恢复其滚动位置。(Ia0fae、b/155075048)
- FocusManagerAmbient 已被移除。请使用 FocusModifier.requestFocus 获取焦点。(Ic4826)
- Table 布局已暂时移除,待我们使用更新的 API 再次提供。(Id88a7)
创建了 CanvasScope API,它封装了一个 Canvas 对象,以公开一个无状态、声明性的绘图 API 表面。变换包含在其自身的接收者作用域内,尺寸信息也限定在相应的 inset bounds 内。它不要求消费者维护自己的 Paint 状态对象来配置绘图操作。
添加了 CanvasScopeSample,并更新了演示应用以包含声明式图形演示(Ifd86d)
ColoredRect 已被移除。请改用带有 drawBackground 修饰符的 Box(I983c7、b/152753731)
向 TextField 添加光标颜色自定义功能(I6e33f)
现在可以使用 SoftwareKeyboardController 隐藏/显示软键盘,该控制器由 onTextInputStarted 回调提供(I8dc44、b/151860051)
与 TextField 一起使用的 TextFieldValue 现在可以在 activity recreation 时存活,如下所示:
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)
TextField 更新 - 在水平方向上,它将占据分配给它的所有可用空间(Ib08df、b/154638552)
添加了 InteractionState 和 Interaction,使得构建响应 UI 状态变化的组件(例如按压和拖动)变得更容易(Icfe25、b/152525426)
RectangleShape 从 androidx.ui.foundation.shape.* 移动到 androidx.ui.graphics.*(Ia74d5、b/154507984)
将 API 中所有可空 Color 的用法替换为非空,并使用 Color.Unset 代替 null(Iabaa7)
TextField API 更新 - 将 onFocus 和 onBlur 回调合并为一个带参数的 onFocusChange(Boolean) 回调(I66cd3)
将 ScaleFit 重命名为 ContentScale 将 ContentScale 从 ui-graphics 移动到 ui-core 模块,使其与 Alignment API 位于同一模块中。将 FillMaxDimension 重命名为 Crop 将 FillMinDimension 重命名为 Fit 将 Fit 重命名为 Inside,以便更好地匹配 ImageView.ScaleType 等效项 添加了文档,说明 Crop 和 Alignment.Center 的组合与 ImageView.ScaleType.CENTER_CROP 结果相同,与 Alignment.Center 一起使用的 Fit 与 ImageView.ScaleType.FIT_CENTER 结果相同,与 Alignment.Center 一起使用的 Inside 与 ImageView.ScaleType.CENTER_INSIDE 结果相同(I45f09、b/152842521)
移除了 ProvideContentColor,现在直接将 ContentColorAmbient 与
Providers
一起使用(Iee942)向 text 添加了 color 参数,允许覆盖文本样式的颜色,而无需手动与主题中提供的样式合并。(I41a66)
改进 DrawModifier API
- 将 draw() 的接收者作用域设为 ContentDrawScope
- 移除了 draw() 上的所有参数
- DrawScope 具有与先前 CanvasScope 相同的接口
- ContentDrawScope 具有 drawContent() 方法(Ibaced、b/152919067)
ColoredRect 已被弃用。请改用
Box(Modifier.preferredSize(width, height).drawBackground(color))
。(I499fa、b/152753731)Shape 主题系统已根据 Material design 规范进行了更新。现在你可以提供小、中、大尺寸的形状,供大多数组件使用(Ifb4d1)
将 Modifier 的加号运算符替换为工厂扩展函数(I225e4)
Draggable 已被移至 modifier(Id9b16、b/151959544)
将
Text
从 androidx.ui.core 移动到 androidx.ui.foundation 包。(I87ce5)为 Checkbox、Switch 和 Toggleable 添加了
enabled
参数(I41c16)Ripple 现在是一个 Modifier。虽然 Clickable 尚未转换,但推荐的用法是
Clickable(onClick = { ... }, modifier = ripple())
(Ie5200、b/151331852、b/150060763)添加了 VectorPainter API 来替换现有的矢量图形 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。你可以直接将现有的 AppBarIcon 用法替换为 IconButton,它们现在将具有正确的触摸目标。请参阅 samples 获取用法信息,并参阅 Icons 获取可直接与这些组件一起使用的 Material Icons。(I96849)
DrawShape 可组合项已被移除。请改用 DrawBackground 修饰符。(I7ceb2)
添加了 AdapterList,这是一个滚动列表组件,仅组合和布局可见项。目前已知的问题包括它仅支持垂直方向,并且不能完全处理对其子项的所有更改情况。(Ib351b)
添加了 Scrollable 组件,它允许创建自定义的 Scrollers/Lists(I5fd37)
将 background 重命名为 DrawBackground,并使其默认为 memorized(Ia0bd3)
向 Box 添加了 paddings、border、shape 和 background 参数(I05027、b/148147281)
添加了 Canvas 组件。这个可组合项会占用一定的尺寸(由用户提供),并允许你使用 CanvasScope 进行绘制(I0d622)
将
Border
修饰符重命名为DrawBorder
(I8ffccaa928e74efd71dcdcda550f250195f2e5d3)添加了 Box 组件,用于组合布局和绘制常见功能。(I6e2a7)
Scrollers 现在表现出原生 Android 的快速滑动行为。(I922af、b/147493715)
移除了 DrawBorder,推荐使用 Border Modifier(Id335a)
Modifier.tag 已被重命名为 Modifier.layoutId,以避免与 Modifier.testTag 混淆。(I995f0)
创建 ConstraintLayout guidelines 时的 percent 参数已重命名为 fraction。(Ida2db)
添加了对 ConstraintLayout barriers 边距的支持。(I47ffedafd3cfd3a1164763224f8c6a61c0d1588e)
修复了 ConstraintLayout 中的 RTL 支持。添加了 RTL unaware API。(I3b1c7)
已为 ConstraintLayout 添加了新的 DSL。有关更多详细信息,请参阅 samples。(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 布局修饰符,可用于在 px 中定义(动态)偏移量。(I5af57)
AlignmentLineOffset 可组合项已被弃用,请改用 relativePaddingFrom() 修饰符。CenterAlignmentLine 可组合项已被移除。(I60107)
添加了 defaultMinSizeConstraints 布局修饰符,它仅在传入的相应约束未指定时(最小约束为 0,最大约束为无穷大)才为包装的布局设置尺寸约束。(I311ea、b/150460257)
Container 已被移除。请改用 Box(Ibbc2b、b/151407926)
移除了已弃用的 LayoutWidth/Height/Size 修饰符。(Ib0bc1)
为 offset 修饰符添加了默认参数值。(I37f06)
添加了对称 padding 修饰符。(I39840)
移除了已弃用的 LayoutAspectRatio 修饰符。(I65a74)
移除了已弃用的 LayoutAlign 修饰符。(I10877)
修复了 width 和 height 修饰符中的一个错误,该错误导致包装的布局在没有对轴约束的情况下进行测量。(I210b8、b/154797971)
分别为 Row 和 Column 添加了 verticalGravity 和 horizontalGravity 参数。(I7dc5a)
更新了 wrapContentWidth 和 wrapContentHeight,使其期望垂直或水平 Alignment,而不是任何 Alignment。gravity 修饰符已更新,接受垂直或水平 Alignment。Row、Column 和 Stack 已更新,支持自定义连续 Alignments。(Ib0728)
使 Alignment 可以用任意值实例化。添加了 1D Alignments。(Ia0c05)
将 EdgeInsets 重命名为 InnerPadding。将 Material Buttons 的 innerPadding 参数重命名为 padding。(I66165)
alignToSiblings 现在接受 Measured 而不是 Placeable。(I5788d)
添加了用于根据固有测量结果调整尺寸的修饰符,并弃用了服务于此目的的组件。(I8295d)
添加了对自定义 ConstraintLayout 子项尺寸的支持(Idb1a5)
移除了已弃用的 Wrap 和 Center 可组合项。(I29e23)
添加了 LayoutModifier2,这是一个用于定义布局修饰符的新 API;弃用了 LayoutModifier(If32ac)
RowScope 和 ColumnScope 的成员现在可以在 Row 和 Column 外部访问。(I3a641)
Container 已被弃用。请改用 Box。( I675ce, b/151407926 )
添加了用于偏移布局位置的 LayoutOffset 修饰符 ( I0b8a3 )
Compose 布局初步支持 Rtl ( Ia5519 )
更新了 LayoutAlign,使其不再填充可用空间 ( I2b14f )
删除了 AspectRatio 可组合项,改为使用修饰符。删除了已废弃的 FlexColumn、FlexRow 可组合项和 Spacing 修饰符 ( Iec8a7 )
删除了用于 Row 和 Column 的 LayoutInflexible 修饰符 ( I0d820 )
实现拖动手柄来更改 TextField 的选择范围。( I27032 )
实现 TextField 选择的 LongPressAndDrag。( I17919 )
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。现在 Clickable 默认使用 ripple 作为指示(如果你的应用程序中设置了 MaterialTheme {}),因此在大多数情况下,你只需使用 clickable 即可免费获得 ripple 指示。如果你需要自定义 ripple 的颜色/大小/边界参数,可以手动创建 RippleIndication 并将其作为 indication 参数传递给 clickable。( I663b2, b/155375067 )
- 删除了过时的尺寸测试 API。( Iba0a0 )
- 将 LayoutNode 设为实验性 API ( I4f2e9 )
- Compose 中实现了版本 1 的滚动方向锁定。( I1ce7a, b/150289741 )
- Popups、Dialogs 和 Menus 现在继承上下文 MaterialTheme ( Ia3665, b/156527485 )
- 从 Layout() 函数的 measure 块中移除了布局方向参数。但是,可以通过 measure scope 对象在回调中获取布局方向。( Ic7d9d )
- 添加 AbsoluteArrangement - 允许在 Row 内部排列子项,而不会在 RTL 中自动镜像 ( I3a1df )
- @Untracked 注解已被弃用。请替换为 @ComposableContract(tracked=false) ( Id211e )
- 在此更改之前,如果 @Composable 函数内部存在 ( I5205a, b/158123804 )
- 添加
viewModel()
可组合项,该项允许创建或获取已创建的 ViewModel,类似于 Activity 或 Fragment 中的工作方式 ( I5fdd1 ) 将 Radius 类重构为内联类。移除伴生对象创建方法,改为使用带有默认参数的函数构造函数,使沿 y 轴的半径与强制性的 x 轴半径参数匹配。
更新了 DrawScope.drawRoundRect 以接受一个 Radius 参数,而不是两个单独的 float 值分别表示沿 x 轴和 y 轴的半径 ( 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 )
我们更改了测量 activity.setContent { } 块内第一个布局的方式。以前它会被强制填充整个 activity 屏幕,现在它的行为就像你将布局放在 Stack 中一样:它可以小于屏幕,并且会定位在屏幕左上角。如果你想要旧的行为,可以为你的布局应用 Modifier.fillMaxSize()。( Ie88a7, b/153453714 )
ui-text-compose 模块重命名为 ui-text。ui-text 现在包含 CoreText 和 CoreTextField 可组合项 ( Ib7d47 )
ui-text 模块重命名为 ui-text-core ( I57dec )
将 ui-framework/CoreText, CoreTextField 可组合项移至 ui-text-compose 下。你可能需要在项目中包含 ui-text-compose。( I32042 )
runOnIdleCompose
和runOnUiThread
现在是全局函数,而不是 ComposeTestRule 的方法。( Icbe8f )[Mutable]State 属性委托运算符已移至扩展,以支持 Kotlin 1.4 属性委托优化。调用者必须添加导入才能继续使用
by state { ... }
或by mutableStateOf(...)
。( I5312c )DrawLayerModifier 和 drawLayer() 现在默认将 clipToBounds 和 clipToOutline 设为 false。( I0eb8b, b/152810850 )
将 LayoutResult 重命名为 MeasureResult。( Id8c68 )
弃用 Center 可组合项。应使用 LayoutSize.Fill + LayoutAlign.Center 修饰符,或使用 Box 或 Stack 可组合项并应用适当的修饰符来替代它 ( Idf5e0 )
将 LayoutFlexible 重命名为 LayoutWeight。将 tight 参数重命名为 fill。( If4738 )
DrawVector 已从常规可组合函数更改为返回一个 Modifier drawVector(),该修饰符将把矢量绘制为布局的背景。( I7b8e0 )
将可组合函数 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 修饰符或 Stack 可组合项来替代它 ( Ib237f )
使布局方向从父布局节点传播到子节点。添加了布局方向修饰符。( I3d955 )
将 Painter.toModifier 重命名为 Painter.asModifier,因为新创建的 Modifier 引用了原始 Painter,可以在多个 Modifier 实例之间共享 ( I7195b )
LayoutPadding 修饰符支持从右到左的方向 ( I9e8da )
Density 和 DensityScope 已合并为一个接口。现在可以使用 DensityAmbient.current 代替 ambientDensity()。可以使用 with(density) 代替 withDensity(density) ( I11cb1 )
移除了 ValueHolder 类。重构了 AnimatedValue、AnimatedFloat 类,使动画值字段抽象化,以便子类可以监视值的更新。
- 添加了 AnimatedValue、AnimatedFloat 等的模型类。
- 添加了一组新的轻量级 @Composable API,用于在值之间进行动画处理。
- ( I79530 )
ambients API 的重大更改。有关详细信息,请参阅日志和
Ambient<T>
文档 ( I4c7ee, b/143769776 )从 Placeable#get(AlignmentLine) 返回的对齐线 Int 位置现在为非 null。如果查询的对齐线缺失,将返回 AlignmentLine.Unspecified。( I896c5, b/158134875 )
修复了 ConstraintLayout 在重组时导致崩溃的 bug。( Ibee5a, b/158164341 )
WithConstraints trailing lambda API 已更改。现在,它不是两个参数,而是有一个接收者作用域,除了 constraints 和 layoutDirection 外,还提供 Dp 中的 minWidth、maxWidth、minHeight 和 maxHeight 属性 ( I91b9a, b/149979702 )
将 LayoutModifier2 重命名为 LayoutModifier。( Id29f3 )
Layout 和 LayoutModifier2 中的固有测量函数现在有一个 IntrinsicMeasureScope 接收者,它提供固有查询 API 并隐式传播布局方向。( Id9945 )
LayoutDirectionAmbient 已弃用。要读取由 locale 定义的布局方向,请在 ConfigurationAmbient 上使用 localeLayoutDirection ( I851b1 )
为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。( Icacdd, b/152735784 )
ParentData 可组合项已弃用。你应该创建一个实现 ParentDataModifier 接口的修饰符,或者如果你只需要标记布局子项以便在 measure 块中识别它们,则使用 LayoutTag 修饰符。( I51368, b/150953183 )
添加 OnPositionedModifier 和 OnChildPositionedModifier 以替换 OnPositioned 和 OnChildPositioned 可组合函数。( I2ec8f )
禁止在 LayoutPadding 中使用负 padding。负位置偏移应改用 LayoutOffset。( Ifb5b1 )
WithConstraints 增加了 LayoutDirection 参数 ( I6d6f7 )
更新了
ComposeFlags.COMPOSER_PARAM
标志为true
,这将改变 compose 插件的代码生成策略。在高层面上,这会导致 @Composable 函数生成一个额外的合成参数,该参数会传递给后续的 @Composable 调用,以便运行时正确管理执行。这是一个重大的二进制破坏性更改,但是,在所有批准使用的 compose 用法中应保持源级兼容性。( I7971c )更改了 LayoutCoordinates,使 providedAlignmentLines 成为 Set 而不是 Map,并让 LayoutCoordinates 实现 get() 运算符来检索值。这使得修饰符更容易修改集合中的一个或多个值,而无需为每个修饰符创建新的集合。( I0245a )
LayoutCoordinates 不再具有 position 属性。在考虑 LayoutModifiers、旋转或缩放时,position 属性没有意义。相反,开发者应使用 parentCoordinates 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个的转换。
LayoutCoordinates 使用 IntPxSize 表示 size 属性,而不是 PxSize。布局使用整数像素大小,因此所有布局大小都应使用整数而不是浮点值。( I9367b )
Constraints 的 API 表面改进 ( I0fd15 )
添加了 TextDirection.Content ( I48f36 )
调整了工具栏菜单,使其正确显示复制、剪切、粘贴。( Id3955 )
为 TextField Selection 添加了 FloatingToolbar。( Ie8b07 )
TextDirectionAlgorithm 重命名为 TextDirection ( I75ce8 )
TextDirection 重命名为 ResolvedTextDirection ( I3ff38 )
为 TextField Selection 添加了触感反馈。( I58050 )
为 TextField Selection 添加了复制、剪切和粘贴方法。( Idb70b )
TestTag 和 Semantics 已被删除。请改用 Modifier.testTag 和 Modifier.semantics ( I15ff0, b/158841414 )
将 Locale 和 LocaleList 的包名从 androidx.ui.text 更改为 androidx.ui.intl ( I8132c )
API 更改:
AnnotatedString(builder: Builder)
重命名为annotatedString(builder: Builder)
。( Ia6377 )API 更改:
AnnotatedString.Item
重命名为AnnotatedString.Range
。( I2d44d )添加了用于文本相关操作的工具栏。( I49d53 )
现在可以使用新的 LifecycleOwnerAmbient。现在,与 Compose UI 一起使用的 Activity 应扩展 androidx.activity.ComponentActivity(或 AppCompatActivity)。android.app.Activity 上的 setContent 现在已弃用 ( Idb25a, b/153141084 )
ui-android-text 包名 (androidx.text) 已替换为 androidx.ui.text.platform,以符合 androidx 策略。( I42711 )