Compose UI
androidx.compose.ui
androidx.compose.ui.geometry
androidx.compose.ui.graphics
androidx.compose.ui.platform
androidx.compose.ui.test
(请参阅所有 Compose 软件包的 API 参考文档)
最新更新 | 稳定版 | 候选发布版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2025 年 6 月 4 日 | 1.8.2 | - | - | 1.9.0-alpha04 |
结构
Compose 是 androidx
中 7 个 Maven 组 ID 的组合。每个组都包含功能的目标子集,每个子集都有自己的发布说明。
此表解释了这些组,并链接到每组的发布说明。
组 | 说明 |
---|---|
compose.animation | 在 Jetpack Compose 应用中构建动画,以丰富用户体验。 |
compose.compiler | 通过 Kotlin 编译器插件转换 @Composable 函数并启用优化。 |
compose.foundation | 使用即用型构建块编写 Jetpack Compose 应用,并扩展基础以构建您自己的设计系统组件。 |
compose.material | 使用即用型 Material Design 组件构建 Jetpack Compose UI。这是 Compose 的更高级别入口点,旨在提供与 www.material.io 中描述的组件匹配的组件。 |
compose.material3 | 使用 Material Design 3 组件构建 Jetpack Compose UI,这是 Material Design 的下一个演进。Material 3 包括更新的主题和组件以及 Material You 个性化功能(如动态颜色),旨在与新的 Android 12 视觉样式和系统 UI 保持一致。 |
compose.runtime | Compose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的核心运行时。 |
compose.ui | 与设备交互所需的 Compose UI 基本组件,包括布局、绘图和输入。 |
声明依赖项
要添加对 Compose 的依赖项,您必须将 Google Maven 仓库添加到您的项目中。请阅读Google 的 Maven 仓库了解更多信息。
在您的应用或模块的 build.gradle
文件中添加您所需工件的依赖项
Groovy
dependencies { implementation "androidx.compose.ui:ui:1.8.2" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.ui:ui: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.ui:ui-*:1.9.0-alpha04
已发布。版本 1.9.0-alpha04 包含这些提交。
API 变更
- 添加了用于可自定义阴影的 modifier API。(I2058d,b/160665122)
- 添加了一个
SemanticsModifierNode.isImportantForBounds
属性,用于确定在计算边界时是否应考虑该节点。该属性默认为 true,可以设置为 false 以指示在计算边界时不应考虑该节点。(I7ebec) - 添加了一个
SemanticsPropertyKey
工厂函数,用于声明 Android 特定的语义属性,这些属性通过AccessibilityNodeInfo.getExtras
作为可访问性附加信息提供。(I2ed51) - 移除了
ComposeUiFlags.isRemoveFocusedViewFixEnabled
的用法并弃用了该标志。(I50328) - 引入了新的可自定义阴影框架。这包括
DropShadowPainter
和InnerShadowPainter
以及DropShadow/InnerShadow
依赖项。阴影基础设施是共享的,因此可以在多个调用点共享相同的生成阴影,而无需重复生成 n 次阴影。(I24f7a,b/160665122) - 引入了
CompositeShader
和CompositeShaderBrush
,它们在两个着色器之间创建复合结果。还添加了ShaderBrush#transform
以设置着色器的变换矩阵。(I2621a,b/160665122)
Bug 修复
- 修复了
NestedScrollInteropConnection
中的一个 bug,其中抛物运动方法与视图的顺序不正确。(I56ad4) - 以前,全屏绘制的对话框不会在显示切口区域内绘制。此 bug 已修复,因此具有
decorFitsSystemWindows = false
和usePlatformDefaultWidth = false
的对话框可以占用显示切口区域。(I9e975) - 修复了
TalkBack
的绿色焦点指示器在 Compose 应用在后台打开后未绘制的 bug。(Ifd12a)
版本 1.9.0-alpha03
2025 年 5 月 20 日
androidx.compose.ui:ui-*:1.9.0-alpha03
已发布。版本 1.9.0-alpha03 包含这些提交。
API 变更
- 标志
ComposeUiFlags.isGetFocusedRectReturnEmptyEnabled
使得在ComposeView
中没有任何可聚焦项时,将矩形设置为 Empty 值。这可以防止焦点搜索选择 View 进行聚焦。这对于 IME 具有 NEXT 选项(可能会尝试聚焦ComposeView
且requestFocus()
失败)的情况尤为重要。(Ibd0e2,b/369256395) - 引入标志
isNestedScrollDispatcherNodeFixEnabled
。(I0d24a) - 将
DialogProperties
的dialogContentTitle
重命名为windowTitle
(Ibd27b) - 引入了
Modifier.onFirstVisible
和Modifier.onVisibilityChanged
修饰符,它们是在Modifier.onLayoutRectChanged
之上构建的高级修饰符。这些修饰符专门用于处理许多常见的应用程序要求,例如记录曝光、自动播放视频等。它们在构建时考虑了性能,因此可以在关键的基于列表的场景中使用,而不会牺牲滚动性能。除了这些修饰符 API 之外,还向RelativeLayoutBounds
添加了额外的 API,以支持这些用例,并使开发人员更容易创建完全适合其用例的类似自定义修饰符。(I759b8) - 将
setDiagnosticStackTraceEnabled
更改为实验性,以考虑此功能的未来开发。(I11db3) - 引入
Modifier.scrollable2D
、Scrollable2DState
和用于状态创建的配套 API。还引入了通用滚动扩展函数。(Ic61c8,b/214410040) - Compose 64 位颜色值不能直接与 Android
ColorLongs
进行比较,因为某些颜色空间的颜色空间 ID 是乱序的。为了与 Android 颜色空间进行相互转换,添加了两个新的 API:toColorLong()
和fromColorLong()
。(I36899) - 引入了
ViewConfiguration.minimumFlingVelocity
以允许控制抛物运动的下限速度。(I11aab)
版本 1.9.0-alpha02
2025 年 5 月 7 日
androidx.compose.ui:ui-*:1.9.0-alpha02
已发布。版本 1.9.0-alpha02 包含这些提交。
API 变更
- 在
DialogProperties
中添加dialogContentTitle
,它设置内容窗口标题。bf9d670
Bug 修复
- 窗口内边距标尺已暂时禁用,等待内部测试修复。8d1402
- 修复了
DragGestureNode
中将指针输入更改添加到VelocityTracker
的方式,这可以通过新标志isAdjustPointerInputChangeOffsetForVelocityTrackerEnabled
进行控制。254ddb
版本 1.9.0-alpha01
2025 年 4 月 23 日
androidx.compose.ui:ui-*:1.9.0-alpha01
已发布。版本 1.9.0-alpha01 包含这些提交。
行为变更
- Compose 随附的 Lint 检查现在要求 AGP 最低版本为 8.8.2。如果您无法升级 AGP,可以通过在
gradle.properties
中使用android.experimental.lint.version=8.8.2
(或更高版本)来单独升级 Lint。要在 IDE 中运行 Compose Lint 检查,需要 Android Studio Ladybug 或更高版本。
API 变更
- 移除了启用命中路径跟踪器(调试)的跟踪语句的标志。(I1b2a1)
- 将
InnerRectRulers
和OuterRectRules
更改为方法。从RectRulers
公共 API 中移除了 name 参数。DerivedRulers
现在是 Vertical 和 Horizontal Rulers 的构造函数选项。MergedHorizontalRulers
和MergedVerticalRulers
已被minOf
和maxOf
方法取代以生成实例。(Iee89f,b/408192133) - 弃用
androidx.compose.ui.LocalSavedStateRegistryOwner
,转而使用androidx.savedstate.compose.LocalSavedStateRegistryOwner
。(I5439f,b/377946781) - 添加
Modifier.keepScreenOn
以在存在时设置显示屏不休眠(Ib5af4,b/408284174) - 添加了一个新的语义属性
Shape
,当 UI 元素的形状与其边界矩形不同时(例如,圆角矩形)可以设置该属性。(I1376f) - 修复了
AndroidViews
中指针事件分派的问题,并添加了标志isPointerInteropFilterDispatchingFixEnabled
以保护更改。(I0e272,b/372055500,b/408002332) FocusRestorer
不再固定先前聚焦的项。用户应使用键来确保先前聚焦的项具有相同的组合哈希,以便成功恢复焦点。(I4203b,b/330696779)- 允许 Compose 触发
ViewTreeObserver.OnScrollChanged
。此行为是在isOnScrollChangedCallbackEnabled
标志下引入的。我们还引入了DelegatableNode dispatchOnScrollChanged
的扩展函数。(I34b9d,b/238109286) currentCompositeKeyHash
现已弃用。请改用currentCompositeKeyHashCode
。替换的 API 以更多位编码相同的哈希值,这呈指数级降低了组合层次结构中两个不相关的随机组具有相同哈希键的机会。(I4cb6a,b/177562901)- 使用 Kotlin 2.0 发布的项目需要 KGP 2.0.0 或更高版本才能使用(Idb6b5)
- 添加了对
FocusRequester
的 Lint 检查支持,以确保其在组合中被记住(I6bf91) - 添加了设置 Composable 应该渲染的优选帧率或帧率类别的功能(Ie5201)
- 在 Android 上公开原生
MotionEvent
。(I17286) - 添加
getChecked() + setChecked(int)
,弃用isChecked + setChecked(boolean)
(Iaac9d) graphicsLayer
修饰符现在接受blendMode
和colorFilter
(Iab0e6)- 添加了
LocalResources
组合本地来查询 Resources。调用LocalResources.current
会在配置更改时重新组合,因此对stringResource()
等 API 的调用将返回更新的值。(I50c13,b/274786917) - 公开了用于 Composable 处理间接触摸事件的实验性 API(Icff57)
- 此版本改进了对在可组合内容的布局和绘制阶段抛出的未处理异常的报告。以前,此处未捕获的异常会导致测试运行器崩溃并过早结束测试套件。现在可以更优雅地报告这些异常,而不会结束测试套件。(I9928b,b/314128080)
- 弃用了实验性
GlobalAssertions
API。其预期用途是运行无障碍检查,请改为参阅enableAccessibilityChecks()
以了解该目的。(I50aa5) SemanticsNodeInteraction.performTextInputSelection
不再是实验性 API,现在支持一个额外的relativeToOriginal
参数,该参数允许您将选择应用于原始未转换文本或已转换文本。(I3a905,b/261561038,b/277018945)- 通过
AnnotatedString
引入了创建自定义项目符号列表的 API(I1d066,b/383269496,b/139326648) - 弃用
runWithTimingDisabled
,转而使用runWithMeasurementDisabled
,它更清楚地描述了行为 - 所有指标都暂停。此外,公开MicrobenchmarkScope
超类,因为重新声明runWithMeasurementDisabled
函数以开放访问是不可能的,因为它是一个内联函数。(I9e23b,b/389149423,b/149979716) - 更新了 ui-tooling Devices API 以包含较新的设备。(Ia2ac1)
- 在预览屏幕尺寸集合中添加平板电脑纵向模式,以帮助开发者考虑更大的窗口(Ia1976)
- 引入跟踪值 API,用于在给定时间点标记/记录具有值的跟踪。跟踪值在 Prefetto 中显示为一条新车道,可以通过跟踪的时间轴查看。在 Android 上,它们使用
Trace.setCounter
实现。(Idcf48)
Bug 修复
- 修复了在可暂停组合中调度 remember 观察器的问题,以避免在同一应用中调度 remembered/forgotten(I570b2,b/404645679,b/407931790)
- 当
decorFitsSystemWindows
为 false 时,现在可以设置android:dialogTheme
来控制对话框属性(I7922f,b/246909281) - 修复了对话框外部捕获的任何动作事件都可能关闭对话框的 bug。(Ia78fd)
- Compose lint 检查现在要求命令行 AGP 最低版本为 8.8.2,IDE 支持至少需要 Android Studio Ladybug。如果您使用的是旧版 AGP,可以在 gradle.properties 中设置
android.experimental.lint.version=8.8.2
来升级 Lint 版本,而不会影响 AGP。(I6f2a8) - 添加了一个新的语义属性
InputText
,它捕获在应用输出转换之前的textfield
值。(Iae46a,b/395911609,b/176949051) - 将
enableAccessibilityChecks()
API 移至单独的软件包,该 API 用于打开 Android 的无障碍检查。如果您不使用TestRule
,则为compose:ui:ui-test-accessibility
;如果调用TestRule
,则为compose:ui:ui-test-junit4-accessibility
。(I3c318,b/391560768) - 添加了对
LaunchedEffect
和rememberCoroutineScope
中 Compose 堆栈跟踪的支持(I705c0,b/354163858)
外部贡献
- 将实验性的
runComposeUiTest
函数更改为接受一个 suspend 块。还添加了一个弃用的 funrunComposeUiTest
以实现二进制兼容性(I3b88c,b/361577328)
版本 1.8
版本 1.8.2
2025 年 5 月 20 日
androidx.compose.ui:ui-*:1.8.2
已发布。版本 1.8.2 包含这些提交。
Bug 修复
版本 1.8.1
2025 年 5 月 7 日
androidx.compose.ui:ui-*:1.8.1
已发布。版本 1.8.1 包含这些提交。
Bug 修复
- 修复了
onLayoutRectChanged
和LazyLayout
的一些问题 d791b11 - 跳过预组合项的重新测量请求。此 bug 影响了延迟布局的滚动性能,因为在某些情况下预取效率不高,测量发生在帧内。742087a
版本 1.8.0
2025 年 4 月 23 日
androidx.compose.ui:ui-*:1.8.0
已发布。版本 1.8.0 包含这些提交。
自 1.7.0 以来的重要更改
- Compose 1.8 包含新增的语义自动填充支持。请确保您使用的 UI 和 Foundation 版本是 1.8 或更高版本,因为文本组件的自动填充需要这两个模块的最新版本。有关 API 使用和示例,请参阅此处的自动填充文档以获取更多详细信息。
- Compose 1.8 支持其他类型的触觉反馈:
Confirm
、ContextClick
、GestureEnd
、GestureThresholdActivate
、Reject
、SegmentFrequentTick
、SegmentTick
、ToggleOn
、ToggleOff
、VirtualKey
。这可通过LocalHapticFeedback
访问,在 Android 上,当 Vibrator API 指示支持触觉时,此功能默认可用。 - 多个焦点 API 现已稳定,包括
Modifier.focusRestorer()
以及onEnter
和onExit
FocusProperties
(I6e667)。现在,您可以在调用requestFocus
时指定FocusDirection
。我们已向focusRequester
和FocusTargetModifierNode
添加了requestFocus(FocusDirection)
API,以允许按特定方向聚焦。(I5d9ec][https://android-review.googlesource.com/#/q/I5d9eca3a2cd283c1b84ad6b77d929ef9a49ce4cc],b/245755256)
版本 1.8.0-rc03
2025 年 4 月 9 日
androidx.compose.ui:ui-*:1.8.0-rc03
已发布。版本 1.8.0-rc03 包含这些提交。
Bug 修复
- 禁用了一些导致回归的焦点互操作修复。(b9d998,b/369256395,b/378570682,b/376142752,b388590015/,b/389994198,b/391378895)
版本 1.8.0-rc02
2025 年 3 月 26 日
androidx.compose.ui:ui-*:1.8.0-rc02
已发布。版本 1.8.0-rc02 包含这些提交。
Bug 修复
- 修复了当聚焦视图从懒惰列表中移除时,嵌入在 Compose 层次结构中的聚焦视图会导致重入组合的问题。(765562)
版本 1.8.0-rc01
2025 年 3 月 12 日
androidx.compose.ui:ui-*:1.8.0-rc01
已发布。版本 1.8.0-rc01 包含这些提交。
Bug 修复
- 修复了在软键盘激活时,当聚焦的
AndroidView
被移除时发生的崩溃。(Ic725a) - 修复了新焦点状态处理实现中的几个问题。(b/395895685)
- 修复了在使用
LaunchedEffect
请求文本字段焦点时阻止自动填充的问题。(b/392539099)
版本 1.8.0-beta03
2025 年 2 月 26 日
androidx.compose.ui:ui-*:1.8.0-beta03
已发布。版本 1.8.0-beta03 包含这些提交。
API 变更
- 将
enableAccessibilityChecks()
API 移至单独的软件包,该 API 用于打开 Android 的无障碍检查。如果您不使用 TestRule,则为compose:ui:ui-test-accessibility
;如果调用TestRule
,则为compose:ui:ui-test-junit4-accessibility
。(I547ef,b/391560768) - 添加了一个新的语义属性
InputText
,它捕获在应用输出转换之前的文本字段的值。(Iae46a)
Bug 修复
- 修复了导致自动填充服务保存输出转换后的文本而不是输入文本的问题。(Iae46a,b/395911609,b/176949051)
版本 1.8.0-beta02
2025 年 2 月 12 日
androidx.compose.ui:ui-*:1.8.0-beta02
已发布。版本 1.8.0-beta02 包含这些提交。
新功能
- 添加了一项 lint 检查,以警告调用
Configuration#screenWidth
/heightDp
- 可以使用LocalWindowInfo.current.containerSize
来检索当前窗口大小。
版本 1.8.0-beta01
2025 年 1 月 29 日
androidx.compose.ui:ui-*:1.8.0-beta01
已发布。版本 1.8.0-beta01 包含这些提交。
API 变更
ContextualFlowRow
和ContextualFlowColumn
已被标记为弃用。这个实验性组件在 1.7 中引入,尚未稳定,并且其实现已被认为不理想。将来可能会提供一个解决此组件旨在解决的用例的组件。FlowRow
和FlowColumn
在 1.7 中引入了包含overflow
参数的实验性重载。此参数的使用已被弃用,可以改用不带此参数的重载。这些重载的默认“overflow”行为将是“Clip”,就像它们自引入以来一样。ContextualFlowRow
的许多用例可以通过 FlowRow 完成,但我们承认这并非完全普遍适用。ContextualFlowRow
完全可以在用户空间中实现,并且如果需要,可以尝试复制其实现并进行调整。将来,我们希望以不同的方式解决这些用例。(Ibafec)
SemanticsNodeInteraction.semanticsId()
已移除。请改用SemanticsNodeInteraction.fetchSemanticsNode().id
。(Ie397a)- 旧的自动填充 API 已弃用。请改用新的基于语义的 API。(I943ff)
- 重写
requestAutofill
API 以存在于自动填充管理器之外。(Id1929)
Bug 修复
- 修复了焦点问题,即
requestFocus()
使用无意义的previouslyFocusedRect
参数(与焦点方向相关)会跳过ComposeView
。(Ifdc2f,b/388590015) - 修复了在使用
GraphicsLayer.record { this@ContentDrawScope.drawContent() }
时偶尔出现的 NPE。如果您以这种方式记录drawContent()
,请确保在DrawScope
内使用GraphicsLayer#record
扩展函数,而不是GraphicsLayer
上的成员函数。(I75fc0,b/389046242) - 修复了在动画期间文本布局有时会错误翻译的问题,有关更多信息,请参见 b/389707025(Ie55b1,b/389707025)
版本 1.8.0-alpha08
2025 年 1 月 15 日
androidx.compose.ui:ui-*:1.8.0-alpha08
已发布。版本 1.8.0-alpha08 包含这些提交。
API 变更
- 将
AutofillManager
设为抽象类。(I0a3b0) - 修复了几个与焦点相关的问题,包括 IME 尝试聚焦没有可聚焦项的
ComposeView
时崩溃、子AndroidViews
内的焦点更改以及焦点请求离开AndroidView
。(Ia03c3,b/369256395,b/378570682,b/376142752) - 将
FocusEnterExitScope.cancelFocus()
更改为cancelFocusChange()
(I89959) - 您现在可以使用
RectInfo.calculateOcclusions()
计算 Composable 遮挡。 - 在
DelegatableNode
上添加了扩展函数,用于注册全局布局更改的监听器。(I68b59)
Bug 修复
- 当使用
ComposeContentTestRule.setContent
时,用作测试下的可组合项的主机的 Activity 现在使用主题Theme.Material.Light.NoActionBar
,以避免在面向 SDK 35 时ActionBar
与测试内容重叠。要选择退出此行为,您可以移除对ui-test-manifest
的依赖项,并在测试应用的 AndroidManifest.xml 中为ComponentActivity
添加一个带有您选择的主题的 Activity 条目。(I7ae1b,b/383368165) - 具有相同变体设置的资源字体现在将避免过度缓存导致应用不正确的变体设置。(If3dff,b/372044241)
AnnotatedString.fromHtml
现在支持<ul>/<li>
标签。(I7c2fe,b/299662276,b/139326648)
外部贡献
- 添加了一个新的 Clipboard 接口及其组合本地。(I80809)
版本 1.8.0-alpha07
2024 年 12 月 11 日
androidx.compose.ui:ui-*:1.8.0-alpha07
已发布。版本 1.8.0-alpha07 包含这些提交。
API 变更
- 向工具公开了
LayoutNode
的所有者。(I26f7f) LocalAutofillHighlightColor
组合本地使用 Color 类型。(I0e05b)- 保持弃用的
UrlAnnotation
及其方法标记为实验性。(Ic0021)
Bug 修复
- 修复了在
BasicText
或 Text 可组合项中使用LinkAnnotation
时导致IndexOutOfBoundsException
崩溃的问题(be7605,b/374115892) - 修复了带自定义形状的填充文本字段未裁剪指示线的问题。(I4f87f,b/380704151)
- 修复了长截图背景缺失的问题。(I4d57a)
- 此库现在使用 JSpecify nullness 注释,它们是类型使用的。Kotlin 开发者应使用以下编译器参数来强制正确使用:
-Xjspecify-annotations=strict
(这是 Kotlin 编译器 2.1.0 版开始的默认设置)。(Idfef8,b/326456246) - 在 Android Q+ 上运行时,更新了 Compose 对宽色域和 HDR 颜色的支持。(Icd8be,b/379135036)
- 未能加载的资源字体现在将静默回退到默认字体,而不是之前的在测量时抛出异常的行为。(Ib6a49)
- 修复了当
AndroidView
被分离和附加时焦点丢失的问题。(I53446) - 接受超出绑定布局操作的
requestFocus()
。(Ia8461)
外部贡献
- 向 UI 添加
BringIntoViewResponderModifierNode
,它提供了一种新的方式来实现 Bring Into View 功能,并允许在平台级别实现。(Ia6dd8)
版本 1.8.0-alpha06
2024 年 11 月 13 日
androidx.compose.ui:ui-*:1.8.0-alpha06
已发布。版本 1.8.0-alpha06 包含这些提交。
API 变更
- 添加
stylusHoverIcon
修饰符。(Iff20a,b/331289114) - 将自动填充管理器更改为接口。(I84914,b/376080755)
- 在
focusRequester
和FocusTargetModifierNode
中都添加了requestFocus(FocusDirection)
,以允许按特定方向聚焦。(I5d9ec,b/245755256) FocusProperties.enter
和FocusProperties.exit
已被onEnter
和onExit
取代,它们使用接收器范围而不是FocusDirection
参数。(I6e667)- 在文本工具栏中添加自动填充支持。(Ie6a4c)
Modifier.focusRestorer()
的 API 变更(I99c03)- 参数名称更改为“fallback”
- 参数现在是
FocusRequester
而不是 lambda - 参数现在是非 NULL 的,默认值为 Default
- 从自动填充管理器接口中移除了
@Experimental
注解。此功能仍在开发中,目标是此版本,但我们不想引入 @Expemiental API(Id8398) LocalHapticFeedback
现在在 Vibrator API 指示支持触觉时提供默认的HapticFeedback
实现。以下内容已添加到HapticFeedbackType
中 -Confirm
、ContextClick
、GestureEnd
、GestureThresholdActivate
、Reject
、SegmentFrequentTick
、SegmentTick
、ToggleOn
、ToggleOff
、VirtualKey
。Wear Compose 中可长按的组件(如Button
、IconButton
、TextButton
和Card
)现在在提供长按处理程序时执行LONG_PRESS
触觉反馈。(I5083d)- 移除了
OverscrollConfiguration
和LocalOverscrollConfiguration
,并添加了rememberPlatformOverscrollFactory
以创建默认过度滚动实现的实例/自定义参数。要禁用过度滚动,请使用LocalOverscrollFactory provides null
,而不是LocalOverscrollConfiguration provides null
。要更改发光颜色/填充,请使用LocalOverscrollFactory provides rememberPlatformOverscrollFactory(myColor, myPadding)
,而不是LocalOverscrollConfiguration provides OverscrollConfiguration(myColor, myPadding)
。(Ie71f9,b/255554340,b/234451516) - 移除了实验性的
GlobalAssertions
API。它的预期用途是运行无障碍检查,请改用enableAccessibilityChecks()
。(I59322)
版本 1.8.0-alpha05
2024 年 10 月 30 日
androidx.compose.ui:ui-*:1.8.0-alpha05
已发布。版本 1.8.0-alpha05 包含这些提交。
新功能
在此版本中,自动填充功能通过功能标志公开。我们正在努力提高性能,并期待对 API 提供早期反馈。API 预计在稳定版发布之前会根据反馈进行演进。
- 要启用自动填充,请在
onCreate
中将ComposeUiFlags.isSemanticAutofillEnabled
设置为 true,并使用最新的 Compose 快照。 - 此版本的自动填充支持通过手动、通过建议强密码和通过导航保存新凭据。它还支持在可自动填充字段获得焦点或通过文本组件上的文本工具栏触发自动填充时进行填充。组件将在自动填充完成后高亮显示。
API 变更
- 修改自动填充接口以遵循
expect
/actual
结构。(I22dce) - 引入
CompositionLocal
,可用于修改自动填充成功填充高亮显示的色调。(I32092) - 添加了
Modifier.onRectChanged
API,该 API 允许订阅LayoutNode
的根/窗口/屏幕相对位置和大小。该 API 解决了现有onGloballyPositioned
修饰符的许多用例,但其开销更小,并且该 API 提供了根据用例要求对回调进行防抖动和节流的功能。(Id28c7,b/372765423,b/372757007,b/372994338) - 扩展自动填充管理器以包含
commit()
和cancel()
API,帮助用户保存新输入的凭据。(I2da00) - 引入了新的
AutofillManager
接口,可用于微调用户的自动填充旅程,以及一个isSemanticAutofillEnabled
标志来开启此新版本的自动填充。(I9d484) - 添加了
Modifier.onRectChanged
API,该 API 允许订阅LayoutNode
的根/窗口/屏幕相对位置和大小。该 API 解决了现有onGloballyPositioned
修饰符的许多用例,但其开销更小,并且该 API 提供了根据用例要求对回调进行防抖动和节流的功能。(I3c8fa) - 添加了用于扩展自动填充支持的语义属性和数据类型。(I52c7d)
AnnotatedString
构建器中的所有方法现在都是非实验性的(Ia89c8,b/261561823)
Bug 修复
- 嵌入在 Compose 中的视图现在如果获得焦点,可以接收旋转事件(I4d53a,b/320510084)
- 修复了各种资源类型在配置更改时不会更新的问题(Ia9b99,b/352336694)
- 解决了在某些旧款索尼设备上使用 POBox 日语键盘时,
TextField
无法正常工作的问题。(Ia9b99,b/373743376) - 修复了对话框显示在屏幕底部而不是居中的问题(Ia2ec,b/373093006)
- 面向 API 35+ 不再强制对话框将
decorFitsSystemWindows
设置为 false。(Ibc94,b/364492593) - 修复了层在窗口之间移动(例如对话框和主内容)时崩溃的问题(I675ba,b/330955281)
版本 1.8.0-alpha04
2024 年 10 月 16 日
androidx.compose.ui:ui-*:1.8.0-alpha04
已发布。版本 1.8.0-alpha04 包含这些提交。
API 变更
- 添加了
DelegatableNode#onDensityChange
和DelegatableNode#onLayoutDirectionChange
回调,以允许在这些更改发生时更新节点状态(I04f3e,b/340662451) - 添加了
WindowInfo#containerSize
以提供当前窗口的内容容器大小。这可以使用LocalWindowInfo
检索。(Idc38c,b/369334429,b/360343819) - 引入了针对嵌套滚动视图的修复,这些嵌套滚动视图在正在进行的甩动过程中从节点树中移除。现在,这些节点将取消甩动并正确发送带有剩余速度的
onPostFling
事件。我们还引入了标志NewNestedScrollFlingDispatchingEnabled
,以在发生回归时控制行为。该标志将在 Beta 版之前移除。(I05c37,b/371168883) - 引入了
PointerInputModifierNode#touchBoundsExpansion
,可用于扩大单个指针输入修饰符的触摸边界。(Iccf02,b/335339283) - 添加了
WindowInfo#containerSize
以提供当前窗口的内容容器大小。这可以使用LocalWindowInfo
检索。(I27767,b/369334429,b/360343819) - 从
TextFields
中移除了readOnly
以固定到稳定的 foundation 版本。(I3aaba) Paragraph
和ParagraphIntrinsics
现在接受应用于AnnotatedString
的所有注释列表,以前它只有SpanStyles
列表(I12f80)
Bug 修复
- 更新了
AnnotatedString
中段落的处理方式。以前,您只能创建不重叠的段落。现在,AnnotatedString
允许完全重叠的段落,这些段落将合并在一起,以及嵌套段落,在这种情况下,外部段落将在内部段落的边界处拆分,并且内部段落的样式将与外部段落的样式合并(Ic9554) - 修复了
AnnotatedString
中零长度LinkAnnotation
导致的崩溃。(89aac6)
版本 1.8.0-alpha03
2024 年 10 月 2 日
androidx.compose.ui:ui-*:1.8.0-alpha03
已发布。版本 1.8.0-alpha03 包含这些提交。
API 变更
- Kotlin 版本更新至 1.9(I1a14c)
- 引入了一个名为 Carousel 的新语义角色,用于为无障碍服务模拟寻呼机中的列表行为。(Id354b,b/354109776,b/239672673)
- 将
invisibleToUser()
重命名为hideFromAccessibility
。其功能保持不变。请参阅文档了解更多详情。(Ib43a3)
Bug 修复
- 更新
SensitiveContent
修饰符的文档 (Ib0442) - 修复了在某些 Android 版本上,特定通用轮廓剪切与高程阴影结合使用时会被忽略的问题
- 修复了在某些 Android 版本上,指定通用轮廓剪切时会应用空剪切的问题。
- 修复了在外部视图上 IME 处于活动状态且使用 Next 操作进入
ComposeView
焦点时抛出的异常。clearFocus()
行为与 API < 28 上的视图行为一致,在该版本上,clearFocus()
可能会导致默认视图获得焦点。 - 通过分离不同布局过程的子组合管理,修复了
LazyList
中在分离节点上发生放置的问题。 - 修复了焦点从
TextField
切换到EditText
或任何其他基于视图的编辑器时,软键盘闪烁的问题。 - 嵌套滚动节点现在将在分离后正确分派
onPostFling
事件。 - 整体性能改进
版本 1.8.0-alpha02
2024 年 9 月 18 日
androidx.compose.ui:ui-*:1.8.0-alpha02
已发布。版本 1.8.0-alpha02 包含 这些提交。
API 变更
TextOverflow.StartEllipsis
和TextOverflow.MiddleEllipsis
现已可用,它们允许将省略号放置在单行文本的开头或中间。(I38913, b/185418980)
Bug 修复
- 修复 Dalog
dismissOnClickoutside
(39a3d, b/364508685) - 不剪切对话框内容的阴影 (e8e2f, b/363027803)
- 修复焦点搜索在 Compose 和 View 之间移动时的错误行为 (58377, b/350534714)
外部贡献
AlignmentLines
Map
现在接受VerticalAlignmentLine
或HorizontalAlignmentLine
具体类型。(I02912)- 新的通用
ByteArray.decodeToImageBitmap(): ImageBitmap
方法。(I83c21)
版本 1.8.0-alpha01
2024 年 9 月 4 日
androidx.compose.ui:ui-*:1.8.0-alpha01
已发布。版本 1.8.0-alpha01 包含 这些提交。
版本 1.7
版本 1.7.8
2025 年 2 月 12 日
androidx.compose.ui:ui-*:1.7.8
已发布。版本 1.7.8 包含 这些提交。
版本 1.7.7
2025 年 1 月 29 日
androidx.compose.ui:ui-*:1.7.7
已发布。版本 1.7.7 包含 这些提交。
Bug 修复
- 修复了将带有
LinkAnnotation
的AnnotatedString
传递给 Text 可组合项时出现的IndexOutOfBoundsException
。(Ic96d2) - 修复了在极少数情况下,
AnnotatedString
中使用LinkAnnotation
时测试中的超时问题。(I04a03)
版本 1.7.6
2024 年 12 月 11 日
androidx.compose.ui:ui-*:1.7.6
已发布。版本 1.7.6 包含 这些提交。
Bug 修复
- 我们以前在焦点系统有待处理的无效化时遇到按键事件就会报错。现在改为记录错误 (I7ea0, b/346370327)。
- 移除了
SemanticsPropertyReceiver.invisibleToUser()
的实验性注解。这将在 1.8 中弃用,并由SemanticsPropertyReceiver.hideFromAccessibility()
取代。(I448f0, b/376479686) - 修复了在某些旧款 Sony 设备上使用 POBox 日语键盘时,
TextField
无法正常工作的问题。(I94e0e, b/373743376) - 修复了
TalkBack
未播报BasicText
的inlineContent
的无障碍功能问题。(I67bcb, b/376479686)
版本 1.7.5
2024 年 10 月 30 日
androidx.compose.ui:ui-*:1.7.5
已发布。版本 1.7.5 包含 这些提交。
Bug 修复
- 修复了高程和自定义轮廓剪切无法正确渲染的问题。
- 修复了零宽度
LinkAnnotation
导致的文本崩溃问题。(Ic1e2e) - 修复了当按钮被构建为可点击的 Text 可组合项时,
Talkback
中的播报问题。(I1f588)
版本 1.7.4
2024 年 10 月 16 日
androidx.compose.ui:ui-*:1.7.4
已发布。版本 1.7.4 包含 这些提交。
版本 1.7.3
2024 年 10 月 2 日
androidx.compose.ui:ui-*:1.7.3
已发布。版本 1.7.3 包含 这些提交。
Bug 修复
- 修复了在某些 Android 版本上,指定通用轮廓剪切会导致空剪切边界的问题。
- 修复了在外部视图上 IME 处于活动状态且使用 Next 操作进入
ComposeView
焦点时抛出的异常。clearFocus()
行为与 API < 28 上的视图行为一致,在该版本上,clearFocus()
可能会导致默认视图获得焦点。 - 修复了在 lookahead 无效化时使用了不正确的
placeOrder
,从而修复了跳过 lookahead 放置的边缘情况。
版本 1.7.2
2024 年 9 月 18 日
androidx.compose.ui:ui-*:1.7.2
已发布。版本 1.7.2 包含 这些提交。
Bug 修复
- 通过删除冗余跟踪,提高了无障碍节点信息和语义事件的性能。(I89156, b/362530618)
- 当传递异常大的测量尺寸时,
ComposeView
将不再崩溃 (da5db, b/347036173) - 修复了无障碍屏幕阅读器问题,即未播报按钮上的
LiveRegion
播报。(f66fa7, b/348590026)
版本 1.7.1
2024 年 9 月 10 日
- Android 工件无更改。
-desktop
工件已移除,并添加了-jvmStubs
和-linuxx64Stubs
工件。这些目标都不打算使用,它们是帮助 Jetbrains Compose 工作的占位符。
版本 1.7.0
2024 年 9 月 4 日
androidx.compose.ui:ui-*:1.7.0
已发布。
自 1.6.0 以来的重要更改
1.7.0 版本中的重要更改已在此博客文章中介绍。
版本 1.7.0-rc01
2024 年 8 月 21 日
androidx.compose.ui:ui-*:1.7.0-rc01
已发布。版本 1.7.0-rc01 包含 这些提交。
显著更改
- ui:ui 模块现在强制要求 foundation:foundation 的最低版本为 1.7.0-rc01 或更高版本。此举是为了解决 ui 和 foundation 在 1.7.0-alpha01 早期发生的
NestedScrollSource
更改导致的兼容性问题。
版本 1.7.0-beta07
2024 年 8 月 7 日
androidx.compose.ui:ui-*:1.7.0-beta07
已发布。版本 1.7.0-beta07 包含 这些提交。
Bug 修复
- 文本输入相关的
SemanticsNodeInteraction
函数performTextReplacement
、performTextInput
和performTextClearance
现在在只读TextFields
上调用时将抛出断言错误。(I4ae8f)
版本 1.7.0-beta06
2024 年 7 月 24 日
androidx.compose.ui:ui-*:1.7.0-beta06
已发布。版本 1.7.0-beta06 包含 这些提交。
版本 1.7.0-beta05
2024 年 7 月 10 日
androidx.compose.ui:ui-*:1.7.0-beta05
已发布。版本 1.7.0-beta05 包含 这些提交。
Bug 修复
- 修复了更改软键盘后,
TextField
在焦点丢失并重新获得之前无法接受新键盘输入的问题。 - 修复了在使用
SurfaceView
内容渲染时,尝试持久化图层内容会导致意外副作用的问题。
版本 1.7.0-beta04
2024 年 6 月 26 日
androidx.compose.ui:ui-*:1.7.0-beta04
已发布。版本 1.7.0-beta04 包含 这些提交。
Bug 修复
- 避免测量超长文本行(例如 10k 字符)时崩溃 (8157ab)
- 禁用
GraphicsLayer
API 的软件渲染支持。(35ddd8) - 修复了图层持久化逻辑中的崩溃问题。(70b13e)
- 由于导致渲染问题,已恢复重用图层对象的优化。(70b13e)
版本 1.7.0-beta03
2024 年 6 月 12 日
androidx.compose.ui:ui-*:1.7.0-beta03
已发布。版本 1.7.0-beta03 包含 这些提交。
版本 1.7.0-beta02
2024 年 5 月 29 日
androidx.compose.ui:ui-*:1.7.0-beta02
已发布。版本 1.7.0-beta02 包含 这些提交。
API 变更
- 将
SemanticsProperties.Editable
重命名为IsEditable
,并将SemanticsPropertyReceiver.editable
更改为 valisEditable
。该属性现在是布尔值,并始终由文本字段指定。(I8acd8) - 重命名无障碍功能基准参数。(I3d440)
- 更新了链接样式 API:
TextLinkStyles
现在是LinkAnnotation
构造函数和AnnotatedString.fromHtml
方法的一部分 (I90b2b)。同时移除了 material 中的TextDefaults
(I5477b)
Bug 修复
- 将
LayoutCoordinates.introducesFrameOfReference
重命名为LayoutCoordinates.introducesMotionFrameOfReference
以更好地反映其目的。重命名了基于该标志计算坐标的相关函数。(I3a330)
版本 1.7.0-beta01
2024 年 5 月 14 日
androidx.compose.ui:ui-*:1.7.0-beta01
已发布。版本 1.7.0-beta01 包含 这些提交。
API 变更
- 将
performCustomAccessibilityActionLabelled
重命名为performCustomAccessibilityActionWithLabel
,并将performCustomAccessibilityActionWhere
重命名为performCustomAccessibilityActionWithLabelMatching
。(I5387f) AnnotatedString.hasEqualsAnnotations
现在是hasEqualAnnotations
(I685c0)- 更新了获取文本中 Material 主题链接的 API。具体来说,移除了
TextDefaults
对象中用于构造具有 Material 主题的LinkAnnotations
和解析具有主题链接的 HTML 的方法。取而代之的是,添加了一个TextLinkStyles
类,允许将链接样式作为参数传递给 Text 可组合项。(I31b93)
Bug 修复
- 修复了在事件期间动态添加指针输入修饰符时的其他用例 63e1504
版本 1.7.0-alpha08
2024 年 5 月 1 日
androidx.compose.ui:ui-*:1.7.0-alpha08
已发布。版本 1.7.0-alpha08 包含 这些提交。
API 变更
- 增加了对可变形状实现的支持。
Shape#createOutline
现在在图形图层内被观察,因此在其中读取状态值会在状态更改时导致无效化,从而实现更流畅的形状动画。(Id1629, b/326070216) - 将
isPositionedByParentWithDirectManipulation
重命名为introducesFrameOfReference
。请注意,它现在具有相反的效果,这意味着默认情况下,大多数LayoutCoordinates
引入了参考系,并且只有在直接操作下放置时,该属性才为 false。要仅查询引入参考系的位置,请使用positionInLocalFrameOfReference(...)
。或者在LookaheadScope
中使用positionInLocalLookaheadFrameOfReference
。(Ifc5f7) LookaheadScope
API 已变得稳定 (I21507)- 根据 API 委员会的反馈更改
getScrollViewportLength
的操作 lambda。(Ibc74a) - 更新了
GraphicsLayer
轮廓 API 以消耗浮点参数而不是整数。移除了UnsetOffset/UnsetSize IntSize
哨兵值,转而使用浮点型 Offset 和 Size 内联类上已有的 Unspecified 常量 (I2fb03, b/333863462) - 在测试期间注入鼠标输入时,
MouseInjectionScope.click()
、MouseInjectionScope.doubleClick()
、MouseInjectionScope.tripleClick()
、MouseInjectionScope.longClick()
现在接受一个button: MouseButton
参数,使其更具通用性。所有方法的默认值为MouseButton.Primary
。(I31a23, b/190493367, b/261439695) - 将
LinkInteractionListener
内的onClicked
重命名为onClick
。(Iaa35c) - 将
TextInclusionStrategy.isInside
重命名为isIncluded
。使Paragraph/MultiParagraph#getRangeForRect()
返回类型不可为空。(I51f26)
Bug 修复
- 修复了
reverseScrolling=true
的滚动容器的长截图捕获问题。(I7c59c)
外部贡献
- 增加了对嵌套
LazyLists
(例如渲染嵌套LazyRows
的LazyColumn
)中项目预取的功能。此更改有望减少这些LazyLists
滚动期间的掉帧。默认实现是预取前 2 个嵌套项目,但此行为可以通过新的LazyLayoutPrefetchStrategy(nestedPrefetchItemCount)
和LazyListPrefetchStrategy#onNestedPrefetch
API 进行控制。(I51952)
版本 1.7.0-alpha07
2024 年 4 月 17 日
androidx.compose.ui:ui-*:1.7.0-alpha07
已发布。版本 1.7.0-alpha07 包含 这些提交。
API 变更
ClickableText
已标记为弃用。要向文本添加链接,请使用与您的链接对应的LinkAnnotation
创建一个AnnotatedString
,并将此AnnotatedString
传递给 Text 可组合项。(I34d4b, b/323346994)- 引入
ViewConfiguration.HandwritingGestureLineMargin
用于手写手势。支持BasicTextField
的JoinOrSplit
手势 (Ie6e13, b/325660505) FocusProperties.enter
和FocusProperties.exit
不再是实验性功能。FocusDirection.Enter
和FocusDirection.Exit
不再是实验性功能。FocusRequester.Cancel
不再是实验性功能 (I461a1, b/261564106)- 查询布局坐标时,您现在可以使用
excludeDirectManipulationOffset
参数来排除父布局通过Placeable.PlacementScope.withDirectManipulationPlacement
放置子项所设置的偏移量。同样,频繁更改子项位置的布局现在可以使用withDirectManipulationPlacement
放置它们(例如 Scroll,默认实现)。这有助于基于approachLayout
的动画更直观,现在有机会区分要动画的偏移量,以及在决定动画其方法时要直接应用的偏移量。(I60ec7) - 长截图的功能标志已移除。(I28648, b/329128246)
LazyColumn
现在将在长截图中正确渲染粘性标题。(I8d239, b/329296635)NestedScroll
源 Drag 和 Fling 正在被UserInput
和SideEffect
取代,以适应这些源的扩展定义,这些定义现在包括动画(Side Effect)和鼠标滚轮和键盘(UserInput
)。(I40579)ApproachLayoutModifierNode
和Modifier.approachLayout
现在已稳定,新的isMeasurementApproachInProgress()
和isPlacementApproachInProgress()
分别取代了旧的isMeasurementApproachComplete()
和isPlacementApproachComplete()
。- 移除了已弃用的
intermediateLayout
修饰符。(I3e91c) - 将
GraphicsLayer#buildLayer
重命名为 record,以镜像 Displaylist 支持的 API(如RenderNode
和 Picture)的 begin/endRecording 方法。 - 更新了
rememberGraphicsLayer
以利用rememberObserver
。(I312c1, b/288494724, b/330758155) UrlAnnotation
已弃用,请改用LinkAnnotation.Url
。如果您使用 Material 主题,则使用TextDefaults
对象创建应用了 Material 主题的注解 (I8d180, b/323346545)- 文本链接除了普通样式、悬停样式和焦点样式外,还获得了按下状态样式选项 (I5f864, b/139312671)
String.parseAsHtml
重命名为AnnotatedString.Companion.fromHtml
。(I43dcd)- 向
parseAsHtml
方法添加了样式参数(linkStyle
、focusedLinkStyle
、hoveredLinkStyle
)和链接交互侦听器。解析带有 HTML<a>
标签的字符串时,该方法将为每个此类标签构造一个LinkAnnotation.Url
,并将样式对象和链接交互侦听器传递给每个注解。(I7c977) LinkAnnotation
现在接受基于状态的样式参数和LinkInteractionListener
。将此注解添加到AnnotatedString
以获得超链接。通过传递focusedState
和/或hoveredState
,您可以定义链接在聚焦和/或悬停时的视觉configuration
。(I81ce4, b/139312671)ImeOptions.hintLocales
不再可为空。如果您想传递一个空的 Locale 列表,请使用LocaleList.Empty
。(Ic5bc4)
Bug 修复
- 优雅地处理错误/损坏的历史输入事件数据(忽略错误的偏移数据)。
- 修复了在活跃指针输入事件流期间(例如,在悬停进入和悬停退出 [鼠标/手写笔] 之间),在另一个指针输入修饰符之前动态添加指针输入修饰符时出现的意外指针事件。
版本 1.7.0-alpha06
2024 年 4 月 3 日
androidx.compose.ui:ui-*:1.7.0-alpha06
已发布。版本 1.7.0-alpha06 包含 这些提交。
新功能
- 添加了
parseAsHtml
方法用于样式化字符串:它允许将带有 HTML 标签的字符串转换为AnnotatedString
。请注意,并非所有标签都受支持,例如,您目前无法显示项目符号列表。(I84d3d, I30626, b/139326648) - 实现了对 Compose 滚动容器中长截图的实验性支持,使用官方 Android API (
ScrollCaptureCallback
)。此功能是实验性的,目前可能无法正确处理所有情况。因此,它目前默认禁用。要选择启用,请将ComposeFeatureFlag_LongScreenshotsEnabled
标志设置为 true。(I2b055, b/329296471)
API 变更
fun ClipEntry.getMetadata()
已更改为val ClipEntry.clipMetadata
。(I50155)- 移除了
ClipboardManager.getClipMetadata
和ClipboardManager.hasClip
函数。请使用clipEntry.getMetadata()
读取当前剪切条目的元数据。另外,请检查ClipboardManager.getClip
的结果是否为 null,以了解剪贴板是否有当前剪切。(I50498) - 现在可以将
GraphicsLayer
对象传递给placeable.placeWithLayer()
函数 (I1b22f) ClipboardManager.setClip
现在接受 null 值以清除剪贴板。(I7d2e9)- 添加了用于协助隐藏构建工具中用作实现细节的 View 的资源 ID (I99531)
- 添加了
GraphicsLayer#toImageBitmap
suspend 方法,以支持将位图内容渲染到GraphicsLayer
中。这是 API 级别 22+(含)上的硬件加速渲染操作,支持 99% 以上的所有 Android 设备。在 Android API 级别 21 上,它会回退到软件渲染。(I9e114) - 将 Android
RectF
转换为ComposeRect
的辅助方法 (I39925, b/325660505) - 所有
KeyboardOptions
参数现在默认具有未指定值。添加了KeyboardOptions.merge
方法。 - 将
KeyboardOptions.autoCorrect
重命名为autoCorrectEnabled
并使其可为空,其中 null 表示未指定值。(Ia8ba0, b/295951492) BasicTextField(state)
变体和BasicSecureTextField
现在使用KeyboardActionHandler
而不是KeyboardActions
来处理软键盘执行的操作。(I58dda)
版本 1.7.0-alpha05
2024 年 3 月 20 日
androidx.compose.ui:ui-*:1.7.0-alpha05
已发布。版本 1.7.0-alpha05 包含 这些提交。
新功能
- 引入新的
GraphicsLayer
API,用于记录显示列表中的绘图命令以及影响显示列表渲染的其他属性。这提供了一个隔离边界,将复杂场景划分为可以独立更新的较小部分,而无需重新创建整个场景。对GraphicsLayer
进行的变换无需重新记录显示列表即可完成。与Modifier.graphicsLayer
不同,GraphicsLayer
允许在其他位置渲染可组合内容,并且在内容预期在不同场景中渲染的动画用例中非常有用。
API 变更
GraphicsLayer.draw(Canvas)
不再是公共 API。请改用DrawScope.drawLayer(GraphicsLayer)
扩展函数来绘制图层。(I7a7c0)- 将
restrictedConstraints()
拆分为两个方法:fitPrioritizingWidth()
和fitPrioritizingHeight()
(I6d7fd) - 引入了 Android L 用途的
HardwareCanvas
存根 (I1c3b5, b/288494724) - 更新 Compose 框架以公开
GraphicsContext
组合局部变量,同时更新 Owner、DelegateableNode
和drawWithCache
Modifier 实现以公开对GraphicsContext
的访问,以便在 Modifier 拆卸时自动清理GraphicsLayer
实例。(I64a2f, b/288494724) - 引入
InterceptPlatformTextInput
以帮助编写低级 IME 相关测试和其他低级 IME 用例。PlatformTextInputTestOverride
已弃用。(I862ed, b/322680547) - 添加了
GraphicsLayer.setOutline(Outline)
扩展函数。(Ib81f4) - 引入
GraphicsContext
函数构造函数以创建工厂来创建GraphicsLayer
实例 (Ib98d6, b/288494724) - 公开
GraphicsLayer
API,以提供开发人员定义的灵活性,用于捕获可在其他位置绘制的绘图命令,并对最终结果应用不同的视觉效果。(I80245, b/288494724) - 引入
Paragraph#getRangeForRect
,它返回给定矩形区域覆盖的文本范围。(Iee516, b/325660505) - 移除了带有
onLinkClicked
参数的BasicText
的实验性重载。未来将提供超链接支持的替代 API。(I107d5)
Bug 修复
- 添加了
GraphicsLayer
expect/actual API 定义,以支持捕获和重播绘图命令,并具有可选的合成视觉效果和变换。引入GraphicsContext
接口,以包含图形依赖项,包括GraphicsLayer
实例的创建和管理。(I4a8d6, b/288494724) - 修复了与 1D 焦点搜索的互操作性问题,在该问题中,焦点会卡在嵌入在其他视图中的
ComposeView
中。(I08fd4)
外部贡献
LocalLifecycleOwner
已从 Compose UI 移动到lifecycle-runtime-compose
,以便其基于 Compose 的辅助 API 可以在 Compose UI 之外使用。感谢 Jake Wharton 的贡献。(I6c41b, b/328263448)- 在所有基于偏差的对齐子类型上一致地公开偏差浮点属性。(I69f0f, b/328088992)
版本 1.7.0-alpha04
2024 年 3 月 6 日
androidx.compose.ui:ui-*:1.7.0-alpha04
已发布。版本 1.7.0-alpha04 包含 这些提交。
API 变更
- 支持 Android U 之后设备的 BasicTextField2 手写功能。(I002e4)
- 在此 CL 中,我们添加了
GetScrollViewportLength
语义操作,以便我们可以将 Compose 中滚动组件的信息传递给 a11y 系统。此 CL 还将该属性的应用扩展到 Foundation 可滚动列表。(Ic5fa2) FocusRequester.createRefs
现在已稳定 (I4d92c, b/261436820)- 引入了
DelegatableNode.requireView()
,允许修饰符节点获取当前的 AndroidView
,而无需读取组合局部变量。(I40768) - 新的 API
Path.reverse()
用于反转路径方向 (I36348) - 向
KeyboardOptions
添加了hintLocales
,为TextFields
提供能力,以向 IME 提示特定区域设置以预设首选语言。 - 从
Locale
公开platformLocale
属性,该属性返回底层平台对象,例如java.util.Locale
。(I921c6)
版本 1.7.0-alpha03
2024 年 2 月 21 日
androidx.compose.ui:ui-*:1.7.0-alpha03
已发布。版本 1.7.0-alpha03 包含这些提交。
API 变更
- 引入
ContextualFlowRow
并增强了带有 MaxLines 和 Overflow 的FlowRow
/Column
。我们很高兴宣布对实验性FlowRow
和FlowColumn
进行增强,现在它们具有 maxLines 和溢出支持,同时首次亮相ContextualFlowRow
和ContextualFlowColumn
。此更新旨在提供性能最佳的组件,其中ContextualFlow*
非常适合大量项目使用少量maxLines
配置和动态 +N 查看更多按钮,而FlowRow
和FlowColumn
非常适合少量项目,少于 100 个项目。重要提示:要在FlowRow
或FlowColumn
中保持现有行为,即无论是否适合交叉轴最大值,所有项目都会组合,请在初始化期间将overflow
设置为FlowRowOverflow.Visible
或FlowColumnOverflow.Visible
。请查看ContextualFlowRowSample
和FlowRowSample
以获取这些新功能的示例。(Ib9135, b/293577082) - 添加
maxTextLength
语义属性,该属性应设置在过滤最大允许字符数的文本字段上。(I24d9f, b/170648072) - 已弃用
Modifier.inspectable
包装器。此 API 将导致修饰符出现不必要的无效化,因此现在不鼓励使用它。如果开发人员希望向工具公开修饰符属性,建议他们实现ModifierNodeElement
上的inspectableProperties()
方法。(Ib3236) PopupProperties
的新构造函数,允许完全控制WindowManager.LayoutParams
标志。(Ibb33e, b/312485503)- 引入了
DelegatableNode.requireLayoutCoordinates()
,作为获取Modifier.Node
当前LayoutCoordinates
的方法,而无需覆盖onPlaced
并自行将坐标存储在属性中。(Ia8657) - 引入了
DelegatableNode.currentLayoutCoordinates
,作为获取Modifier.Node
当前LayoutCoordinates
的方法,而无需覆盖onPlaced
并自行将坐标存储在属性中。(Iaebaa) BasicTextField2
及其相关 API(位于androidx.compose.foundation.text2
包下)已移至androidx.compose.foundation.text
。(I9f635)- 添加了新的
ApproachLayoutModifierNode
API 以支持在显式 Modifier 节点中创建自定义方法逻辑。还添加了新的实验性DeferredTargetAnimation
API,用于在实例化时目标未知的动画。(I60745) - 新的
Path
API 用于查询 Path 的方向并从Path
中提取轮廓。(I63d04) - 添加了
PathHitTest
和Path.contains(Offset)
来检查Path
是否包含特定点。(I3b218) TextLayoutResult
现在公开了getLineBaseline(lineIndex)
方法。除了现有的便利属性firstBaseline
和lastBaseline
之外,这允许读取文本任意行的基线。(Ide4e8, b/237428541)- 添加了仅比较两个
AnnotatedStrings
注解的方法。(I32659)
Bug 修复
- 修复了
SemanticsPropertyReceiver.performImeAction
和SemanticsActions.PerformImeAction
的向后兼容性问题。(Id0528, b/322269946)
版本 1.7.0-alpha02
2024 年 2 月 7 日
androidx.compose.ui:ui-*:1.7.0-alpha02
已发布。版本 1.7.0-alpha02 包含这些提交。
API 变更
- 修复了
SemanticsPropertyReceiver.performImeAction
的二进制兼容性问题。(I65865, b/322269946) - 接受
usePlatformDefaultWidth
参数的PopupProperties
构造函数不再是实验性功能。(I8f8d2) - 添加了
ComposeTestRule.waitUntil
的重载,该重载接受条件的字符串描述以包含在超时消息中。(I9413e) - 新的语义 API
unset()
用于移除同一修饰符链中添加的语义属性。新的语义属性isOpaque
。(I8c583, b/317966058, b/246056649) - 从
PointerInputChange
的公共 API 的复制方法中移除了originalEventPosition
。(I7bead)
Bug 修复
- 修复了辅助功能错误,该错误允许非选项卡和非单选按钮在选中时可点击。(I2181c)
VelocityTracker
现在将默认开启添加点修复。如果出现任何问题,仍可以通过将VelocityTrackerAddPointsFix
设置为 false 来关闭该修复。(Ib3877, b/269487059)- 修复了
TextStyle
和ParagraphStyle
中的二进制向后不兼容性。(I179f0, b/320819734)
外部贡献
版本 1.7.0-alpha01
2024 年 1 月 24 日
androidx.compose.ui:ui-*:1.7.0-alpha01
已发布。版本 1.7.0-alpha01 包含这些提交。
API 变更
- 通过添加
ClipEntry
和ClipMetadata
扩展了ClipboardManager
,以支持任意内容(例如图像)。 - 向
ui-test
添加了DeviceConfigurationOverride
API,以允许本地覆盖测试内容的行为,例如指定可用大小、区域设置、布局方向、字体缩放或主题。
版本 1.6
版本 1.6.8
2024 年 6 月 12 日
androidx.compose.ui:ui-*:1.6.8
已发布。版本 1.6.8 包含 这些提交。
Bug 修复
- 修复了字体缩放比例小于最低定义表时字体缩放不一致的问题。在这种情况下,我们现在在 1 倍线性缩放和最低定义表之间进行插值,以便字体大小随着缩放比例的增加而单调增加。(Icbae3)
版本 1.6.7
2024 年 5 月 1 日
androidx.compose.ui:ui-*:1.6.7
已发布。版本 1.6.7 包含 这些提交。
版本 1.6.6
2024 年 4 月 17 日
androidx.compose.ui:ui-*:1.6.6
已发布。版本 1.6.6 包含 这些提交。
Bug 修复
- 修复了罕见的
BasicTextField
崩溃问题。
版本 1.6.5
2024 年 4 月 3 日
androidx.compose.ui:ui-*:1.6.5
已发布。版本 1.6.5 包含 这些提交。
版本 1.6.4
2024 年 3 月 20 日
androidx.compose.ui:ui-*:1.6.4
已发布。版本 1.6.4 包含 这些提交。
版本 1.6.3
2024 年 3 月 6 日
androidx.compose.ui:ui-*:1.6.3
已发布。版本 1.6.3 包含 这些提交。
版本 1.6.2
2024 年 2 月 21 日
androidx.compose.ui:ui-*:1.6.2
已发布。版本 1.6.2 包含这些提交。
版本 1.6.1
2024 年 2 月 7 日 androidx.compose.ui:ui-*:1.6.1
已发布。版本 1.6.1 包含这些提交。
Bug 修复
- 修复了
SemanticsPropertyReceiver.performImeAction
和SemanticsActions.PerformImeAction
的向后兼容性问题。(Ie0bb2, b/322269946) - 布局现在在测量时返回异常大的尺寸时会发出错误。这种错误通常发生在测量直接使用最大约束而未检查
Constraints.Infinity
时。该检查将帮助开发人员发现布局尺寸不正确的问题,而不是其包含布局中的问题。(I339a9)
版本 1.6.0
2024 年 1 月 24 日
androidx.compose.ui:ui-*:1.6.0
已发布。版本 1.6.0 包含这些提交。
版本 1.6.0-rc01
2024 年 1 月 10 日
androidx.compose.ui:ui-*:1.6.0-rc01
已发布。版本 1.6.0-rc01 包含这些提交。
Bug 修复
- 优化了矢量图形实现,通过最大限度地减少额外的重新组合来提高性能。
版本 1.6.0-beta03
2023 年 12 月 13 日
androidx.compose.ui:ui-*:1.6.0-beta03
已发布。版本 1.6.0-beta03 包含这些提交。
新功能
- 现在
LayoutCoordinates
可以脱离而节点不脱离。在 compose Layout Inspector 中防止这种情况发生 (If693)
Bug 修复
PlatformImeOptions
现在是具体类而不是接口。(If40a4)- 修复了由于
LocalSoftwareKeyboardController
和LocalTextInputService
每次根重新组合时都提供新值而导致的额外下游重新组合。(I42190, b/310510985)
版本 1.6.0-beta02
2023 年 11 月 29 日
androidx.compose.ui:ui-*:1.6.0-beta02
已发布。版本 1.6.0-beta02 包含这些提交。
版本 1.6.0-beta01
2023 年 11 月 15 日
androidx.compose.ui:ui-*:1.6.0-beta01
已发布。版本 1.6.0-beta01 包含这些提交。
API 变更
DragAndDropTarget
修饰符现在明确接收DragAndDropTarget
,并具有一个 lambda 以选择加入拖放会话。现在有两个用于DragAndDropModifierNode
的工厂函数。一个用于接收传输,一个用于传输数据 (I69481)- 更新了
maximumFlingVelocity
以表示为浮点数。更新了文档,更清楚地说明了maximumFlingVelocity
单位。(I8adc7) DragAndDropModifierNode
工厂中的onDragAndDropStart
已重命名为acceptDragAndDropTransfer
。acceptsDragAndDropTransfer
已添加到dragAndDropTarget
Modifier 中,以接受拖放会话。如果对拖放会话感兴趣,此 lambda 将返回一个可行的DragAndDropTarget
。其他用于处理拖动事件的 lambda 已被此取代。已添加一个DragAndDropTarget
工厂函数以从拖放会话中接收 (Iebf3a)已移除
DragAndDropInfo
类型。DragAndDropModifierNode.drag
现在接受transferData
、装饰大小和拖动装饰DrawScope
lambda 的参数DragAndDropTarget
具有用于特定拖放事件的方法,而不是单个抽象方法DragAndDropModifierNode
工厂函数中的onDragAndDropEvent
已重命名为onDragAndDropStart
,以更好地传达所提供的DragAndDropTarget
仅对给定拖放会话有效DragAndDropEventType
已移除 (I645b1)将
PlatformTextInputModifierNode.runTextInputSession
重命名为establishTextInputSession
。(I03cd0)改进了可遍历节点 API 名称,使其更易于理解。(Ia4474)
将
OriginalText
替换为TextSubstitution
。(Ifa5a8)将
PlatformTextInputModifierNode.textInputSession
重命名为runTextInputSession
。(Ie9c6b)SubcomposeLayout
的子项(以及基于它的布局,例如LazyColumn
)在将来重用时被视为已停用。引入了新的assertIsDeactivated()
测试 API 来测试此类节点。默认情况下,其余测试 API 将过滤掉已停用的节点。(I2ef84, b/187188981)移除了
FocusDirection.In
和FocusDirection.Out
,请改用FocusDirection.Enter
和FocusDirection.Exit
(I2f660)Material
SwipeToReveal
API(用于卡片和芯片)现在依赖于基于槽位的 API(Compose 推荐),而不是基于数据类实例来创建这些槽位。这是一个重大更改,请参阅演示和示例代码以了解如何使用新的 API。(Ia8943)FontStyle(int)
构造函数已弃用,请改用FontStyle.Normal
或FontStyle.Italic
。(I66610)将
FontScalable
接口重命名为FontScaling
(Ie804a)
Bug 修复
- 如果文本编辑器没有焦点,
SoftwareKeyboardController.show()
将不再显示软键盘。(I2165a, b/301477279) - 对于在同一 Compose View 中未收到 Down 事件的按键,其硬件按键 Up 事件现在将被忽略。(Ib37b4, b/305518328)
- 添加了
ArcLine
中扫射渐变的渲染器支持。(I4d5bb) - 实现了
PageSize.Fixed
的 equals 和 hashcode。(Ie3ede, b/300134276) - 修复了 Window Inset 更改引起的二进制兼容性问题 (Iee695)
- 移除了 Material3 Chip/Button 的 Material 核心层,因为微基准测试显示其性能更佳。(I55555)
- 作为
effectContext
传递给 Compose 测试的TestDispatcher
现在将用于创建测试和帧时钟。(Ia7178)
版本 1.6.0-alpha08
2023 年 10 月 18 日
androidx.compose.ui:ui-*:1.6.0-alpha08
已发布。版本 1.6.0-alpha08 包含这些提交。
API 变更
Modifier.dragAndDrawSource
的onDrawDragShadow
lambda 已重命名为drawDragDecoration
,DragAndDropInfo
的 size 参数已重命名为dragDecorationSize
。(Id0e30, b/303904810)- 引入
SemanticsNodeInteraction.isDisplayed()
和SemanticsNodeInteraction.isNotDisplayed()
,用于检查匹配节点是否可见而不对其进行断言。(I2c196, b/302100809) - 为
ParagraphTextStyle
的TextAlign
、TextDirection
、Hyphens
和LineBreak
字段引入了特殊的Unspecified
值,以取代null
。由于这些类是内联类,通过将 nullable 替换为 Unspecified,我们避免了基本类型装箱。TextStyle
和 Paragraph 样式中的构造函数、getter 和其他方法已更新为接受上述参数作为非空类型。(I4197e, b/299490814) - 添加
GoogleFont
重载,用于从 XML 读取GoogleFont
。(If8f59) - 将
LoremIpsum
PreviewParameterProvider
设为开放类。(I41bf5, b/266918816, b/300116360)
Bug 修复
FontFamilyResolver
现在使用Dispatchers.Main
进行缓存管理协程。(Ie8dd9)AndroidViewBinding
现在通过使用commitNow
(而不是以前使用的commit
)在其onRelease
中同步移除通过在布局中包含FragmentContainerView
而膨胀的Fragment
实例,从而修复了 Live Edit 方法在更改时替换组合的问题。(I58fbf)
版本 1.6.0-alpha07
2023 年 10 月 4 日
androidx.compose.ui:ui-*:1.6.0-alpha07
已发布。版本 1.6.0-alpha07 包含这些提交。
API 变更
- 引入了
PlatformTextInputMethodTestOverride
,用于编写自定义文本编辑器的测试。(Id159b) - 添加了
dragAndDropSource
修饰符用于启动拖放会话,以及dragAndDropTarget
修饰符用于接收拖放会话。(Ib7828, b/286038936) - 添加了
ColorList
和ColorSet
集合,避免了分配。(I744bd) - 添加了
DisableNonLinearFontScalingInCompose
临时标志,以禁用非线性字体缩放。如果需要时间清理测试,请在测试中将DisableNonLinearFontScalingInCompose = true
。此标志将在 Compose 1.6.0-beta01 中移除。(Ic9486)
Bug 修复
- 优化了 XML 矢量可绘制项的解析。(Ibb015)
版本 1.6.0-alpha06
2023 年 9 月 20 日
androidx.compose.ui:ui-*:1.6.0-alpha06
已发布。版本 1.6.0-alpha06 包含这些提交。
API 变更
- 对 Material 图标进行了额外优化。(I3e08d)
- 增加了遍历修饰符树上下以查找相似节点的功能。(I2d234)
- 为
focusRestorer()
修饰符添加了onRestoreFailed()
回调。(Ie1d43) - 为各种图形 API 添加了 androidx 注解,以指定
ColorInt
、FloatRange
、IntRange
、Size
等。(Id65c8, b/290950582) - 将
showSystemUi=true
添加到PreviewScreenSizes
定义中。(Ib61d3)
行为变更
- Compose 现在使用非线性字体缩放,以提高可读性和辅助功能。当系统设置中字体缩放 > 100% 时,小文本的尺寸将正常增大,但已较大的文本只会略微增大。此外,SP 中定义的行高将自动调整,以与 100% 缩放的预期高度保持成比例。有关详细信息,请参阅《字体缩放最佳实践》。(I11518)
版本 1.6.0-alpha05
2023 年 9 月 6 日
androidx.compose.ui:ui-*:1.6.0-alpha05
已发布。版本 1.6.0-alpha05 包含这些提交。
API 变更
- 在
AndroidComposeViewAccessibilityDelegateCompat
中启用内容捕获。(Ib2969) ScrollView
和RecyclerView
等 View 组件中的滑动速度上限为ViewConfiguration.ScaledMaximumFlingVelocity
。Compose 现在包含其自己的maximumFlingVelocity
版本,该版本现在适用于Draggable
。(Ibf974)- 添加了初步的支架以支持平台拖放 API。(If84ce)
- 将
deviceId
添加到RotaryScrollEvent
中。(Iba3bf) - 更新了
ui-tooling
Devices API 以包含较新的设备。(Ib25b4)
版本 1.6.0-alpha04
2023 年 8 月 23 日
androidx.compose.ui:ui-*:1.6.0-alpha04
已发布。版本 1.6.0-alpha04 包含这些提交。
API 变更
- 添加了一个方法来停用
ReusableComposition
,该方法会移除观察,但保留节点。可以通过调用setContent
再次激活已停用的组合。(Ib7f31) - 添加了
ReusableComposition
接口,用于管理子组合的生命周期和重用。(I812d1, b/252846775) Modifier.focusGroup
已升级为稳定 API。(I7ffa3)- 为各种图形 API 添加了 androidx 注解,以指定
ColorInt
、FloatRange
、IntRange
、Size
等。(I70487, b/290950582) - 更新了
ColorFilter
API,以包含具体的子类类型,从而提高参数的可检查性。(I5fe29) - 引入了 wear-tooling-preview 库,用于列出可用于 UI 预览的有效 Wear 设备。(Ib036e)
- 创建了
FontScalable
接口,用于处理Density
接口的字体缩放部分。(I2cf3f)
版本 1.6.0-alpha03
2023 年 8 月 9 日
androidx.compose.ui:ui-*:1.6.0-alpha03
已发布。版本 1.6.0-alpha03 包含这些提交。
API 变更
- 新型进入/退出过渡,可在进入和退出动画期间根据动画容器的大小缩放内容。
LookaheadScope
可组合函数和接口现已稳定。(Ifb2ce) - 添加了对配置
privateImeOptions
的支持。(Idb772)
Bug 修复
PopupPositionProvider.calculatePosition
现在会在计算中读取的状态发生变化时自动更新弹窗的位置。(I676a1, b/292257547)- 修复了当
readOnly
为 true 时,文本字段会显示键盘并可编辑的问题。还修复了当readOnly
在聚焦时从 true 变为 false 时,键盘不显示的问题。(I34a19, b/246909589) - 扩展了全局断言在 UI 测试中的应用。(I1f90d)
版本 1.6.0-alpha02
2023 年 7 月 26 日
androidx.compose.ui:ui-*:1.6.0-alpha02
已发布。版本 1.6.0-alpha02 包含这些提交。
API 变更
- 添加了一个服务定位器接口,组合的实现者可以实现该接口,允许组合的实现将服务查找委托给原始组合。不应直接调用此接口,它用于在运行时创建实验性 API,这些 API 可以从合成器的封装版本(例如 UI 模块)中找到。(I296b9)
- 完全重新设计了
PlatformTextInput*
API。(I6c93a, b/274661182, b/267235947, b/277380808) SoftwareKeyboardController
和LocalSoftwareKeyboardController
不再是实验性 API。LocalSoftwareKeyboardController
现在也是一个合适的CompositionLocal
。(I4c364)LookaheadLayout
和LookaheadLayoutScope
已弃用几个版本,现已移除。替代 API 是LookaheadScope
,可与任何 Layout 配合使用。(I12ac3)- 添加了
SemanticsNodeInteraction.requestFocus
,作为在测试中请求焦点的更方便、更易发现的方式。(Ie8722) - 添加了实验性 API,用于注册全局断言,供测试框架将来使用。(I12d77)
Bug 修复
AndroidView
的update
回调的首次调用现在将推迟到视图附加后,而不是在应用引入AndroidView
的组合时运行。这修复了一个 bug,即如果它读取的状态立即被某个效果更改,update
回调将不会失效。(Ie9438, b/291094055)
版本 1.6.0-alpha01
2023 年 6 月 21 日
androidx.compose.ui:ui-*:1.6.0-alpha01
已发布。版本 1.6.0-alpha01 包含这些提交。
新功能
- 支持
LazyList
中的预估布局。这使得LazyList
在预估布局阶段可以绕过任何动画(例如,项目放置动画、AnimatedVisibility
等),并计算所有子项的预估大小和位置。在预估布局阶段之后,LazyList
的子项可以独立地按照预估布局中看到的效果进行动画。
行为变更:Compose 中 includeFontPadding
现默认设置为 false
Compose 中 includeFontPadding
现默认设置为 false (21d806)。
includeFontPadding
是一个旧版属性,用于控制是否在文本第一行和最后一行顶部包含额外填充,以适应可能超出文本基线的任何字符。
更新此 Compose 版本将通过移除您显示的所有文本的第一行和最后一行的额外填充来修改所有文本在 UI 中的渲染方式。
根据您的 UI 要求和所使用的字体度量标准,更改应该很小。但是,您可能会遇到以下阻碍: - 屏幕截图测试中断。如果需要,请修复 UI 并重新生成黄金图像。 - 文本略微未对齐。如果需要,请移除任何自定义负填充或添加填充。
您可以通过对每个文本使用 PlatformTextStyle
来选择启用 includeFontPadding
Text(
text = myText,
style = TextStyle(
lineHeight = 2.5.em,
platformStyle = PlatformTextStyle(
includeFontPadding = true/false
)
/* … */
)
)
您可以通过配置 Material 样式来为所有文本选择启用 includeFontPadding
。请注意,参数名称在 M2 和 M3 之间会有所不同。
val Typography = Typography(
body1 = TextStyle(
fontFamily = /* … */,
fontSize = /* … */,
platformStyle = PlatformTextStyle(
includeFontPadding = false
)
/* … */
)
)
MaterialTheme(
typography = Typography,
/* … */
)
您可以在开发者文档和这篇博客文章中找到有关 Compose includeFontPadding
的更多信息。
如果您遇到与此更改相关的任何问题/错误,请使用问题跟踪器提交错误报告。
API 变更
- 支持
InputConnection#requestCursorUpdates
(I0c69b) - 添加了
FocusRequester.saveFocusedChild
和FocusRequester.restoreFocusedChild
(Ic557e, b/272302679, b/275157318) - 添加了
ResourceResolutionException
类型,用于封装尝试加载位图资源时抛出的可抛出对象,并提供加载失败的资源路径描述。(I19f44, b/230166331, b/278424788) - 优化了辅助功能,以提高性能和内存分配。(Iede48)
- 添加了语义属性和动作以支持文本翻译。(I4a6bc)
IntrinsincMeasureScope
及其实现(例如MeasureScope
)中的新属性,用于指示当前测量阶段是否为预估布局阶段。(I7a812)- 更新了
DrawScope
API,引入了将渲染重新定位到具有替代密度/布局方向和大小的不同画布的能力。 - 更新了
DrawContext
以支持密度和布局方向的配置,并使画布可配置。(Ie1f9b, b/225408150) - 添加了
Paragraph#fillBoundingBoxes
以计算字符边界框。(If30ee) - 添加了一组常见的
MultiPreviews
。(Ia5a27)
Bug 修复
- 添加了
FocusTargetModifierNode
接口,可用于创建自定义的FocusTarget
。(I9790e) - 将
TextMeasurer
构造函数中的fallback*
参数重命名为default*
。(I940a5) - 将
SemanticsPropertyReceiver.performImeAction
重命名为onImeAction
,将SemanticsActions.PerformImeAction
重命名为OnImeAction
。(I8e841) - 添加了 Wheel 以区分嵌套滚动中的鼠标滚动和拖动(特别是
NestedScrollConnection
中)。(Ie57e4) - 添加了
asComposePaint
API 来替换toComposePaint
,因为返回的对象封装了原始的android.graphics.Paint
。(I22b4c) - 弃用
SemanticsProperties.imeAction
,并替换为SemanticsActions.performImeAction
的新参数。(I4a587) - 添加了对鼠标选择的支持。基于触摸的选择将按单词扩展,并按字符收缩。(Ic0c6c, b/180639271)
Paragraph
方法过去在超出边界偏移时会抛出AssertionError
,现在像MultiParagraph
一样抛出IllegalArgumentException
。(I549d3, b/243338896)
版本 1.5
版本 1.5.4
2023 年 10 月 18 日
androidx.compose.ui:ui-*:1.5.4
已发布。版本 1.5.4 包含这些提交。
版本 1.5.3
2023 年 10 月 4 日
androidx.compose.ui:ui-*:1.5.3
已发布。版本 1.5.3 包含这些提交。
Bug 修复
- (b/301209788)
TextField
在聚焦并输入韩语时有时会错误地应用之前的命令,导致字符丢失。
版本 1.5.2
2023 年 9 月 27 日
androidx.compose.ui:ui-*:1.5.2
已发布。版本 1.5.2 包含这些提交。
Bug 修复
- 添加了针对从后台线程访问辅助功能滚动 API 时崩溃的解决方法。
- 修复了未附加的节点被添加到语义树中的问题。
版本 1.5.1
2023 年 9 月 6 日
androidx.compose.ui:ui-*:1.5.1
已发布。版本 1.5.1 包含这些提交。
Bug 修复
- 修复了当
readOnly
为 true 时,文本字段会显示键盘并可编辑的问题。还修复了当readOnly
在聚焦时从 true 变为 false 时,键盘不显示的问题。(I34a19, b/246909589)
版本 1.5.0
2023 年 8 月 9 日
androidx.compose.ui:ui-*:1.5.0
已发布。版本 1.5.0 包含这些提交。
版本 1.5.0-rc01
2023 年 7 月 26 日
androidx.compose.ui:ui-*:1.5.0-rc01
已发布。版本 1.5.0-rc01 包含这些提交。
Bug 修复
- 修复了在
movableContentOf()
中使用SubcomposeLayout
时发生的崩溃问题。
版本 1.5.0-beta03
2023 年 6 月 28 日
androidx.compose.ui:ui-*:1.5.0-beta03
已发布。版本 1.5.0-beta03 包含这些提交。
Bug 修复
- 添加了
FocusTargetModifierNode
接口,可用于创建自定义的FocusTarget
。(Ifb1d6) - 修复了 Dialog 和 Popup 可组合项的一个问题,当
usePlatformDefaultWidth=true
时,子窗口可能无法按预期调整大小。(I112ee)
版本 1.5.0-beta02
2023 年 6 月 7 日
androidx.compose.ui:ui-*:1.5.0-beta02
已发布。版本 1.5.0-beta02 包含这些提交。
API 变更
- 添加了
asComposePaint
API,以便在 Compose 中使用android.graphics.Paint
实例。
Bug 修复
- 添加了
asComposePaint
API 来替换toComposePaint
,因为返回的对象封装了原始的android.graphics.Paint
。(I22b4c)
版本 1.5.0-beta01
2023 年 5 月 24 日
androidx.compose.ui:ui-*:1.5.0-beta01
已发布。版本 1.5.0-beta01 包含这些提交。
API 变更
- 移除了重新组合、颜色动画和
AndroidComposeView
中的分配。(Ib2bfa) - 添加了辅助函数
CacheDrawModifierNode()
以允许委托。(Icf8f9) - 引入了
isLookingAhead
属性,可从MeasureScope
访问,用于观察预估布局结果并在需要时影响主阶段。(Ibf4c3) - 新的语义属性
traversalIndex
,一个浮点数,用于在TalkBack
遍历中重新排序节点(值越小越靠前)。(I9a81b, b/186443263) - 将语义属性
isContainer
重命名为isTraversalGroup
。(I121f6) ColorProducer
现在具有operator fun invoke
而不是produce
。(I4a9a2)- 添加了
Path
转换 API,以将平移/缩放/旋转转换应用于路径对象。(I23434, b/233772232) ColorProducer
的方法名为produce
。(I78bde)- 将
toFrameworkColorSpace
重命名为toAndroidColorSpace
。(I4f547) - 将
ColorLambda
重命名为ColorProducer
。(I73b1a) - 引入 API 以在 Android 和 Compose 颜色空间类型之间进行转换。(Ie7db4, b/279979665)
- 为
BasicText
添加了一个颜色参数,以允许高效地设置文本颜色或为其设置动画。(Iffd88, b/246961787) - 将
TextRange.constrain
重命名为TextRange.coerceIn
。(I31be2) - 添加了优化过的
TextStyle.merge(...)
,带有完整的参数列表。(Iad234, b/246961787) - 稳定了许多 Text API,包括
Brush
、DrawStyle
、TextMotion
、DrawScope.drawText
、Paragraph.paint(Brush)
、MultiParagraph.paint(Brush)
。(I2f740, b/261581564, b/261581931, b/261561245) PlatformTextStyle.includeFontPadding
不再弃用,以鼓励开发者使用此兼容性 API 来切换并测试将includeFontPadding
设置为 false。(I98e96, b/277703184)- 添加了公共的
TextRange.constrain
方法。(I97912) AnnotatedString
中的UrlAnnotation
现在可以通过TalkBack
等辅助功能服务打开。(If4d82, b/253292081)- 为文本字段添加了
InsertTextAtCursor
语义操作。(I11ed5) LineHeightStyle.Alignment(topRatio)
构造函数已提升为稳定 API。(I79c32, b/261565383)TextMeasurer
及相关 API 不再是实验性 API。(I74647, b/261581753)- 添加了
PerformImeAction
语义操作,用于在文本编辑器节点上调用 IME 操作。(Ic606f, b/269633506) PlatformTextInput
API 不再是 Android 的实验性 API。(I668eb)Enum.valueOf
的值参数名称已更改。(Ia9b89)- 更多来自 enum valueOf 的抛出异常。(I818fe)
- 引入了新的低级
PlatformTextInputAdapter
API,用于构建直接与平台 API 通信的自定义文本输入实现。(I58df4) - 为
DrawScope.drawText
、Paragraph.paint
和MultiParagraph.paint
方法添加了BlendMode
参数,以支持在 Canvas 上绘制文本时使用不同的混合算法。(I57508) - 将
Font.MaximumAsyncTimeout
重命名为Font.MaximumAsyncTimeoutMillis
。仅重命名。(I07af5) - 更新了
@Preview
参考设备的 DPI 值。(Id6151, b/254528382) - 为
BasicText
添加了brush
、alpha
参数,以允许高效地设置文本画笔或为其设置动画。 - 在 :ui:ui-unit 中为 Float、Double、Long、Int、Short 定义了无装箱的 lambda 类型。(I6f18d, b/246961787)
Bug 修复
- 移除了指针速度跟踪中的多次分配。(I26bae)
- 减少了布局和指针输入管理中的分配。(I5333a)
- 优化了矢量内存使用和首帧渲染。(I2f3c6)
- 移除了使用 Canvas 绘制线条和点时的分配。(I9f535)
- 添加了
AndroidFont.fontVariationSettings
的文档。(I7d9e2)
外部贡献
- 提高了 Vector API 的性能并减少了分配。(I906cb)
版本 1.5.0-alpha04
2023 年 5 月 10 日
androidx.compose.ui:ui-*:1.5.0-alpha04
已发布。版本 1.5.0-alpha04 包含这些提交。
新功能
Modifier.Node
委托改进 增加了从DelegatingNode
委托给其他Modifier.Node
实例的增强能力。这可以通过delegate
和undelegate
API 实现。在此更改之前,委托节点中的每个 API 都需要显式委托给被委托节点。更改后,除非DelegatingNode
显式覆盖节点接口,否则节点接口将隐式委托。( 67352bc)
API 变更
- 引入
NestedScrollModifierNode
,一个可委托的NestedScroll Modifier.Node
。( I69513) - 为
AndroidViewBinding
可组合函数添加了onReset
和onRelease
参数,仿照AndroidView
可组合函数,并支持使用ViewBinding
进行视图复用。( I00b1e, b/276802519) - 更新了 Compose Path API 以支持回退操作,以支持 Path 频繁操作和更快重用的用例。( I7b797)
- 添加了优化过的
TextStyle.merge(...)
,带有完整的参数列表。(Iad234, b/246961787) - 稳定了许多 Text API,包括
Brush
、DrawStyle
、TextMotion
、DrawScope.drawText
、Paragraph.paint(Brush)
、MultiParagraph.paint(Brush)
。(I2f740, b/261581564, b/261581931, b/261561245) PlatformTextStyle.includeFontPadding
不再弃用,以鼓励开发者使用此兼容性 API 来切换并测试将includeFontPadding
设置为 false。(I98e96, b/277703184)
Bug 修复
- 修复了未通过
Dialog
可组合函数创建的对话框中文本字段不显示键盘的回归问题。( I82551, b/262140644)
版本 1.5.0-alpha03
2023 年 4 月 19 日
androidx.compose.ui:ui-*:1.5.0-alpha03
已发布。版本 1.5.0-alpha03 包含以下提交。
新功能
LookaheadScope
中SubcomposeLayout
的新默认行为:不含条件槽的SubcomposeLayout
(例如TabRow
、Scaffold
、BoxWithConstraints
等)现在可以很好地与预瞄动画配合使用。
API 变更
- 新的默认
intermediateMeasurePolicy
,它重用了预瞄阶段的测量策略,允许不含条件槽的SubcomposeLayout
子类型(如Scaffold
、TabRow
和BoxWithConstraints
)默认与预瞄配合使用。( Id84c8) - 为 Android 窗口创建的重组器现在在收到
ON_STOP
通知时将只阻塞对withFrameNanos
的调用,而不是阻塞所有组合。这意味着与已停止活动关联的窗口将继续为数据更改而重组,但动画或任何其他withFrameNanos
的调用者将被阻塞。( Id9e7f, b/240975572) - 将
motionEventSpy
更改为稳定版。( Ic5ec4, b/261560988) - 添加了公共的
TextRange.constrain
方法。(I97912) PlatformTextStyle.includeFontPadding
不再废弃,以鼓励开发者使用此兼容性 API 来切换和测试将includeFontPadding
设置为false
。( I98e96, b/277703184)
版本 1.5.0-alpha02
2023 年 4 月 5 日
androidx.compose.ui:ui-*:1.5.0-alpha02
已发布。版本 1.5.0-alpha02 包含以下提交。
API 变更
- 新的
SubcomposeLayout
API,它接受一个额外的中间测量策略,用于处理基于预瞄的动画期间的测量/布局逻辑。( I017d3) PointerInput
现在是懒加载的,并使用Modifier.Node
以提高性能 (阅读有关微小行为更改的说明)。( 15dab9)- 将与按键事件相关的实验性 API 更改为稳定版。( I9c7d8, b/261566839, b/261567368)
- 将
PointerInputChange
中的实验性 API 更改为稳定版。( I1b543, b/261560988, b/261565762, b/261565749) - 增加了一种实例化
SuspendingPointerInputModifierNode
的方法,用于更复杂的Modifier.Node
实现。( Ic4933) AnnotatedString
中的UrlAnnotation
现在可以通过TalkBack
等辅助功能服务打开。(If4d82, b/253292081)- 添加了一个 API,用于拦截硬件按键,然后才将其发送到软键盘。( I4f4c6, b/186800395)
- 为文本字段添加了
InsertTextAtCursor
语义操作。(I11ed5) - 文本相关的测试操作(例如
performTextInput
)现在将使用语义操作直接请求焦点,而不是点击该字段。( I6ed05)
Bug 修复
- 文本测试操作现在要求文本字段处于启用状态。( Iab328)
版本 1.5.0-alpha01
2023 年 3 月 22 日
androidx.compose.ui:ui-*:1.5.0-alpha01
已发布。版本 1.5.0-alpha01 包含以下提交。
API 变更
Modifier.intermediateLayout
现在不再需要显式的LookaheadScope
。intermediateLayout
中的测量块以IntermediateMeasureScope
作为接收器,它提供了方便的CoroutineScope
、LookaheadScope
和MeasureScope
。( Ibe2e5)LookaheadLayout
已被LookaheadScope
取代,后者不再是Layout
。这允许LookaheadScope
中的子内容直接由父级的MeasurePolicy
控制。( Ibe2e5)- 增加了
Modifier.Node#coroutineScope
,以允许Modifier.Node
启动协程。( I76ef9) - 通过实现
CompositionLocalConsumerModifierNode
接口,允许Modifier.Node
读取CompositionLocals
。( Ib44df) @Deprecated
类到属性的传播。( I882d1)
版本 1.4
版本 1.4.3
2023 年 5 月 3 日
androidx.compose.ui:ui-*:1.4.3
已发布。版本 1.4.3 包含以下提交。
Bug 修复
- 修复了
AndroidView
与某些Modifier
一起使用时可能无法正确布局的问题。( I4dc77, b/274797771) - 修复了影响下拉菜单 (DropDown Menus) 的 2D 焦点搜索中的错误。( b/276811828)
- 修复了自定义焦点进入/退出属性中的错误,该错误仅在首次调用 lambda 时运行进入/退出块。( b/277234245)
- 修复了焦点系统中的回归问题,该问题导致在读取
focusProperties
时崩溃。( b/271324781, b/274897776)
版本 1.4.2
2023 年 4 月 19 日
androidx.compose.ui:ui-*:1.4.2
已发布。版本 1.4.2 包含以下提交。
Bug 修复
- 修复了
AndroidView
无法正确重用其修饰符的问题,这可能导致意外行为和崩溃。( Ib67ee, b/275919849) - 修复了未通过
Dialog
可组合函数创建的对话框中文本字段不显示键盘的回归问题。( I82551, b/262140644)
版本 1.4.1
2023 年 4 月 5 日
androidx.compose.ui:ui-*:1.4.1
已发布。版本 1.4.1 包含以下提交。
Bug 修复
- 修复了
ParentDataModifier
不影响AndroidView
的问题。( b/274797771)
版本 1.4.0
2023 年 3 月 22 日
androidx.compose.ui:ui-*:1.4.0
已发布。版本 1.4.0 包含以下提交。
自 1.3.0 以来的重要更改
- 增加了新的
PinnableContainer
API,允许固定延迟列表项,使它们在滚动出界时不会被处理掉。例如,Modifier.focusable()
使用此机制固定当前焦点项。( Ib8881, b/259274257, b/195049010) - 焦点系统已使用新的实验性
Modifier.Node
API 重写。( I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589) - 在
Surfaces
上添加了IsContainer
语义属性。此属性将在后续更改中用于根据元素(如surfaces
)的语义确定遍历顺序。( I63379) - 增加了新的无障碍角色
DropdownList
。这可用于在聚焦android.widget.Spinner
时复刻TalkBack
的行为。( I177e5, b/236159001) - 您现在可以使用
PlatformTextStyle(emojiSupportMatch)
选项性地禁用单个Paragraph
的表情符号支持处理。( Ia7100, b/139326806) - Android Compose UI 测试现在在执行帧以达到空闲状态(例如通过
waitForIdle
)时将为每个帧运行布局传递。这可能会影响断言布局动画单个帧的测试。( I8ea08, b/222093277) - 为
TextStyle
添加了实验性TextMotion
,用于将文本定义为Static
(默认)或Animated
。如果文本将通过动画进行缩放、平移或旋转,请使用TextMotion.Animated
。( I24dd7)
版本 1.4.0-rc01
2023 年 3 月 8 日
androidx.compose.ui:ui-*:1.4.0-rc01
已发布。版本 1.4.0-rc01 包含以下提交。
API 变更
- 增加了
AndroidView
可组合函数的重载,它接受onReset
参数。当视图实例在组合中被丢弃并以兼容方式重新使用时,它允许视图实例被重用。这对于视图的LazyRows
和LazyColumns
特别有用。( I3f10d, b/230099236) - 引入了新的低级
PlatformTextInputAdapter
API,用于构建直接与平台 API 通信的自定义文本输入实现。(I58df4)
Bug 修复
BasicTextField
的SetText
语义操作现在将使用与 IME 更新和测试函数(例如performTextReplacement
)相同的代码路径来更新文本缓冲区。- 文本测试函数
performTextClearance
、performTextReplacement
和performTextSelection
现在使用SemanticsActions
。( I0807d, b/269633168, b/269624358)
版本 1.4.0-beta02
2023 年 2 月 22 日
androidx.compose.ui:ui-*:1.4.0-beta02
已发布。版本 1.4.0-beta02 包含以下提交。
API 变更
- 移除了
modifierElementOf()
API。请直接从ModifierNodeElement
扩展。( I2256b) - 增加了新的
Modifier.Node.onReset()
回调,允许您重置一些本地状态,以便在Layout
被重用时(例如作为LazyColumn
的项)正确处理该情况。修复了FocusTargetModifierNode
以正确重置焦点状态。( I65495, b/265201972) - 为
DrawScope.drawText
、Paragraph.paint
和MultiParagraph.paint
方法添加了BlendMode
参数,以支持在 Canvas 上绘制文本时使用不同的混合算法。(I57508)
Bug 修复
- 改进了无障碍焦点顺序算法,例如顶部/底部栏通常分别首先/最后读取。( 74e9c5)
版本 1.4.0-beta01
2023 年 2 月 8 日
androidx.compose.ui:ui-*:1.4.0-beta01
已发布。版本 1.4.0-beta01 包含以下提交。
API 变更
PinnableContainer.PinnedHandle.unpin()
已重命名为release()
。( I4667a)- 将
waitUntilNodeCount
、waitUntilAtLeastOneExists
、waitUntilExactlyOneExists
和waitUntilDoesNotExist
作为实验性 API 添加到ComposeTestRule
,将waitUntil
API 扩展为接受任何匹配器和任何数量的节点。有关更多文档,请参阅ComposeTestRule
。( Ifa1b9, b/226934294) - 将
Font.MaximumAsyncTimeout
重命名为Font.MaximumAsyncTimeoutMillis
。( I07af5) - 移除了
GoogleFont.Provider.AllFontsListUri
,而是在ktdoc
中链接到它。( I16f29)
Bug 修复
- 添加了
AndroidFont.fontVariationSettings
的文档。(I7d9e2)
版本 1.4.0-alpha05
2023 年 1 月 25 日
androidx.compose.ui:ui-*:1.4.0-alpha05
已发布。版本 1.4.0-alpha05 包含以下提交。
API 变更
- 引入了
runComposeUiTest
函数和create*ComposeRule
函数的新实验性重载,它们接受CoroutineContext
参数。该上下文将用于测试组合以及组合中的任何LaunchedEffect
和rememberCoroutineScope()
调用。( I10614, b/265177763) - 增加了一个新 API 来跟踪一维速度。( If5a82)
FocusRequester
现在被标记为@Stable
。( I580ee)- 从接受
usePlatformDefaultWidth
参数的DialogProperties
构造函数中删除实验性注解。( Ic4048) - 增加了计算路径上某个距离处位置和切线的功能 — 使用
PathMeasure.getPosition()
和PathMeasure.getTangent()
。( I3b47c) - 移除了
PlatformParagraphStyle
上意外公开的公共设置器。( I07f47) - 内联/已废弃-隐藏函数的更多类型/可空性。( I24f91)
- 增加了
AnnotatedString.hasStringAnnotations
,以零分配方式查询注解。( I94dfe, b/246960758) - 为
TextMeasurer.measure
函数添加了新的重载,接受String
作为文本。( I47b2d, b/242705342) TextStyle
中的LineBreak
和Hyphens
API 已升级为稳定版。( Ic1e1d)
外部贡献
TextInputSession
和TextInputService
中的notifyFocusedRect
方法不再废弃。( I23a04, b/262648050)
版本 1.4.0-alpha04
2023 年 1 月 11 日
androidx.compose.ui:ui-*:1.4.0-alpha04
已发布。版本 1.4.0-alpha04 包含以下提交。
新功能
- 增加了新的
PinnableContainer
API,允许固定延迟列表项,使它们在滚动出界时不会被处理掉。例如,Modifier.focusable()
使用此机制固定当前焦点项。( Ib8881, b/259274257, b/195049010) - 焦点系统已使用新的实验性
Modifier.Node
API 重写。( I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589) - 在
Surfaces
上添加了IsContainer
语义属性。此属性将在后续更改中用于根据元素(如surfaces
)的语义确定遍历顺序。( I63379) - 增加了新的无障碍角色
DropdownList
。这可用于在聚焦android.widget.Spinner
时复刻TalkBack
的行为。( I177e5, b/236159001) - 您现在可以使用
PlatformTextStyle(emojiSupportMatch)
选项性地禁用单个Paragraph
的表情符号支持处理。( Ia7100, b/139326806) - Android Compose UI 测试现在在执行帧以达到空闲状态(例如通过
waitForIdle
)时将为每个帧运行布局传递。这可能会影响断言布局动画单个帧的测试。( I8ea08, b/222093277) - 为
TextStyle
添加了实验性TextMotion
,用于将文本定义为Static
(默认)或Animated
。如果文本将通过动画进行缩放、平移或旋转,请使用TextMotion.Animated
。( I24dd7)
API 变更
- 将
drawText
中的maxSize: IntSize
参数替换为size: Size
,以与其他DrawScope
函数保持一致。size
默认设置为Size.Unspecified
,这不应改变以前的默认行为。( Icd27d) - 移除了已废弃的实验性字体构造函数。( I8a724, b/261435386)
- UI 工具数据类
Group
现在有一个字段isInline
,它指示该组是否用于调用内联可组合函数。如果isInline
为true
,则调用的是内联可组合函数。但是,对于来自使用未生成内联函数信息的 compose 编译器插件版本编译的模块的内联可组合函数的调用,该值可能为false
。( Idb846) - 许多以前的实验性 API 已升级为稳定版
- 旋转滚动事件 API 现已稳定。( I42ad3, b/261561229)
FontVariation
API 现已稳定。( I8779f, b/241016309)- 所有
Font()
构造函数现在都是稳定 API。( I5948b, b/261435386) DeviceFontFamilyName
现已稳定。( I8b640, b/261435386)- 带有
variationSettings
的AndroidFont
构造函数现在是稳定 API,可用于创建新型字体描述符。( I5adcc, b/261565807) createFontFamilyResolver
API 现已稳定。这可用于捕获异步字体加载期间未捕获的异常。( Ibb481, b/261435386)Font.loadingStrategy
API 现已稳定。( I5937c, b/261435386)GoogleFont
API 现已稳定。( Ic90b0, b/261435386)TextUnit(float, TextUnitType)
现已稳定 API。( I90c84, b/261561612)pluralStringResource
现已稳定 API。( I09849, b/261439703)
版本 1.4.0-alpha03
2022 年 12 月 7 日
androidx.compose.ui:ui-*:1.4.0-alpha03
已发布。版本 1.4.0-alpha03 包含以下提交。
API 变更
- 从
PointerIcon
中移除ExperimentalComposeUiApi
。( I23af8) - 引入页面无障碍操作:
PageUp
、PageDown
、PageLeft
、PageRight
。请注意,这些仅从 API 29 开始可用。( Ida4ab) - 将
rememberNestedScrollConnection
参数视图从根视图更新为主机视图。( Ia5200) - 增加了 Modifier API 来查询祖先滚动信息。( I2ba9d, b/203141462)
- 在
Clickable
中使用,以便在手势可能变为滚动事件时正确延迟按压交互。 - 修复了
Clickables
在Scrollable ViewGroup
内使用时未正确延迟波纹的问题。 - 更新了
Drawers
和Sheets
,以便在手势可能变为滚动事件时正确延迟按压。 - 将
CompositingStrategy.Always
重命名为Offscreen
,以表明graphicsLayer
将始终渲染到中间缓冲区中。( I47dc1) - 带有多个内容槽的
Layout
重载现在已稳定。( I10566, b/248294649) - 增加了实验性新 API
PerfettoTrace.record {}
和PerfettoTraceRule
,作为测试的一部分捕获 Perfetto 跟踪(也称为系统跟踪),以检查测试行为和性能。( I3ba16) - 在使用 Compose 规则的 UI 测试中,在
withFrameNanos
回调期间恢复的延续将在所有帧回调运行完成后才调度。这与 Compose 正常运行时的行为一致。但是,依赖旧行为的测试可能会失败。这应该只影响直接调用withFrameNanos
或withFrameMillis
的代码,以及那些在传递给这些函数的回调之外有逻辑且可能需要移入回调的代码。有关示例,请参阅此 CL 中的动画测试更改。 - 为
TestMonotonicFrameClock
构造函数和工厂函数添加了可选的onPerformTraversals: (Long) -> Unit
参数,用于在withFrameNanos
回调之后但在恢复调用者协程之前运行代码。( Idb413, b/254115946, b/222093277, b/255802670) - 在 Compose 中增加了
EmojiCompat
。( Ibf6f9, b/139326806) - 为
@Preview
增加了新的壁纸参数,以支持动态颜色。( I9f512)
Bug 修复
- 快照应用通知现在在
Recomposer
完成应用更改后发送。( Iad6c0, b/222093277) - 引入了
captureToImage
中的更改,以允许捕获多窗口截图。这对于使用 Compose PopUp 的截图测试很有用。( I169c5)
依赖项更新
- Compose UI 和 Compose Material 现在依赖于 Lifecycle 2.5.1。( I05ab0, b/258038814)
版本 1.4.0-alpha02
2022 年 11 月 9 日
androidx.compose.ui:ui-*:1.4.0-alpha02
已发布。版本 1.4.0-alpha02 包含以下提交。
API 变更
- 更新了
GraphicsLayerScope
以公开graphicsLayer
的当前大小。这对于计算作为可组合大小函数的graphicsLayer
变换很有用。( If8c43,b/181387080) - 引入了
CompositingStrategy
来确定何时利用离屏合成层渲染graphicsLayer
内容。Auto
保持默认行为,即在应用 alpha 或RenderEffect/Overscroll
时内部利用图层。Always
将始终引入离屏缓冲区,而ModulateAlpha
将避免利用离屏缓冲区,而是会调制graphicsLayer
中记录的每个绘图指令。ModulateAlpha
的使用仍将利用离屏缓冲区用于RenderEffect/Overscroll
用法。( I25e82, b/256382834) invalidateSubtree()
已添加到Modifier.Node
,以允许使整个层次结构失效以进行布局和绘制。( I4bd90)- 将
rememberNestedScrollInteropConnection
提升为稳定版。引入了将根视图传递给rememberNestedScrollInteropConnection
的能力。这可以帮助自定义视图更好地响应滚动约束,特别是在非标准视图(例如ModalBottomSheetDialog
)中。( I9e107) - 增加了
ObserverNode
接口,可供Modifier.Node
实现使用,当它们之前读取的值发生更改时需要收到通知。( I5728b, b/247716483) - 为
Paint
增加了一个新构造函数,接受原生android.graphics.Paint
。还添加了一个扩展函数toComposePaint()
,可将现有原生Paint
对象转换为 ComposePaint
。( Ica91b) - 增加了新的
FontFamily.Resolver.resolveAsTypeface
,用于 Android。( I8950b) - 增加了
ToolingState
以允许工具更改可组合的内部状态。( Ie6614) - 重构了工具,以更好地支持新添加的动画。( I8677b)
- 在 material 和 material3 的
Text
、TextField
和OutlinedTextField
中增加了minLines
参数,允许以行数形式设置组件的最小高度。( I4af1d)
版本 1.4.0-alpha01
2022 年 10 月 24 日
androidx.compose.ui:ui-*:1.4.0-alpha01
已发布。版本 1.4.0-alpha01 包含以下提交。
API 变更
- 为手势检测器增加了一个新方法
awaitEachGesture()
。它与forEachGesture()
类似,但手势循环完全在AwaitPointerEventScope
内操作,因此事件在迭代之间不会丢失。 forEachGesture()
已废弃,转而使用awaitEachGesture()
,因为它允许事件在手势之间丢失。( Iffc3f, b/251260206)- 在
androidx
中废弃无障碍对象的回收。我们发现即使在最旧的支持版本中,性能变化也微乎其微。( I0a961) - 将
DrawStyle
作为实验性属性添加到TextStyle
和SpanStyle
,以启用绘制轮廓文本。( If24b8, b/155421273) AnnotatedString.Builder
现在实现了kotlin.text.Appendable
。( I1a061, b/231030444)AnnotatedString.Builder
现在有一个append(AnnotatedString, start: Int, end: Int)
方法,用于附加AnnotatedString
的子字符串以及相交的样式。- 为
Paragraph
和MultiParagraph
绘制函数添加了DrawStyle
参数,启用绘制轮廓文本。( Ic8102, b/155421273)
外部贡献
- 感谢
vighnesh
将 TV 设备添加到预览中。( Ie15cd)
版本 1.3
版本 1.3.3
2023 年 1 月 11 日
androidx.compose.ui:ui-*:1.3.3
已发布。版本 1.3.3 包含以下提交。
Bug 修复
- 修复了 Android 9 上 Activity 保存 Compose View 状态时有时发生的崩溃问题。( I0b755, b/260322832)
版本 1.3.2
2022 年 12 月 7 日
androidx.compose.ui:ui-*:1.3.2
已发布。版本 1.3.2 包含以下提交。
Bug 修复
- 更新为使用 Profobuf 3.21.8,这避免了
protobuf-javalite:3.19.4
中的安全警报 (CVE-2022-3171)。( b/255545055)
版本 1.3.1
2022 年 11 月 9 日
androidx.compose.ui:ui-*:1.3.1
已发布。版本 1.3.1 包含以下提交。
版本 1.3.0
2022 年 10 月 24 日
androidx.compose.ui:ui-*:1.3.0
已发布。版本 1.3.0 包含以下提交。
自 1.2.0 以来的重要更改
- 焦点遍历改进
- Lazy 列表的焦点驱动滚动现在可以工作,使用新的
BeyondBoundsLayout
核心 API - 新的实验性 API 套件
Modifier.Node
(Modifier.composed
的更高性能替代方案) - 改进了窗口内边距支持。
- LazyLists 中对 D-Pad 和硬件键盘的焦点支持。
- 对话框和弹出窗口中支持的最大高程已降至 8dp (对某些定制设计系统而言是行为上的重大更改 – 理由请参阅 beta01 发布说明)
- 许多次要的、非破坏性的 API 改进
许多错误修复和性能改进
版本 1.3.0-rc01
2022 年 10 月 5 日
API 变更
androidx.compose.ui:ui-*:1.3.0-rc01
已发布。版本 1.3.0-rc01 包含以下提交。
Bug 修复
- 增加了新的实验性 API
Hyphens
,以支持文本中的自动连字符。( Iaa869) DeviceFontFamilyName
字体默认不会配置wght
和ital
变体设置,而是使用加载的Typeface
的平台设置。( Ia7a6d, b/246989332)
修复了 LazyColumn
内存泄漏问题 - 当修饰符被重用时,onModifierLocalsUpdated
未使用默认值调用。( b/230168389)
版本 1.3.0-beta03
2022 年 9 月 21 日
API 变更
androidx.compose.ui:ui-*:1.3.0-beta03
已发布。版本 1.3.0-beta03 包含以下提交。- 增加了在文本中自定义换行符的选项。( I86907)
Bug 修复
- 将
TextMeasurer.measure
方法中的size:IntSize
参数更改为constraints: Constraints
,以支持最小宽度约束。( I37530, b/242707525)
AndroidX Activity 的 BackHandler
API 现在可在 Dialog
可组合函数内工作。( I35342)
版本 1.3.0-beta02
2022 年 9 月 7 日
API 变更
androidx.compose.ui:ui-*:1.3.0-beta02
已发布。版本 1.3.0-beta02 包含以下提交。
为 Layout
增加了一个实验性重载,它接受多个可组合内容 lambda 列表,允许以不同方式处理放入不同内容 lambda 中的可测量项。( Ic1b4e)
- 实验性焦点 API 的更改
FocusDirection.In
和FocusDirection.Out
已废弃,并替换为FocusDirection.Enter
和FocusDirection.Exit
。( Ia4262, b/183746982)- 增加了两个新的焦点属性
enter
和exit
,以指定FocusManager.moveFocus(Enter)
和FocusManager.moveFocus(Exit)
的自定义行为。( I5f3f9, b/183746982)
您现在可以使用 FocusRequester.Cancel
取消焦点移动。FocusRequester.Cancel
可用于以下任何焦点属性:up
、down
、left
、right
、next
、previous
、start
、end
、enter
和 exit
。( Ib300f)
版本 1.3.0-beta01
2022 年 8 月 24 日
androidx.compose.ui:ui-*:1.3.0-beta01
已发布。版本 1.3.0-beta01 包含以下提交。
Modifier 节点重构
处理 Modifier/Modifier.Element
实例并协调其在 LayoutNode
上行为的层已进行了重大重构。就目前而言,这是一次重构,它没有影响 Compose 中众多修饰符的任何公共 API,可以看作是仅实现层面的更改。尽管如此,出于各种原因,这是一项重要的更改。( Ie4313)
变更摘要
新增的实验性 Modifier.Node
API 提供了一种抽象,允许在实例上维护状态,该实例将随布局节点的生命周期保留,并且将按每个布局节点和产生它的相应 Modifier.Element
的每次使用进行分配。
广义上讲,这种抽象提供了一种替代机制,无需依赖 Modifier.composed
API 的机制即可生成有状态修饰符。
风险
此更改严格与以前的版本二进制兼容,并且在可观察的行为方面旨在尽可能地向后兼容。也就是说,Compose 中有少数子系统未受此次重构影响,并且行为可能以我们的测试未涵盖的方式发生变化,且尚未发现和修复。
请谨慎升级到此版本。如果您认为这给您造成了问题,请告知我们。
实验性 API
增加了各种实验性 API,都与“Modifier 节点”的新概念有关。
Modifier.Node
的创建结果如下:fun modifierElementOf(…): Modifier
abstract class ModifierNodeElement
abstract class Modifier.Node
abstract class DelegatingNode
interface LayoutModifierNode
interface DrawModifierNode
interface SemanticsNode
interface PointerInputNode
interface ModifierLocalNode
interface ParentDataModifierNode
interface LayoutAwareModifierNode
interface GlobalPositionAwareModifierNode
interface IntermediateLayoutModifierNode
行为破坏性更改
对话框和弹出窗口中支持的最大高程已降至 8dp。
Compose 对话框和弹出窗口的最大支持高程已从 30dp 减少到 8dp。此更改会影响 material 和 UI 自定义对话框和弹出窗口。做出此更改是为了缓解 Android S 以下版本中的无障碍错误,并确保这些窗口内的无障碍服务能够与对话框或弹出窗口中的内容交互。
API 变更
- 只有在创建自定义对话框或弹出窗口实现时,如果其高程设置为高于 8dp 的级别,您才会受到此更改的影响。请考虑降低对话框或弹出窗口的高程。如果您需要选择退出此新行为,请考虑分叉自己的对话框或弹出窗口,并设置所需的高程。不建议这样做,因为无障碍功能可能会受到负面影响,开发人员有责任确保对话框或弹出窗口的底部可由无障碍服务交互和读取。
- 修复了
painterResource
在配置更改时不会更新的问题。( I58e73, b/228862715) rememberTextMeasurer
不再接受FontFamily.Resolver
、Density
或LayoutDirection
参数。请使用TextMeasurer
构造函数为这些参数提供自定义值。( Ia1da3)- 增加了
DialogProperties.decorFitsSystemWindows
属性,以允许对话框支持WindowInsets
。( I57742, b/229378542) - 将字体构造函数移回原始
kotlin
文件以保持二进制兼容性。与上一个稳定版本相比没有变化。( Ieb2f3) - 从几个等于定义中移除了不必要的运算符 — 这没有效果。( I6c309)
FontVariation.Setting
是一个密封接口,以允许未来的钳制 API。( I11021, b/143703328)
将 CompositionGroup.findParameters
添加到 SlotTree.kt
。这允许工具检索 CompositionGroup
的参数,而无需像 asTree
那样先进行内存复制。对于布局检查器,这提供了大约 10 倍的性能改进。( I124fe)
版本 1.3.0-alpha03
2022 年 8 月 10 日
API 变更
androidx.compose.ui:ui-*:1.3.0-alpha03
已发布。版本 1.3.0-alpha03 包含以下提交。LayoutCoordinates.findRootCoordinates()
现在是公共的。( I7fa37, b/204723384)- 增加了实验性 API 以获取
PlacementScope
中的LayoutCoordinates
。这让开发者知道当前布局相对于其位置在哪里放置子元素。( I5482b, b/238632578) - 增加了
LayoutCoordinates.transformFrom
,用于获取从一个LayoutCoordinates
到另一个的矩阵变换。( Ic5ab1, b/238632578) SemanticsModifier.id
已废弃,并将语义 ID 移至LayoutInfo.semanticsId
。( Iac808, b/203559524)- 资源字体现在支持设置字体变体设置(API 26+)。( I900dd, b/143703328)
DeviceFontFamilyNameFont
中的可变字体支持。( Ic1279, b/143703328)- 字体构造函数现在接受
FontVariation.Setting
列表,用于在 O+ 设备上配置可变字体。( I11a9d, b/143703328) - 增加了
FontVariation
API,用于定义和使用可变字体。( I3c40c, b/143703328) LineHeightStyle.Alignment
构造函数现在是公共的(实验性)。( I4bbbe, b/235876330)Paragraph
现在是expect|actual
,并为 Android 和桌面定义。( Id387e, b/239962983)- 接口
Paragraph
现在是密封接口Paragraph
。没有子类化段落的用例,如果此更改影响到您,建议联系我们。( If5247, b/239962983) - 从
PlatformTextStyle
和LineHeightStyle
中移除了实验性注解。( I64bef) - 废弃
TextInputService.show|hideSoftwareKeyboard
。请在应用代码中使用SoftwareKeyboardController
,并在 IME 管理代码中使用TextInputSession
。( I14e4c, b/183448615)
Bug 修复
- 为现有动画类型增加了新 API。( I26179)
为在 SDK 33 及更高版本上需要授予 POST_NOTIFICATIONS
权限的 API 添加了 @RequiresPermission
。( Ie542e, b/238790278)
版本 1.3.0-alpha02
2022 年 7 月 27 日
API 变更
androidx.compose.ui:ui-*:1.3.0-alpha02
已发布。版本 1.3.0-alpha02 包含以下提交。- 增加了新属性
PointerInputChange#pressure
,用于检索压力。( I45a5e, b/205164819) - 增加了
rememberTextMeasurer
,以便在组合中轻松创建和记住TextMeasurer
实例。( I8d66e) Rect
、RoundRect
和MutableRect
现在支持 Kotlinin
语法,用于调用contains
函数。( Ie42b0, b/238642990)- 从
KeyInjectionScope
中移除了不必要的函数,因为它们可以使用 API 中更简单的部分轻松实现。已移除的函数包括pressKeys
、keysDown
和keysUp
。( I81d77) - 重构了
KeyInjectionScope
中的常量和参数名称,在这些常量和参数的单位是毫秒的情况下,包含后缀“Millis”。( Iabef5) - 为
EditCommand
增加了toStringForLog()
方法,以帮助解决文本编辑问题。( I53354, b/228862731) - 在
DrawScope
上增加了drawText
扩展函数,以提供一种在Canvas
和drawBehind
等在DrawScope
上操作的可组合项和修饰符上绘制多样式文本的方法。( I16a62, b/190787898) - 引入了一个名为
TextMeasurer
的新实验性 API,它支持任意文本布局计算,产生与BasicText
相同的结果,独立于 Compose 运行时。( I17101) - 将
mapTree
添加到SlotTree.kt
。这允许工具检查SlotTree
,而无需像asTree
那样先进行内存复制。对于布局检查器,这提供了大约 10 倍的性能改进。( I5e113)
Bug 修复
- 更改了 Compose 预览以存储在二进制输出文件中,以允许开发人员编写和重用库中的
MultiPreview
注解。( I85699, b/233511976) - 当向
Velocity Tracker
添加InputEventChange
事件时,我们将考虑增量而不是位置,这将确保在所有情况下(即使目标元素移动)速度都能正确计算。( Icea9d, b/216582726, b/223440806, b/227709803)
修复了当存在注解时,AnnotatedString.toUpperCase
导致的 NPE 问题。( I0aca2, b/210899140)
版本 1.3.0-alpha01
2022 年 6 月 29 日
API 变更
androidx.compose.ui:ui-*:1.3.0-alpha01
已发布。版本 1.3.0-alpha01 包含以下提交。- 新的
LookaheadLayout
支持在实际测量/布局之前进行预瞄传递。这允许在布局更改时进行预计算,同时允许预瞄后的测量/布局使用预计算的大小/位置来动画大小和位置到目标。SubcomposeLayout
尚未支持,但将在即将发布的版本中支持。( I477f5) - 为
TextStyle
和SpanStyle
的Brush
类型增加了可选的 alpha 参数,以修改整个文本的不透明度。( Ic2fac, b/234117635) - 引入了
UrlAnnotation
注解类型和相关方法,以支持AnnotatedString
中的TalkBack
链接支持。( I1c754, b/231495122)
Bug 修复
- 将实用功能移至运行时。( I4f729)
外部贡献
TextLayoutResult.getLineForOffset
不再抛出异常。( Idc5d6, b/235876324)
增加了新的 API WindowInfo.keyboardModifiers
,用于在可组合函数中或通过 snapshotFlow
观察其状态。( Icdb8a)
版本 1.2
版本 1.3.0-alpha03
版本 1.2.1
Bug 修复
androidx.compose.ui:ui-*:1.2.1
已发布。版本 1.2.1 包含以下提交。- 修复了检查器中的空指针。( b/237987764)
修复了检查器中 remember
期间的类转换异常。( b/235526153)
版本 1.3.0-alpha02
版本 1.2.0
androidx.compose.ui:ui-*:1.2.0
已发布。版本 1.2.0 包含以下提交。
自 1.1.0 以来的重要更改
- 焦点遍历改进
- Lazy 列表的焦点驱动滚动现在可以工作,使用新的
BeyondBoundsLayout
核心 API FocusOrder
和FocusProperties
中新的行为自定义 API
改进了与物理键盘或电视遥控器的行为
- 新的 API 用于
- 窗口内边距
- 手势驱动、无限和布局动画的核心原语
GraphicsLayer
功能,包括 RenderEffect
版本 1.3.0-alpha01
版本 1.2.0-rc03
androidx.compose.ui:ui-*:1.2.0-rc03
已发布。版本 1.2.0-rc03 包含以下提交。
自 1.2.0-rc02 以来无更改。
版本 1.2.0-rc02
2022 年 6 月 22 日
androidx.compose.ui:ui-*:1.2.0-rc02
已发布。版本 1.2.0-rc02 包含以下提交。
版本 1.2.0-rc01
2022 年 6 月 15 日
API 变更
androidx.compose.ui:ui-*:1.2.0-rc01
已发布。版本 1.2.0-rc01 包含以下提交。- Compose 库中的接口现在使用
jdk8
默认接口方法构建。( I5bcf1) - 为
KeyInjectionScope
增加了高阶函数,用于在其他键按下或切换时注入按键操作。这些函数包括withKeysDown
、withKeysToggled
等。还增加了属性,用于检查特定元键是否按下,例如isCtrlDown
用于检查任一控制键是否按下。有关每个函数的文档,请参阅KeyInjectionScope
。( I9f6cd, b/229831515) - 引入了实验性
OverscrollEffect
,以允许自定义过度滚动效果,同时Modifier.scrollable
重载也接受它。 - 实验性的
LocalOverScrollConfiguration
已从foundation.gesture
移至foundation
包,并重命名为LocalOverscrollConfiguration
。( If19fb, b/204650733)
将 runComposeUiTestWithoutActivity {}
重命名为 runEmptyComposeUiTest {}
,这与 createEmptyComposeRule()
对齐。( I6fed7)
版本 1.2.0-beta03
2022 年 6 月 1 日
API 变更
androidx.compose.ui:ui-*:1.2.0-beta03
已发布。版本 1.2.0-beta03 包含以下提交。- 在
KeyInjectionScope
中增加了pressKeyTimes
以及isCapsLockOn
和相关函数。此外,API 现在支持鼠标和键盘组合注入模式,例如在按住元键的同时点击鼠标按钮。( I4c8da, b/229831515) - 增加了对注入按键事件的实验性支持。使用
performKeyInput
发送按键事件,或者在performMultiModalInput
进行多模式输入手势期间,通过MultiModalInjectionScope
的key
属性发送。有关 API 的文档,请参阅KeyInjectionScope
。( Ic5000, b/229831515) - 增加了新的
GoogleFont.Provider.AllFontsListUri
,用于检索 Android 支持的 Google Fonts 的规范互联网源。
Bug 修复
- 改进了当 Google Fonts 在 Compose 中加载失败时重新抛出的错误消息。( I0416c)
- 当向
Velocity Tracker
添加InputEventChange
事件时,我们将考虑增量而不是位置,这将确保在所有情况下(即使目标元素移动)速度都能正确计算。( I51ec3, b/216582726, b/223440806, b/227709803) - “显示布局边界”设置现在在从快速设置磁贴切换后立即应用于可组合项,无需离开并重新进入活动。( I843d5, b/225937688)
- 无障碍字符串查找不会触发字体加载。以前,它会尝试为
StyleSpans
加载字体,如果FontFamily.Resolver
被覆盖,这会导致崩溃。( I4609d) - 当光标位于文本字段末尾时,按下向前删除键将不再导致崩溃。
DeleteSurroundingTextCommand
和 DeleteSurroundingTextInCodePointsCommand
现在要求其构造函数参数为非负数。( Ica8e6, b/199919707)
版本 1.2.0-beta02
2022 年 5 月 18 日
API 变更
androidx.compose.ui:ui-*:1.2.0-beta02
已发布。版本 1.2.0-beta02 包含以下提交。
Bug 修复
- 在其他预览类型中重用功能。( I19f39)
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
已重命名为 DisposeOnDetachedFromWindowOrReleasedFromPool
,以更好地反映何时发生处理,而不仅仅是何时不发生处理。( If15ca)
版本 1.2.0-beta01
2022 年 5 月 11 日
新功能
androidx.compose.ui:ui-*:1.2.0-beta01
已发布。版本 1.2.0-beta01 包含以下提交。
API 变更
- 这是 1.2 的第一个 Beta 版本!
Modifier.composed
的键控版本现在是稳定 API (Ie65e4, b/229988420)- 简化了
rememberNestedScrollConnection
API,使用组合局部变量来获取当前视图信息 (I67ca7) @ComposableTarget
注解以及由@ComposableTargetMarker
标记的注解现在可以使用@file
前缀在文件范围内使用。在文件范围内使用目标注解将使编译器假定文件中的所有可组合函数都旨在针对关联的 applier。例如,使用@file:UiComposable
声明所有@Composable
函数都针对 Compose UI applier。需要针对其他 applier 的函数必须明确提供所需 applier 的目标标记注解。 (I40804)引入了新的实验性、平台无关的测试 API:一个
interface ComposeUiTest
和一个fun runComposeUiTest(block: ComposeUiTest.() -> Unit)
,可用于运行 Compose UI 测试而无需TestRule
。要不使用ComposeTestRule
运行测试,请将测试作为 lambda 传递给runComposeUiTest
,并使用接收器作用域ComposeUiTest
中的方法和成员,这些方法和成员与ComposeContentTestRule
中的相同。添加了 Android 特定的
interface AndroidComposeUiTest
和fun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit)
,以提供对底层 Activity 的访问,类似于AndroidComposeTestRule
。为了获得更多控制,您可以自行实例化一个class AndroidComposeUiTestEnvironment
。桌面实现是
class DesktopComposeUiTest
,但目前不提供桌面特定的运行函数。将测试从
ComposeTestRule
迁移到ComposeUiTest
可以像这样完成(Android 示例)。从@RunWith(AndroidJUnit4::class) class MyTest { @get:Rule val rule = createComposeRule() @Test fun test() { rule.setContent { Text("Hello Compose!") } rule.onNodeWithText("Hello Compose!").assertExists() } }
到
@RunWith(AndroidJUnit4::class) class MyTest { @Test @OptIn(ExperimentalTestApi::class) fun test() = runComposeUiTest { setContent { Text("Hello Compose!") } onNodeWithText("Hello Compose!").assertExists() } }
目前,
ComposeContentTestRule
和ComposeTestRule
不继承自ComposeUiTest
,这意味着ComposeUiTest
上的扩展函数还不能在TestRule
接口上调用。当ComposeUiTest
毕业为稳定 API 时,ComposeContentTestRule
和ComposeTestRule
将会改变以继承自ComposeUiTest
。 (Ib4e90)LineHeightBehavior
已重命名为LineHeightStyle
LineVerticalAlignment
已重命名为LineHeightStyle.Alignment
重命名
LineHeightTrim
为LineHeightStyle.Trim
LineHeightStyle
的默认构造函数值已移除 (I582bf, b/181155707)向
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)PlatformParagraphStyle.lerp
和PlatformSpanStyle.lerp
函数已更改为顶级函数 (I9a268)
Bug 修复
PointerInputChange::copy
文档现在正确说明它是一个浅拷贝。 (I182f5)- 当高度受限且无法容纳所有文本行时,支持省略号 (Ie528c, b/168720622)
- 默认
includeFontPadding
已开启。可以使用TextStyle.platformTextStyle
属性关闭includeFontPadding
。在不久的将来,我们将改变默认行为,但在此之前,这使我们能够更好地集成行高改进 (aosp/2058653) 并解决TextField
剪裁问题。 (I01423, b/171394808)
外部贡献
- 如果垂直滚动(如果 someDelta 为正,则向下滚动),则 Android 上的
MouseInjectionScope.scroll(delta = someDelta)
现在已反转 (Ifb697, b/224992993)
版本 1.2.0-alpha08
2022 年 4 月 20 日
androidx.compose.ui:ui-*:1.2.0-alpha08
已发布。版本 1.2.0-alpha08 包含这些提交。
API 变更
pluralStringResource
函数被标记为实验性,以便将来支持更好的国际化。 (If24e4)- Paragraph 和 MultiParagraph 现在接受 Constraints 参数。目前传递
Constraints.maxHeight
不起作用,但将来可以进行一些计算,例如基于高度的省略。 (I6afee, b/168720622) SubcomposeSlotReusePolicy.getSlotsToRetain()
现在接受一个自定义的 MutableSet-like 类,该类不允许添加新项目。 (Icd314)- PointerIcon 现在是一个
@Stable
接口 (I9dafe) PointerInputChange
中的部分消耗(down OR position)已被弃用。您可以使用consume()
完全消耗更改。您可以使用isConsumed
来确定是否有人以前消耗过更改。PointerInputChange::copy()
现在总是进行浅拷贝。这意味着一旦其中一个拷贝被消耗,PointerInputChange
的拷贝也将被消耗。如果您想创建一个无绑定PointerInputChange
,请改用构造函数。 (Ie6be4, b/225669674)- 启用 Compose 和 View 之间在 Compose > View 方向上的嵌套滚动互操作。这意味着 Compose 父级将能够从嵌套滚动视图接收嵌套滚动增量。 (If7949, b/174348612)
- 新的
SemanticsProperty testTagsAsResourceId
,可用于使 Compose 符合为 View 系统设计的 UIAutomator 测试。 (I39c20) - 在 Android 上使用
FontFamily.SansSerif
时,显示系统字体的所有可用粗细。这将在 API 21-28 上内部使用 sans-serif-medium 等回退字体名称。这是一个行为更改,因为以前在 API 21-28 上仅支持 400 和 700 粗细。 (I380fe, b/156048036, b/226441992) - Paragraph 和 Multiparagraph 的构造函数重新排列了位置参数,使其位于可选参数之前。 (Idafaa)
AndroidFont
现在将 typefaceLoader 作为构造函数参数。 (I2c971)
版本 1.2.0-alpha07
2022 年 4 月 6 日
androidx.compose.ui:ui-*:1.2.0-alpha07
已发布。版本 1.2.0-alpha07 包含这些提交。
API 变更
- 添加了新函数
Snapshot.withoutReadObservation { ... }
。它允许用户运行传入的 lambda,而无需订阅在此块期间读取的状态值的更改。在您希望受益于基于快照的线程安全写入/读取,但又希望能够在不引起不必要的重新组合或重新测量的情况下读取值的情况下,这会很有用。 (I9f365, b/214054486) ComposeView
的consumeWindowInsets
扩展属性允许开发者禁用 AndroidWindowInsets
的消耗。这使得层次结构中独立的ComposeViews
能够各自应用WindowInsets
,而不会相互干扰。 (I0ef08, b/220943142)- 添加了
KeyboardType.Decimal
作为Keyboard.Number
的替代方案,用于专门在 IME 中包含小数点分隔符。 (Iec4c8, b/209835363) PointerEventType.Scroll
和PointerEvent.scrollDelta
现在是稳定 API (I574c5, b/225669674)- 启用 View 和 Compose 之间协同 View 类的嵌套滚动互操作。这意味着 Compose 现在能够向(协同的)View 父级调度滚动增量。 (I5d1ac, b/174348612)
- 更新了
FontFamily.Resolver
以集成系统范围的粗体文本无障碍设置 (I6c1e7) Font(AssetManager, String, ...)
已弃用,替换为Font(String, AssetManager, ...)
。这是一个实验性 API。 (I1c7a4)- 添加了新的字体描述符
Font(DeviceFontFamilyName)
,可在字体回退链中选择性地查找系统安装的字体。 (I30468, b/219754572) - 在 TextStyle/ParagraphStyle 中添加了
includeFontPadding
的临时兼容性配置。includeFontPadding
可以通过TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))
进行更改。这是一个临时的配置选项,用于启用迁移,将来会移除。 (If47be, b/171394808) - 为调试帮助添加了
GoogleFont.Provider.isAvailableOnDevice
扩展。 (I64e31) - 添加
GoogleFont.Provider
构造函数以与@ArrayRes
结合使用 (Ic5ee1, b/225984280) - Compose
GoogleFont
现在被称为Font(GoogleFont)
,API 在其他方面保持稳定。 (I125f2)
Bug 修复
- 在 material/Scaffold 中添加了 lint 检查,以确保内部填充被使用 (Ifb111)
版本 1.2.0-alpha06
2022 年 3 月 23 日
androidx.compose.ui:ui-*:1.2.0-alpha06
已发布。版本 1.2.0-alpha06 包含这些提交。
API 变更
- 添加了
RequestFocus
语义操作,用于请求焦点在可聚焦目标上。 (I17b71) - 更新了矢量可绘制对象的解析,以支持自动镜像,以在当前布局方向为 RTL 时翻转
VectorPainter
的内容。 (I79cd9, b/185760237) 更新了阴影/环境颜色,使其成为
Modifier.graphicsLayer
的尾部参数,以实现 API 兼容性 (I3f864, b/160665122)在
GraphicsLayerScope
上添加了阴影/环境颜色的默认实现,以确保非破坏性 API 更改添加了事件时间到 RSB 事件 (Ief8ae)
FocusOrder
现已合并到FocusProperties
中,并且focusProperties()
现在拥有focusOrder()
的所有功能。FocusOrder
和focusOrder()
已被弃用。接受focusRequester
的focusOrder()
应该替换为focusRequester()
修饰符与focusProperties()
的组合。这使得修饰符能够更强地关注分离。 (I601b7)同时升级
RecyclerView
和Compose
将大大提高包含 Compose 视图作为子项的 RecyclerViews 的滚动性能。添加
ViewCompositionStrategy.Default
作为获取内置默认策略的方式添加
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
,这是新的默认策略,可正确处理 RecyclerView 等池化容器。 (If7282)增加了对使用 @Preview 注解注解类的支持,作为添加多预览功能的第一步。此类注解可用于注解 Composable 方法或其他注解类,然后这些方法或类可被视为间接注解了给定的 @Preview。 (I12eff)
参考设备已添加到 @Preview 的设备列表中 (I071c9)
Bug 修复
- 更新了矢量图形 API,以使用适当的可组合注解 @VectorComposable 而不是 @UiComposable (I942bc)
- 从
AnnotatedString.Builder.withStyle
中移除 crossinline (If84d5)
外部贡献
- compose-ui: 将
ambientShadowColor
和spotShadowColor
属性添加到GraphicsLayerScope
(I1ba1a, b/160665122) - 现在通过
pluralStringResource
函数支持复数资源。 (Ib2f23, b/191375123)
版本 1.2.0-alpha05
2022 年 3 月 9 日
androidx.compose.ui:ui-*:1.2.0-alpha05
已发布。版本 1.2.0-alpha05 包含这些提交。
API 变更
TextToolbar
现在接受 lambda 参数而不是ActionCallback
。 (Ib2eb9, b/197950089)- 更新了 core 和 appcompat 中的可空性以匹配 Tiramisu DP2 (I0cbb7)
- Measured 接口现在公开 parentData 属性 (I3313f)
Modifier.onPlaced
和OnPlacedModifier
接口现在是稳定的。 (Ib5482)- 太棒了!Compose 动画现在支持开发者选项中的“动画时长缩放”设置。 (I5a4fc, b/161675988)
- 添加了
BeyondBoundsLayout
修饰符局部变量 (If8b51, b/184670295) - 文本:includeFontPadding 现已默认关闭。
includeFontPadding=false
导致的剪裁问题已得到处理,高脚本不应发生剪裁。 (I31c84, b/171394808)
Bug 修复
- 如果已存在内容,
ComposeContentTestRule.setContent
现在将抛出IllegalStateException
。 (I888a5, b/199631334) - 修复了在 Android 上从剪贴板读取时由剪贴板内容引起的崩溃。 (I06020, b/197769306)
- 改进 RSB 滚动示例。 (I6a596)
外部贡献
- 更新至 Kotlinx coroutines 1.6.0 (I3366d)
版本 1.2.0-alpha04
2022 年 2 月 23 日
androidx.compose.ui:ui-*:1.2.0-alpha04
已发布。版本 1.2.0-alpha04 包含这些提交。
API 变更
添加了
ComposableTarget
、ComposableTargetMarker
和ComposableOpenTarget
,允许在编译时报告可组合函数在调用时针对的 applier 不是其设计用途的情况。在大多数情况下,注解可以由 compose 编译器插件推断,因此直接使用这些注解应该很少见。无法推断的情况包括创建和使用自定义 applier、抽象可组合函数(如接口方法)、可组合 lambda 的字段或全局变量(局部变量和参数被推断)、或者在使用
ComposeNode
或相关可组合函数时。对于自定义 applier,调用
ComposeNode
或ReusableComposeNode
的可组合函数需要为函数和任何可组合 lambda 参数类型添加ComposableTarget
注解。但是,建议创建带有ComposableTargetMarker
注解的注解,然后使用标记的注解而不是直接使用ComposableTarget
。带有ComposableTargetMarker
标记的可组合注解等同于一个ComposbleTarget
,其 applier 参数为属性类的完全限定名称。有关使用ComposableTargetMarker
的示例,请参阅anroidx.compose.ui.UiComposable
。 (I38f11)Font(resId, ...)
现在在稳定 API 上接受 loadingStrategy。 (Ief3d2)FontLoadingStrategy
现在是稳定 API。 (I1ee35, b/174162090)支持文本中的异步字体加载 (I77057, b/214587005)
添加了用于将自定义
Font.ResourceLoader
转换为FontFamily.Resolver
的桥接 API。 (Ia0060)
Bug 修复
- 提供的
FontFamily.Resolver
将传递给子组合,例如 Popup。 - 提供的
Font.ResourceLoader
将传递给子组合,例如 Popup。 (I48fa5)
版本 1.2.0-alpha03
2022 年 2 月 9 日
androidx.compose.ui:ui-*:1.2.0-alpha03
已发布。版本 1.2.0-alpha03 包含这些提交。
API 变更
TextInputSession
和TextInputService
中的notifyFocusedRect
方法现已弃用,并且不会被调用。请改用BringIntoViewRequester
。 (Ia4302, b/192043120, b/216842427, b/178211874)- 在
RenderNode
存根类中引入了destroyDisplayListData
方法 (I1e659, b/216660268) - 添加了一个新的 API,允许您预先测量预组合的
SubcomposeLayout
的子项。 (I857ea) 添加了
movableContentOf
,它将可组合 lambda 转换为一个 lambda,该 lambda 将其状态和相应的节点移动到它被调用的任何新位置。当之前的调用离开组合时,状态暂时保留;如果对 lambda 的新调用进入组合,则状态和关联的节点将移动到新调用的位置。如果没有添加新的调用,则状态将永久删除,并通知 remember 观察者。如果一个
movableContentOf
lambda 在同一个组合中被多次调用,则为每个调用创建新的状态和节点,并且随着调用离开组合和新的调用进入,状态会从第一次离开的调用移动到进入的调用,按其调用顺序。所有未被新调用声明的状态都将永久删除。 (Ib4850)FontFamilyResolver
现在通过LocalFontFamilyResolver.current
可用添加了
createFontFamilyResolver(context)
和createFontFamilyResolver(context, coroutineScope)
,用于在 Compose 用法之外创建新的 FontFamily 解析器。Paragraph 和 MultiParagraph 现在接受
FontFamily.Resolver
TextLayoutResult.layoutInput.fontFamilyResolver
现在包含用于此布局的解析器,已弃用TextLayoutResult.layoutInput.resourceLoader
,因为它不再使用。 (Id5a45, b/174162090)支持异步和可选字体加载,以及回退行为。此路径由 Text 和 TextField 使用,并通过 FontFamilyResolver 公开
支持通过
FontFamilyResolver.preload
预加载字体FontFamilyResolver.setAsyncLoadContext
允许设置用于加载异步字体的全局协程上下文。 (I87fe8, b/174162090)添加了
AndroidFont
,这是一个新的低级 API,用于在 Android 上提供新型字体资源描述符。例如,从应用特定的后端加载字体,选择性地在设备上查找预安装字体,或从当前 Font 工厂未提供的资源加载字体。扩展了
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)接受
maxSlotsToRetainForReuse
的SubcomposeLayoutState
构造函数现已弃用。取而代之的是一个新的构造函数,接受SubcomposeSlotReusePolicy
——一个允许更细粒度控制哪些插槽应保留以供将来重用的新接口。 (I52c4d)将
Color
中的 HSV 和 HSL 函数公开为非实验性 API。Oklab 颜色空间现在是公共 API。 (I08fb6, b/180731008)弃用了
AndroidComposeTestRule.AndroidComposeStatement
,它不应该在公共 API 中,并且无论如何都没有为您做任何事情。 (Ibc46b)内部生成的 kt 类重命名 (Ia0b9e, b/174162090)
移除了
FontLoadingStrategy.values
(I42a9d, b/174162090)全局字体加载器现在称为
FontFamilyResolver
。 (I4f773, b/174162090)桌面使用新的字体加载系统。 (I9ce5c, b/174162090)
FontFamily.Resolver.resolve
返回State<Any>
(I4406c, b/174162090)
Bug 修复
- 当软输入模式为
ADJUST_PAN
时,TextFields 在获得焦点并显示键盘时将保持在键盘上方。 (I8eaeb, b/190539358, b/192043120) - 桌面使用组合局部变量来处理
FontFamily.Resolver
- 桌面
FontLoader
已弃用 - 桌面上的新
createFontFamilyResolver
工厂 (I6bbbb, b/174162090) - 当焦点在文本字段之间切换时,软键盘输入类型不再闪烁。 (I1bf50, b/187746439)
版本 1.2.0-alpha02
2022 年 1 月 26 日
androidx.compose.ui:ui-*:1.2.0-alpha02
已发布。版本 1.2.0-alpha02 包含这些提交。
API 变更
- 添加了
Modifier.onRotaryScrollEvent()
和Modifier.onPreRotaryScrollEvent()
,用于带有旋转侧边按钮的可穿戴设备 (I18bf5, b/210748686) - 添加实验性
View.createLifecycleAwareRecomposer
扩展 (I0cde6)
外部贡献
PointerEvent.scrollDelta.y
现在在 Android 上是反转的(如果我们向右倾斜鼠标滚轮,它现在返回 1 而不是 -1) (Ia9811)
版本 1.2.0-alpha01
2022 年 1 月 12 日
androidx.compose.ui:ui-*:1.2.0-alpha01
已发布。版本 1.2.0-alpha01 包含这些提交。
API 变更
- 弃用了
FontFamily.canLoadSynchronously
。此属性没有语义意义。 (Ica5ef) - 为
CompositionData
添加了 identity 字段,用于在布局检查器中生成不变的 ID。 (Ic116e) - 将 Wear OS 设备 ID 添加到预览设备列表 (I93232)
依赖项更新
- 现在依赖于 Kotlin
1.6.10
。
版本 1.1
版本 1.1.1
2022 年 2 月 23 日
androidx.compose.ui:ui-*: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.ui:ui-*:1.1.0
已发布。版本 1.1.0 包含这些提交。
自 1.0.0 以来的重要更改
- 稳定支持 Android 12 Overscroll 效果
- 改进了触摸目标尺寸
- 稳定支持 Navigation Rail
- 将许多以前的实验性 API 升级为稳定版
- 支持更高版本的 Kotlin
版本 1.1.0-rc03
2022 年 1 月 26 日
androidx.compose.ui:ui-*:1.1.0-rc03
已发布。版本 1.1.0-rc03 包含这些提交。
Bug 修复
- 更新以支持 Compose Material 1.1.0-rc03
版本 1.1.0-rc01
2021 年 12 月 15 日
androidx.compose.ui:ui-*:1.1.0-rc01
已发布。版本 1.1.0-rc01 包含这些提交。
Bug 修复
- 修复了导致辅助功能滚动操作缺失的错误 (I7cbfb)
SemanticsNodeInteraction.captureToImage()
现在也可以在HardwareRenderer.isDrawingEnabled()
为false
时工作,通过在调用期间启用它来实现 (Idf3d0)
版本 1.1.0-beta04
2021 年 12 月 1 日
androidx.compose.ui:ui-*:1.1.0-beta04
已发布。版本 1.1.0-beta04 包含这些提交。
新功能
- 更新以兼容 Kotlin
1.6.0
API 变更
- 清理了
androidx.core.view
中的可空性 (I7078a, b/204917439) - 添加了实验性 API,允许用户完全消耗 PointerInputchange 或检查它是否已被消耗。 (I2e59d)
- 增加了对 UI 层鼠标滚轮事件的支持。 (Ia14eb, b/198214718)
- 添加了接受键以进行相等比较和符合跳过优化的实验性
Modifier.composed
重载。 (Ice799, b/205851704) ComposeNotIdleException
现在继承自Exception
,而不是直接继承自Throwable
。请注意,这意味着以前捕获Exception
的 catch 子句现在可能会捕获ComposeNotIdleException
,而以前不会。 (I9c217)
Bug 修复
- 修复了 IME 可见性更改时文本句柄不移动的问题。 (I25f2e)
版本 1.1.0-beta03
2021 年 11 月 17 日
androidx.compose.ui:ui-*:1.1.0-beta03
已发布。版本 1.1.0-beta03 包含这些提交。
API 变更
- 添加了新的修饰符 Modifier.onPlaced,允许观察放置变化。因此,可以根据观察到的放置变化对子修饰符的偏移进行额外更改。 (I558fd)
- 移除了
InjectionScope.flush()
和InjectionScope.dispose()
。所有事件的刷新和作用域的处置现在发生在像以前一样调用的 perform*Input() 方法的末尾。 (I2bed8) - 移除了
MultiModalInjectionScope.Touch
和MultiModalInjectionScope.Mouse
。为了注入多模式手势的触摸和鼠标事件,您现在可以使用MultiModalInjectionScope.touch()
和MultiModalInjectionScope.mouse()
,它们都接受一个具有该模式接收器作用域的 lambda。 (Idde18)
Bug 修复
TouchInjectionScope.swipeWithVelocity
中durationMillis
的默认值现在根据可行的滑动进行计算。 (I19deb)
版本 1.1.0-beta02
2021 年 11 月 3 日
androidx.compose.ui:ui-*:1.1.0-beta02
已发布。版本 1.1.0-beta02 包含这些提交。
API 变更
- 添加了实验性 BringIntoView API,允许您向父级发送请求,以便它们滚动以将项目带入视图 (Ib918d, b/195353459)
- 新的动画 API 用于支持工具。具体来说,它们允许工具检查 Transitions 中的动画及其配置。 (I4116e)
外部贡献
- 添加了 Modifier.pointerHoverIcon (I95f01)
版本 1.1.0-beta01
2021 年 10 月 27 日
androidx.compose.ui:ui-*:1.1.0-beta01
已发布。版本 1.1.0-beta01 包含这些提交。
API 变更
- 添加了实验性
BringIntoView
API,允许您向父级发送请求,以便它们滚动以将项目带入视图 (Ib918d, b/195353459) - 新的动画 API 用于支持工具。具体来说,它们允许工具检查 Transitions 中的动画及其配置。 (I4116e)
版本 1.1.0-alpha06
2021 年 10 月 13 日
androidx.compose.ui:ui-*:1.1.0-alpha06
已发布。版本 1.1.0-alpha06 包含这些提交。
API 变更
- 从
ViewRootForInspector
和LayoutInfo.ownerViewId
中移除了ExperimentalComposeUiApi
(I5c2e3) - 添加了 Layout 的无子项重载,效率更高 (Ib0d9a)
- 从需要在跨模块调用的 Composer 方法中删除了
InternalCompilerApi
(I1aa0b) SemanticsNodeInteraction.performSemanticsAction
现在返回调用该函数的SemanticsNodeInteraction
。 (I9e5db)- 添加了 LocalInputModeManager CompositionLocal 以检测 TouchMode/NonTouchMode。 (I6a83c, b/175899786)
- 向
LayoutInfo
添加了viewConfiguration: ViewConfiguration
,以允许消费者获取长按超时等内容的正确值。 (I76ca6)- 向
InjectionScope
添加了viewConfiguration: ViewConfiguration
,以允许测试根据长按超时或触摸松弛等调整输入注入。 - 更改了触摸和鼠标输入的默认长按和双击持续时间,使其基于
InjectionScope.viewConfiguration
中的值。
- 向
- 基于 ExposedDropdownMenuBox 与 TextField 和 DropdownMenu 内部的 ExposedDropdownMenu 实现 (If60b2)
- dismissOnOutsideClick 已添加到 PopupProperties 中,替换了已弃用的 dismissOnClickOutside。新属性接收点击位置和锚点边界,对是否应调用 onDismissRequest 提供了更精细的控制。例如,这对于防止锚点触摸时解除锚点很有用。
- updateAndroidWindowManagerFlags 已添加到 PopupProperties,提供了对弹出窗口传递给 Android WindowManager 的标志进行低级控制。lambda 的参数将是根据 PopupProperties 值计算出的 WindowManager 标志,例如:可聚焦。lambda 的结果将是传递给 Android WindowManager 的最终标志。默认情况下,updateAndroidWindowManagerFlags 将保持从参数计算出的标志不变。此 API 应谨慎使用,仅在弹出窗口具有非常特定的行为要求的情况下使用。 (I6e9f9)
Recomposer.state
已弃用,并替换为Recomposer.currentState
以将其类型更改为 StateFlow (Ic2ab3, b/197773820)- 向
InjectionScope
添加了flush()
和dispose()
。当您想要立即刷新所有排队的事件并希望处置作用域时,请分别使用它们。 (Ifb73a) - 添加了
performScrollToNode(matcher: SemanticsMatcher)
,它将可滚动容器滚动到与给定匹配器匹配的内容。 (Ic1cb8) InjectionScope
现在实现了Density
,允许您在performTouchInput
及其相关函数中轻松地在 px 和 dp 之间进行转换。 (I8fe1f)
Bug 修复
- AndroidView 现在通过 ViewTreeLifecycleOwner 和 ViewTreeSavedStateRegistryOwner 将 LocalLifecycleOwner 和 LocalSavedStateRegistryOwner 传播到其视图。 (I38f96, b/179708470)
- 修复了 WearOS SwipeToDismissBox 有时无法处理滑动手势的问题。 (I9387e)
- 注入输入事件之间的默认时间已从 10 毫秒更改为 16 毫秒。这可能会改变执行输入手势(如特定滑动)的测试结果。 (I829fd)
版本 1.1.0-alpha05
2021 年 9 月 29 日
androidx.compose.ui:ui-*:1.1.0-alpha05
已发布。版本 1.1.0-alpha05 包含这些提交。
API 变更
- 增加了对修饰符间通信的支持 (Id5467, b/198826874)
- 为 PointerEventChange 添加了实验性历史指针。 (Ic1fd8, b/197553056, b/199921305)
- 向
LayoutInfo
添加了density: Density
和layoutDirection: LayoutDirection
。这使得LayoutInfo
的消费者能够正确解释LayoutInfo
中公开的尺寸和位置。 (I002f1) - 添加了对注入鼠标事件的实验性支持。使用
performMouseInput
开始发送鼠标事件,或在多模态输入手势期间使用performMultiModalInput
通过MultiModalInjectionScope
的Mouse
属性发送鼠标事件。有关可用 API 的文档,请参阅MouseInjectionScope
。 (Iaa4a8, b/190493367)
Bug 修复
- 修复了滚动(惰性和非惰性)的无障碍支持,以实现滚动功能 (I6cdb0)
- 改进了
TouchInjectionScope.swipeWithVelocity
。它现在接受更广泛的输入变量范围,如果无法创建滑动,它将建议更改输入 (I40fbe, b/182477143)
版本 1.1.0-alpha04
2021 年 9 月 15 日
androidx.compose.ui:ui-*:1.1.0-alpha04
已发布。版本 1.1.0-alpha04 包含这些提交。
API 变更
PointerEvent
现在具有PointerEventType
以支持悬停事件。 (I091fa)- 允许子级在其父级指针输入边界之外接受指针输入。父级可以使用属性 PointerInputScope.alwaysInterceptChildEvents 拦截这些调用 (I9eae3, b/192479655)
- 弃用了
performGesture
和GestureScope
,它们已被performTouchInput
和TouchInjectionScope
替换。 (Ia5f3f, b/190493367) - 向
SemanticsNode
添加了touchBoundsInRoot
,其中包含最小触摸目标大小,以便开发者可以确保触摸目标符合辅助功能最低要求。 (I2e14b, b/197751214) - 重新实现了可检查性 (I927bc, b/191017532)
- 更改了 inspectable 的参数名称以匹配 composed (I3a482, b/191017532)
引入了
performTouchInput
和TouchInjectionScope
作为performTouchInput
和TouchInjectionScope
的替代方案,为其他模式(如鼠标)铺平了道路。TouchInjectionScope
具有与GestureScope
相同的方法,除了movePointerTo
和movePointerBy
,它们已重命名为updatePointerTo
和updatePointerBy
。所有其他方法都相同。TouchInjectionScope
的行为与GestureScope
几乎相同,但有两个小细节- 当在未发送移动事件的情况下移动指针(换句话说,已使用
updatePointerTo()
,但未使用move()
,然后调用down()
)时发送 down 事件时,以前的实现会在发送 down 事件之前推进事件时间并发送移动事件。新的实现仍然发送移动事件,但在此特定场景中不推进事件时间。 - 当在指针移动但未发送移动事件的情况下发送 up 事件(与上述类似)时,以前的实现会在发送 up 事件之前推进事件时间并发送移动事件。新的实现既不执行:指针的新位置将仅通过 up 事件反映。
最后,
TouchInjectionScope
引入了一个新方法currentPosition(pointerId: Int)
,用于获取给定指针的当前位置。 (If1191, b/190493367)- 当在未发送移动事件的情况下移动指针(换句话说,已使用
Bug 修复
- 允许剪裁将触摸目标边界扩展到剪裁区域之外,以实现最小触摸目标目的。 (I43e10, b/171509422)
- 已在 Android 12 设备上添加了拉伸过卷轴支持。 (Iccf3c, b/171682480)
版本 1.1.0-alpha03
2021 年 9 月 1 日
androidx.compose.ui:ui-*:1.1.0-alpha03
已发布。版本 1.1.0-alpha03 包含这些提交。
新功能
- 更新了 Compose
1.1.0-alpha03
以依赖 Kotlin1.5.30
。 (I74545)
API 变更
- 添加了
Modifier.inspectable
用于包装其他修饰符。 (I1909b, b/191017532) - 添加了
BlurredEdgeTreatment
API,以简化模糊用例,使其更常用于剪辑标志和 TileModes 的组合。大多数用例涉及:让模糊内容呈现在原始内容边界之外,并用透明黑色模糊这些边界之外的区域;或将内容剪裁到内容边界,对超出内容边界的模糊内核采样最近的边缘。 (I6b4b7, b/166927547) - 在 Compose 桌面版中添加了 RenderEffect 支持。引入了 OffsetEffect 和模糊修饰符,作为将模糊视觉效果引入组合层次结构一部分的简单方法。 (I0f6aa, b/166927547)
- 引入了 RenderEffect API,可在
Modifier.graphicsLayer
上可选配置,以更改图层本身的内容。这可用于模糊可组合对象和组合层次结构中子可组合对象的内容。 (I47c4d, b/166927547) - AwaitPointerEventScope 现在拥有 withTimeout() 和 withTimeoutOrNull() (I507f0, b/179239764, b/182397793)
- 在 ViewConfiguration 中添加了最小触摸目标大小,用于语义和指针输入,以确保可访问性。 (Ie861c)
- 添加 TileMode.Decal 支持,这在定义基于模糊的 RenderEffects 的边缘行为时非常有用。 (I7e8ed, b/166927547)
performScrollToIndex
、performScrollToKey
、hasScrollToIndexAction
和hasScrollToKeyAction
现在是稳定 API (I142ae, b/178483889)- 添加了获取剪裁边界的测试方法。 (I6b28e)
Bug 修复
- 移除了 BlurredEdgeTreatment 中的 isBounded 方法,转而明确检查 shape 参数是否为 null。 (I85d68)
版本 1.1.0-alpha02
2021 年 8 月 18 日
androidx.compose.ui:ui-*:1.1.0-alpha02
已发布。版本 1.1.0-alpha02 包含这些提交。
API 变更
- PointerEvent 现在支持读取鼠标按钮状态和键盘修饰键状态。 (I6310c, b/180075467)
- 注入的手势现在使用 MainTestClock 的时间作为时间的真实来源。在
performGesture
中注入事件的当前时间将被初始化为 MainTestClock 的当前时间。 (Ifb364, b/192064452) - 添加了
DpRect(DpOffset, DpSize)
构造函数 (I2cf16, b/194219828) - 添加了 DpSize 类 (I7abb1, b/194219828)
Bug 修复
- 更新了矢量图形 XML 解析,以支持 ColorStateLists 作为 VectorDrawables 上的根颜色着色属性。 (I86915, b/195668138)
版本 1.1.0-alpha01
2021 年 8 月 4 日
androidx.compose.ui:ui-*:1.1.0-alpha01
已发布。版本 1.1.0-alpha01 包含这些提交。
API 变更
RelocationRequester.bringIntoView
现在接受一个矩形作为参数,这使我们能够将可组合对象的一部分带入视图中 (Ice2c5, b/194330245)AnimatedImageVector
和相关 API 现在位于新的androidx.compose.animation:animation-graphics
模块中。 (I60873)- 添加了处理重定位请求的实验性修饰符。 (I65a97, b/178211874)
引入了 BrushPainter API,以支持在 Painter 中绘制任意 Brush,类似于 ColorPainter
更新了 Brush API,使其具有内在尺寸参数,该参数在 BrushPainter 中查询 (Ia2752, b/189466433)
更新了 DrawScope#drawImage 方法,该方法会消耗源和目标矩形以消耗可选的 FilterQuality 参数。这对于像素艺术很有用,像素艺术在放大以用于基于像素的艺术时,旨在进行像素化。更新了 BitmapPainter + Image 可组合对象,以消耗可选的 FilterQuality 参数 (Ie4fb0, b/180311607)
添加了
GestureScope.advanceEventTime
方法,以提供对手势中事件时序的更多控制 (Ibf3e2)
Bug 修复
- 为了更好地支持绘图修饰符的链式调用,请确保 Modifier.paint 实现调用 drawsContent。以前,Modifier.paint 被认为是 Modifier 链中的叶节点,但是,这样做会阻止它在可组合容器(例如 box)上进行配置或在其顶部添加额外的装饰,例如
Modifier.paint().border()
。通过让 Modifier.paint 在绘制给定画家的内容后调用 drawContent,我们可以在行为上与修饰符模式保持更好的一致性。 (Ibb2a7, b/178201337, b/186213275) - 对话框现在遵循平台尺寸行为。将
usePlatformDefaultWidth
设置为 false 可覆盖此行为。 (Iffaed, b/192682388) - 将
InfiniteAnimationPolicy
移至 :compose:ui (I5eb09, b/160602714) - 通过语义操作对懒加载列表和常规滚动组件进行滚动现在有了动画效果 (Id9066, b/190742024)
版本 1.0
版本 1.0.5
2021 年 11 月 3 日
androidx.compose.ui:ui-*:1.0.5
已发布。版本 1.0.5 包含这些提交。
Bug 修复
- 修复了跟踪 derivedStateOf 实例时发生的崩溃。 (aosp/1792247)
版本 1.0.4
2021 年 10 月 13 日
androidx.compose.ui:ui-*:1.0.4
已发布。版本 1.0.4 包含这些提交。
依赖项更新
- 更新至 Kotlin
1.5.31
版本 1.0.3
2021 年 9 月 29 日
androidx.compose.ui:ui-*:1.0.3
已发布。版本 1.0.3 包含这些提交。
依赖项更新
- 更新至 Kotlin
1.5.30
版本 1.0.2
2021 年 9 月 1 日
androidx.compose.ui:ui-*: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.ui:ui-*:1.0.1
已发布。版本 1.0.1 包含这些提交。
依赖项更新
- 更新至 Kotlin
1.5.21
。
版本 1.0.0
2021 年 7 月 28 日
androidx.compose.ui:ui-*:1.0.0
已发布。版本 1.0.0 包含这些提交。
1.0.0 的主要功能
这是 Compose 的第一个稳定版本。请参阅官方的 Compose 发布博客了解更多详情!
已知问题
如果您正在使用 Android Studio Bumblebee Canary 4 或 AGP
7.1.0-alpha04
/7.1.0-alpha05
,您可能会遇到以下崩溃java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
要解决此问题,请暂时将
build.gradle
文件中的 minSdkVersion 提高到 24+。此问题将在下一版本 Android Studio Bumblebee 和 AGP7.1
中修复。 (b/194289155)
版本 1.0.0-rc02
2021 年 7 月 14 日
androidx.compose.ui:ui-*:1.0.0-rc02
已发布。版本 1.0.0-rc02 包含这些提交。
Bug 修复
- 对话框现在遵循平台尺寸行为。将
usePlatformDefaultWidth
设置为 false 可覆盖此行为。 (Iffaed, b/192682388)
版本 1.0.0-rc01
2021 年 7 月 1 日
androidx.compose.ui:ui-*:1.0.0-rc01
已发布。版本 1.0.0-rc01 包含这些提交。
新功能
- 将 ui-tooling 模块拆分为
ui-tooling
和ui-tooling-preview
(Iefa28, b/190649014)
API 变更
- 删除了已弃用的实验性
FocusManager#moveFocusIn
和FocusManager#moveFocusOut
(I227d7, b/170154986, b/186567354, b/168510304) - Canvas 现在支持 contentDescription 参数以实现辅助功能。 (Ib547c)
PopupProperties
中的useDefaultMaxWidth
已重命名为usePlatformDefaultWidth
。 (I05710)- 对话框现在可以占用整个屏幕宽度。 (I83929, b/190810877)
- 添加了对 HSV 和 HSL 颜色表示的实验性支持。 (Id7cf8, b/180731008)
行为变更
- Compose
@Preview
现在提供了一个LocalActivityResultRegistryOwner
,允许您预览使用依赖该所有者的 API(如rememberLauncherForActivityResult()
)的可组合项。 (Ib13d1, b/185693006) - Compose
@Preview
现在提供了一个LocalOnBackPressedDispatcherOwner
,允许您预览使用依赖该所有者的 API(如BackHandler
)的可组合项。 (Ia1c05, b/185693006)
Bug 修复
- 将
InfiniteAnimationPolicy
移至androidx.compose.ui:ui
(I5eb09, b/160602714) - AnimatedImageVector 暂时被移除,以便更改模块结构。 (I41906, b/160602714)
版本 1.0.0-beta09
2021 年 6 月 16 日
androidx.compose.ui:ui-*:1.0.0-beta09
已发布。版本 1.0.0-beta09 包含这些提交。
API 变更
- 将枚举类型 Role 和 LiveRegionMode 更改为带私有构造函数的内联类 (Id1890)
- KeyboardCapitalization 已转换为内联类。 (Id5a1c)
- 将 HapticFeedbackType 更改为内联类。 (I255ec)
- Modifier.pointerInteropFilter 为 @ExperimentalComposeUiApi。 (Iede6c)
- TextAlign、FontSynthesis 和 TextDirection 现在是内联类。 (I212fe)
- TextOverflow 已更改为内联类。 (I433af)
- FontStyle 现在是一个内联类。 (I9e48b)
Bug 修复
- Key constants 目前为 @ExperimentalComposeUiApi。在使用前,消费代码可以声明私有常量。 (Ia5d48)
- Compose 测试现在可以在 Robolectric 上运行。目前已识别出以下限制:
- 没有原生位图,所以
ImageBitmap()
会导致 NullPointerException。 - 没有绘图功能,所以
captureToImage()
将无限期等待下一次绘图过程(即它会死锁)。 - 没有加载字体,所以任何文本的测量都会不准确。所有字符的高度固定约为 20px,宽度为 1px。
ComposeTestRule.waitUntil {}
在等待时不会运行主线程,使其效果与ComposeTestRule.mainClock.advanceTimeUntil {}
相同。预计未来还会识别出更多限制。 (I284fa)
- 没有原生位图,所以
已添加配置文件规则
此版本向以下 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
中的一个或多个,用于指示该方法是否应被标记为“热”、“启动”或“启动后”。<CLASS_DESCRIPTOR>
是目标方法所属类的描述符。例如,类androidx.compose.runtime.SlotTable
的描述符将是Landroidx/compose/runtime/SlotTable;
。<METHOD_SIGNATURE>
是方法的签名,包括方法的名称、参数类型和返回类型。例如,LayoutNode
上的方法fun isPlaced(): Boolean
的签名为isPlaced()Z
。这些模式可以包含通配符(
**
、*
和?
),以便一个规则可以涵盖多个方法或类。
这些规则有什么作用?
带有标志
H
的方法表示该方法是一个“热”方法,应提前编译。带有标志
S
的方法表示它是一个在启动时调用的方法,应提前编译,以避免在启动时编译和解释方法的成本。带有标志
P
的方法表示它是一个在启动后调用的方法。文件中存在的类表示它在启动期间使用,应在堆中预分配,以避免类加载的成本。
这是如何工作的?
- 库可以定义这些规则,这些规则将被打包在 AAR artifact 中。当包含这些 artifact 的应用程序构建时,这些规则将合并在一起,合并后的规则用于构建特定于应用程序的紧凑二进制 ART 配置文件。然后,ART 可以在应用程序安装到设备上时利用此配置文件,以便预编译应用程序的特定子集,从而提高应用程序的性能,尤其是首次运行时的性能。请注意,这不会对可调试应用程序产生任何影响。
版本 1.0.0-beta08
2021 年 6 月 2 日
androidx.compose.ui:ui-*:1.0.0-beta08
已发布。 版本 1.0.0-beta08 包含这些提交。
API 变更
NestedScrollSource
枚举已被内联类取代。 (Ie321b, b/187055290)FocusManager.clearFocus(forcedClear = true)
已重命名为FocusManager.clearFocus(force = true)
(Ia0c41)- 将枚举用法重构为内联类,以避免在添加新的枚举值时出现详尽的 when 语句问题。 (I2b5eb)
- 从
PopupProperties
中移除@ExperimentalComposeUiApi
。 (I01fa6) PointerType
已从枚举更改为内联类 (If5058)- ContentDescription 和 Text 语义属性不再是单个值,而是列表。这使得它们可以按原样合并,而不是进行串联。还提供了更好的测试 API 以利用这些更改 (Ica6bf, b/184825850)
Modifier.focusModifier()
已弃用并替换为Modifier.focusTarget()
(I6c860)Modifier.onSizeChanged()
和Modifier.onGloballyPositioned()
不再是内联函数 (I727f6, b/186109675)KeyboardType
枚举已被内联类取代。 (I73045, b/187055290)- 将
FocusState
枚举替换为FocusState
接口 (Iccc1a, b/187055290) - ImeAction 枚举已被内联类取代。 (I18be5, b/187055290)
PlaceholderVerticalAlign
已转换为内联类。 (If6290)- TextUnitType 现在是一个内联类。 (I4cba9)
AnnotatedString.withAnnotation
函数现在是 ExperimentalTextApi 而不是 ExperimentalComposeApi。 (I0cd0a)- 带 TextUnitType 的 TextUnit 构造函数现在是 ExperimentalTextApi 而不是 ExperimentalComposeApi。
Bug 修复
- 修复了 beta07 中引入的错误,即 LazyColumn/Row 项目在滚动后部分显示不正确 (I8c9ac, b/188566058)
- 现在
detectDragGesures
、detectVerticalGestures
和detectHorizontalGestures
将自动消耗位置变化,无需在 onDrag 回调中调用 change.consumePositionChange (I42fc4, b/185096350, b/187320697) - 修复了提供对齐线的 LayoutModifiers。修复了当子级的对齐线发生变化时,父级未重新测量的错误。 (I4401f, b/174315652)
Modifier.onGloballyPositioned()
已更改为报告此修饰符在修饰符链中的坐标,而不是应用所有修饰符后的布局坐标。这意味着现在修饰符的顺序会影响报告的坐标。 (Ieb67d, b/177926591)
版本 1.0.0-beta07
2021 年 5 月 18 日
androidx.compose.ui:ui-*:1.0.0-beta07
已发布。 版本 1.0.0-beta07 包含这些提交。
API 变更
- 为检查器添加了
ViewRootForInspector
接口 (Ib70df) SubcomposeLayoutState
现在支持设置可重用槽的数量。布局将保持最多此数量的槽处于活动状态,而不是销毁它们,以便在下次需要新槽时重用该槽 (Ieb981)- KeyEventType 枚举已被内联类取代。 (Id670a, b/187055290)
FocusDirection
枚举已被内联类取代。 (Ib6d03, b/187055290, b/184086802)- 引入了提升 SubcomposeLayout 状态的能力,允许您将内容预合成到所需的 slotId 中,这样可以加快下一次测量过程,因为一旦我们尝试使用给定的 slotId 进行子合成,下一次就不再需要合成。 (I42580, b/184940225)
- 添加了剪辑选择句柄 (Iff80d, b/183408447)
- 移除了与 LayoutInspector 支持相关的未使用的 API。 (I2ac78)
Bug 修复
- LazyColumn/Row 现在将保持最多 2 个先前可见的项目处于活动状态(不销毁),即使它们已经滚出。这允许组件在我们需要组合新项目时重用活动的子组合,从而提高滚动性能。 (Ie5555)
AnnotatedString
上的TextGeomerticTransform
和TextDecoration
将按给定应用。 (I61900, b/184760917)
版本 1.0.0-beta06
2021 年 5 月 5 日
androidx.compose.ui:ui-*:1.0.0-beta06
已发布。 版本 1.0.0-beta06 包含这些提交。
API 变更
- 解决与导航手势的冲突 (I1145e)
@ComposeCompilerApi
不再@RequiresOptIn
(Iab690)- 添加了 CollectionInfo 和 CollectionItemInfo 辅助功能 API,允许标记集合及其项目以供辅助功能服务使用 (Id54ef, b/180479017)
- 添加了
SemanticsActions.ScrollToIndex
,用于将带有索引项目的列表滚动到具有特定索引的项目,以及SemanticsProperties.IndexForKey
,用于获取带有键项目的列表中项目的索引。这两个操作都由 LazyList 实现。- 添加了
SemanticsNodeInteraction.performScrollToIndex
,用于将列表滚动到给定索引,以及SemanticsNodeInteraction.performScrollToKey
,用于将列表滚动到具有给定键的项目。 (I4fe63, b/178483889, b/161584524)
- 添加了
- 将 ownerViewId 添加到 GraphicLayerInfo (I19f62)
- 添加了 Font() 重载以从 assets、File 和 FileDescriptor 加载字体 (I5d382)
- 添加了辅助功能 API
error
,允许标记包含无效输入的节点 (I12997, b/180584804, b/182142737) - 添加了
Font()
重载以从 assets、File 和 FileDescriptor 加载字体 (I43007) - AnnotatedString 支持保存到
TextFieldValue.Saver
。向AnnotatedString.Builder
添加了addTtsAnnotation
和 withAnnotation 实用函数 (I8cbdc, b/178446304) - 添加了 TextUnit 构造函数
TextUnit(value: Float, type: TextUnitType)
(I7ecce, b/178446304)
版本 1.0.0-beta05
2021 年 4 月 21 日
androidx.compose.ui:ui-*:1.0.0-beta05
已发布。 版本 1.0.0-beta05 包含这些提交。
API 变更
- 添加了实验性的
FocusManager.moveFocus(In)
和FocusManager.moveFocus(Out)
(Ic5534, b/183746743) - 添加了实验性的
performTextInputSelection
API (I2dcbb, b/178510628) InputEventCallback
接口已弃用。该接口无法在任何公共 API 中使用;代码中也没有使用它。 (I34a02, b/184003208)- 弃用了
TextLayoutResult/createTextLayoutResult
函数。它是一个未使用的公共函数,为了测试而添加。该函数对 Compose 文本 API 没有可用的功能。该函数现已弃用,稍后将被移除。 (I80413)
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.ui:ui-*:1.0.0-beta04
已发布。 版本 1.0.0-beta04 包含这些提交。
API 变更
- 将
SoftwareKeyboardController
上的hideSoftwareKeyboard
和showSoftwareKeyboard
分别重命名为hide()
和show()
。- 为 LocalSoftwareKeyboardController 提供完整的 CompositionLocal 接口,允许对其进行设置(在测试中特别有用) (I579a6)
- 添加了 LiveRegion 辅助功能 API。如果节点被标记为实时区域,辅助功能服务将自动通知用户其更改 (Idcf6f, b/172590946)
- 引入了 TextOverflow.Visible。 (Ic8f89)
Bug 修复
- 修复了快速滑动后,
LazyColumn
/LazyRow
边缘项目定位不正确的问题 (Ie4d13, b/183877420) - 当
AndroidViewBinding
从 compose 层次结构中移除时,AndroidViewBinding
现在可以正确移除通过FragmentContainerView
膨胀的 fragment。 (Ib0248, b/179915946) - 当您的
ComposeView
位于Fragment
中时,AndroidViewBinding
现在可以正确嵌套通过FragmentContainerView
膨胀的 fragment,从而修复了保存和恢复这些 fragment 状态的问题。 (I70eb0, b/179915946) - Compose ViewBinding 现在依赖于 Fragment
1.3.2
,并且在配置更改后能够始终显示通过FragmentContainerView
膨胀的 fragment。 (I0743d, b/179915946)
版本 1.0.0-beta03
2021 年 3 月 24 日
androidx.compose.ui:ui-*:1.0.0-beta03
已发布。 版本 1.0.0-beta03 包含这些提交。
API 变更
- ComposeView 的 ViewTree 依赖项延迟检查 (I8dbbf, b/182466548)
- 向
GestureScope
中的swipeUp
/swipeDown
/swipeLeft
/swipeRight
函数添加了可选的startX
/endX
和startY
/endY
参数。 (I49e2d, b/182063305)
版本 1.0.0-beta02
2021 年 3 月 10 日
androidx.compose.ui:ui-*:1.0.0-beta02
已发布。 版本 1.0.0-beta02 包含这些提交。
API 变更
- 添加了新的
LocalSoftwareKeyboardController
组合本地 API,以取代 TextField 上之前的 SoftwareKeyboardController 接口。 (I5951e, b/168778053) - 添加了新的
LocalSoftwareKeyboardController
组合本地 API,以取代 TextField 上之前的 SoftwareKeyboardController 接口。 (I84472, b/168778053) - 移除了以下
SemanticsMatcher
hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(If16bd)
- 将以下
SemanticsMatcher
标记为 @ExperimentalTestApihasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(Ia600c)
- 添加了以下
SemanticsMatcher
hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(I2f502)
Bug 修复
- 强制实验性 API 的公共使用限制 (I6aa29, b/174531520)
androidx.compose.ui:ui
不再依赖于 AppCompat 或 Fragment。如果您在应用程序中使用 ComposeView,并且使用 Fragment 和/或 AppCompat,请确保您使用的是 AppCompat 1.3+ / Fragment 1.3+ - 这些版本是正确设置 ComposeView 所需的生命周期和保存状态所有者所需的。 (I1d6fa, b/161814404)- 修复了在 navigation-compose 目标中使用的
rememberSaveable { mutableStateOf(0) }
损坏问题。 (I1312b, b/180042685, b/180701630) - 添加了新的
LocalSoftwareKeyboardController
组合本地 API,以取代 TextField 上之前的 SoftwareKeyboardController 接口。 (I658b6, b/168778053) - 修复了
ComposeRootRegistry
的tearDownRegistry()
中罕见的 NoSuchElementException (Iddce1)
版本 1.0.0-beta01
2021 年 2 月 24 日
androidx.compose.ui:ui-*:1.0.0-beta01
已发布。 版本 1.0.0-beta01 包含这些提交。
这是 Compose 1.0.0 Beta 的首次发布。
API 变更
- 已将 onStart 回调添加到
detectDragGestures
(I67269, b/179995594) - 调整为 intrinsic 的修饰符不再是实验性的。 (I15744)
- MeasureBlocks 重命名为 MeasurePolicy,并成为一个 fun 接口。Layout 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)
- 在 CompositionLocals 中添加 AccessibilityMananger 接口和 LocalAccessibilityMananger (I53520)
- 删除了已弃用的 LayoutCoordinates 方法,使用函数代替 positionInParent 和 boundsInParent 的属性 (I580ed, b/169874631, b/175142755)
- 类型别名被底层类型替换
ColorStop
现在是Pair<Float, Color>
SpanStyleRange
现在是AnnotatedString.Range
ParagraphStyleRange
现在是AnnotatedString.Range<ParagraphStyle>
StringAnnotation
现在是AnnotatedString.Range<String>
- (I8dd1a)
- 为 CoreTextField 等低级文本组件的输入会话创建了新的 TextInputSession。 (I8817f, b/177662148)
- Placeable 现在公开了 measuredSize,表示子布局实际测量到的尺寸。此尺寸可能不符合测量约束。 (Ib2729, b/172560206, b/172338608)
- 添加了 selectionGroup 修饰符,允许标记 Tab 或 RadioButton 的集合以用于辅助功能目的 (Ie5c29)
compositionLocalOf
和staticCompositionLocalOf
的defaultFactory
现在是必需的,而不是可选的。此更改消除了非空类型在未提供默认工厂时可能出现的类型错误。以前,这会为非空类型提供空引用。
对于可空类型,请考虑提供
{ null }
作为默认工厂。我们不建议使用非空类型的本地变量,除非可以提供合理的默认值。如果不存在合理的默认值,
defaultFactory
lambda 应抛出异常。然而,抛出异常意味着本地变量的消费者将对其提供有隐式依赖,这不会由类型系统强制执行。 (Ifbd2a)移除了 ui 模块中已弃用的方法 (I646f6)
尺寸修饰符已重命名。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。 (I5b414)
Modifier.tapGestureFilter
已移除。请改用Modifier.pointerInput { detectTapGestures(...) }
。 (I266ed, b/175294473)部分消耗已从指针输入系统中移除。协调部分消耗的推荐方法是 Modifier.nestedScroll。 (Ie9c9b)
Orientation 已移至 foundation 包。VelocirtTracker 从 ui.gesture 移至 ui.input.pointer。 (Iff4a8, b/175294473)
imageResource 和 vectorResource 现在分别是 ImageBitmap 和 ImageVector 伴生对象的扩展函数。
load{Image,Vector,Font}Resource
函数已删除。 (I89130)AnimationClockObservable 及其子类已移除。AnimatedFloat 已移除。 (Icde52, b/177457083)
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)
ComponentActivity.setContent()
已从 compose:ui 中移除。请使用androidx.activity:activity-compose:1.3.0-alpha01
中的。viewModel()
和LocalViewModelStoreOwner
已从 compose:ui 中移除。请使用androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
中的。 (I6f36b)Modifier.scrollable 已重做。现在它使用 Scrollable 接口而不是 ScrollableController 类 (I4f5a5, b/174485541, b/175294473)
PointerInputModifier 的 CustomEvens 支持已移除 (I02707, b/175294473)
SnapshotStateObserver 不再是实验性的 (Id2e6a)
删除了一些先前弃用的 API (Ice5da, b/178633932)
longPressGestureFilter 和 doubleClickGestureFilter 已移除。请使用 Modifier.pointerInput 和辅助函数,例如 detectTapGestures (I2fedf, b/175294473)
移除了 String.format API,将各种 toString 方法中的用法重构为不依赖于 String.format 内部。 (Id1290)
删除了 dp 断言 (I798d2)
移除了 androidx.compose.runtime:runtime-dispatch (I55feb)
文本操作现在会自动检查焦点 (I13777, b/179648629)
移除了
runBlockingWithManualClock
(I15cdc, b/179664814)Modifier.verticalScroll()/horizontalScroll() 中的滚动位置现在以 Ints 表示 (I81298)
FlingConfig 已重命名为 FlingBehavior,现在允许自定义暂停动画,而不是预定义的 Decays。 (I02b86, b/175294473)
添加了一个辅助函数,有助于为所有 ImeAction 回调设置相同的操作 (I63447, b/179226323)
从所有文本字段中移除了 SoftwareKeyboardController 回调,稍后将由新的 API 取代。 (Iae869, b/168778053)
FontSpan 和 FontWeigthStyleSpan 不再使用并已移除。 (Ie5b56, b/177423444)
对 Material API 进行了以下更改
- 为 Top/BottomAppBar 添加了 contentPadding 参数,以允许自定义默认内边距。
- 重新排列了 BackdropScaffold 中的参数,以遵循 API 指南,即必需参数在可选参数之前。
- 将 BottomNavigationItem 中的
icon
参数移至selected
和onClick
之后。 - 将 BottomNavigationItem 中的
alwaysShowLabels
参数重命名为alwaysShowLabel
。 - 将一些组件中的
bodyContent
参数重命名为content
。 - 重新排列了
ButtonDefaults.buttonColors()
中的参数。请注意,由于参数类型未更改,这不会导致您的代码出错 - 请确保您使用命名参数或手动更新顺序,否则您的代码将无法像以前一样工作。 - 为
darkColors()
添加了secondaryVariant
参数。此颜色通常在深色主题中与secondary
相同,但为了保持一致性和进一步自定义而添加。 - 从公共 API 表面移除了 ElevationDefaults 和 animateElevation(),因为它们不常用/有用。
- 将
Slider
中的onValueChangeEnd
重命名为onValueChangeFinished
并使其可空。 - 为保持一致性,将
Snackbar
中的text
参数重命名为content
。 - 为
DropdownMenuItem
添加了contentPadding
参数,以允许自定义默认内边距,并使content
成为RowScope
的扩展。 - 将
ModalDrawerLayout
重命名为ModalDrawer
。 - 将
BottomDrawerLayout
重命名为BottomDrawer
。 - (I1cc66)
Bug 修复
- 添加了在 Compose 中使用 AnimatedVectorDrawable 资源的 API。使用 animatedVectorResource 加载
<animated-vector>
XML 作为 AnimatedImageVector,并使用 painterFor 动画它 (I8ea91) - 添加了新的 LocalSoftwareKeyboardController 组合本地 API,以取代 TextField 上之前的 SoftwareKeyboardController 接口。 (I658b6, b/168778053)
版本 1.0.0-alpha12
2021 年 2 月 10 日
androidx.compose.ui:ui-*:1.0.0-alpha12
已发布。 版本 1.0.0-alpha12 包含这些提交。
API 变更
- 对 ViewGroup 的支持已从 UiApplier 中移除。已弃用的 emitView 可组合项已移除。 (Ifb214)
- Modifier.pointerInput 现在需要 remember 键来指示指针输入检测协程何时应重新启动以获取新依赖项。 (I849cd)
- CompositionReference 重命名为 CompositionContext (I53fcb)
- Bounds 已重命名为 DpRect (I4b32a)
- 测试更新:hasText() 将检查文本字段中的输入文本和标签/提示/占位符文本 (Iab803)
- viewModel() 可组合项和 LocalViewModelStoreOwner 已移至 androidx.lifecycle.viewmodel.compose。您现在需要添加单独的依赖项 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 才能使用它。 (I7a374)
- 允许 AccessibilityAction 中的可空操作,将 AccessibilityAction 和 CustomAccessibilityAction 中的操作标签从 CharSequence 更改为 String (I0dc82)
- 为了更好地匹配 ImageBitmap 和 ImageVector 的命名约定,ImagePainter 已重命名为 BitmapPainter,与 VectorPainter 保持一致。 (Iba381, b/174565889)
- 更好的子字符串测试 API,现在子字符串作为参数 (Icbe78)
- 添加了
Modifier.focusOrder()
,它接受 FocusRequester 而无需指定自定义焦点顺序 lambda。当只需要指定引用但不需要可组合的自定义焦点顺序时,这很有用 (I4f52a, b/179180978) - ComponentActivity.setContent 已移至 androidx.activity.compose.setContent,位于 androidx.activity:activity-compose 模块中。 (Icf416)
- 析构和 copy() 方法已从一些很少使用的类中移除。 (I26702, b/178659281)
- 将 Popup 移动为平台特定。AndroidPopupProperties 已重命名为 PopupProperties,并且
isFocusable
已移至PopupProperties
中的focusable
参数 (Ieeea5) - 将 Dialog 移动到平台特定。AndroidDialogProperties 重命名为 DialogProperties。 (I4ef69, b/179138130)
- LayoutNode 内部化 (I8a7b1, b/175103944)
- Constraints.enforce 被 Constraints.constrain 替换。 (I8b8ea)
- loadFontResource 已弃用。请改用 fontResource。imageResource、loadImageResource、vectorResource 和 loadVectorResource 已弃用。请改用 painterResource。 (I6b809)
- 出于性能原因,ScrollAxisRange 语义现在接受返回浮点数的 lambda,而不是直接的浮点值。 (If4a35, b/178657186)
- 添加了 EditableText 语义,用于标记文本字段的可编辑输入文本以供辅助功能使用,以及相应的测试方法来检查语义 (I8e07a)
- 将 OwnerLayer/OwnerScope/OwnerSnapshotObserver 内部化 (I4ffaf, b/175103944)
- toIntPx() 已重命名为 roundToPx()。 (I9b7e4, b/173502290)
- IntBounds 已重命名为 IntRect,API 也得到了改进。 (I1f6ff)
- Snapshot API 已更新,以便与 API 指南更一致,并隐藏公共 API 中的内部实现类。 (Id9e32)
- 添加了展开和折叠语义操作。在 ModalBottomSheetState 中添加了展开和半展开 (Ib5064)
- Modifier.dragGestureFilter 已弃用。请改用
Modifier.pointerInput { detectDragGestures (...)}
。或者,使用 Modifier.draggable 进行单轴拖动 (I0ba93, b/175294473) - 重命名 Ambients 以匹配 Ambient -> CompositionLocal 的重命名。Ambients 以前命名为 AmbientFoo,现在 CompositionLocals 命名为 LocalFoo。 (I2d55d)
- 已弃用的 BaseTextField 现已移除。请改用 BasicTextField。 (I71368)
- Selection 已移至 foundation。 (I7892b)
- 与我们之前移除
state { 0 }
可组合项并推广使用remember { mutableStateOf(0) }
类似,我们将移除savedInstanceState { 0 }
可组合项。您应该改用rememberSaveable { mutableStateOf(0) }
,如果 MutableState 中使用的类型可以存储在 Bundle 中,它将自动保存和恢复。如果您之前传递的是自定义 saver 对象,现在您需要使用 rememberSaveable 的新重载,它具有stateSaver
参数。用法将如下所示:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }
(Ib4c26, b/177338004) - 为辅助功能添加了密码语义 (I231ce)
- 添加了 ProgressBarRangeInfo.Indeterminate,用于标记不确定进度条以供辅助功能使用 (I6fe05)
emptyContent()
和(@Composable () -> Unit).orEmpty()
实用工具已弃用,因为它们不再具有任何积极的性能影响或价值 (I0484d)snapshotFlow
和withMutableSnapshot
不再是实验性的 (I6a45f)- Recomposers 现在可以关闭。关闭的 Recomposers 将继续重新组合,直到组合子协程完成。Recomposer.shutDown 重命名为 cancel,以与 close 区分。 (Ib6d76)
- Recomposer.runningRecomposers 现在提供了一个全局的 StateFlow,包含只读的 RecomposerInfo,用于观察正在进行的组合状态。优先使用此 API,而不是 Recomposer.current(),后者现已弃用。 (If8ebe)
- UiSavedStateRegistry 重命名为 SaveableStateRegistry,AmbientUiSavedStateRegistry 重命名为 AmbientSaveableStateRegistry,两者都移至 androidx.compose.runtime.saveable 包。 (I30224)
- 工件 androidx:compose:runtime:runtime-saved-instance-state 已重命名为 androidx:compose:runtime:runtime-saveable (I6dcac)
- ui 包中许多长期弃用的 API 已删除。 (I2f2dc)
- compose:runtime-dispatch artifact 现已弃用。MonotonicFrameClock 现在可以在 compose:runtime 中找到,AndroidUiDispatcher 可以在 compose:ui 中找到。 (Ib5c36)
- Outline.* 类不再是数据类 (I4879e, b/178001427)
- 移除了
view.captureToImage()
,没有替代。 (I7fcd2) - 引入了用于修改源内容 RGB 值的 ColorMatrix API,并将 ColorFilter API 重构为接口,以匹配 PathEffect 的实现。 (Ica1e8)
- 向 Shape 的 createOutline 添加 layoutDirection 参数。这允许创建感知布局方向的形状。 (I57c20, b/152756983)
- onImeActionPerformed 已弃用。请改用 KeyboardActions (If0bbd, b/179071523)
- 引入了一个
InfiniteAnimationPolicy
协程上下文元素,它将应用于无限动画。默认情况下,未安装任何策略,但在使用ComposeTestRule
运行测试时除外。 (I50ec4, b/151940543) - canDrag 已从 Modifier.scrollable 中移除。 (Id66e7, b/175294473)
- 将 LayoutCoordinates.parentCoordinates 重命名为 LayoutCoordinates.parentLayoutCoordinates,以允许新的 parentCoordinates 属性。parentCoordinates 属性现在提供父修饰符的 LayoutCoordintes。这将为 onSizeChanged() 和 onGloballyPositioned() 提供更完整的用例 (Idfbfd, b/177926591)
- tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicaitonGestureFilter 已弃用。请改用 Modifier.clickable 或 Modifier.pointerInput 和 detectTapGestures 函数。 (I6baf9, b/175294473)
- SaveableStateRegistry 的 unregisterProvider 已移除。现在 registerProvider() 返回 SaveableStateRegistry.Entry 对象,您可以使用它来注销 (Ic4274, b/178583739)
- rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 包。 (I1366e, b/177338004)
- 已从公共 API 中移除 CoreText 和 CoreTextField
- 移除了已弃用的 SelectionContainer 重载
- (I99c19)
- 在直接添加到 WindowManager 的层次结构中添加/删除 Compose 的测试现在更加稳定。 (Ie81ed, b/175765614)
- Recomposer.current() 已移除。[Abstract]ComposeView 现在默认使用延迟创建的、窗口范围的 Recomposers,这些 Recomposers 由窗口的 ViewTreeLifecycleOwner 驱动。当宿主 Lifecycle 停止时,重新组合和基于 withFrameNanos 的动画计时会暂停。 (I38e11)
- Recomposer.runningRecomposers 现在提供了一个全局 StateFlow,包含只读的 RecomposerInfo,用于观察进程中正在进行的组合状态。优先使用此 API,而不是 Recomposer.current(),后者现已弃用。 (If8ebe)
- Saver, listSaver(), mapSaver(), autoSaver 已从 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6)
- EditCommands 接受 AnnotatedString。然而,这只是一个 API 更改,多样式文本编辑尚未实现。 (I4c3ea)
- Uptime 和 Duration 已移除。 (Ib9bf4, b/177420019)
- CompositionData.asTree() 和相关 API 已移至单独的 ui-tooling-data 模块并标记为实验性 (Ic95b8)
RounderCornerShape、CutCornerShape 和 CornerBasedShape 上的参数已从 left/right 重命名为 start/end,以支持形状在 RTL 方向上的自动镜像。AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape 被引入用于不需要自动镜像的情况。 (I61040, b/152756983)
Compose 编译器插件的目标 API 已重构为使用接口而不是具体类。该接口也不再使用类型参数。
这是一个内部更改,不应影响源代码兼容性,但会破坏二进制兼容性,因此对于大多数用户来说不应构成问题。 (I3b922, b/169406779)
Bug 修复
- 移除了非故意公开的 StringBuilder.deleteAt 函数 (Id6ed9)
- 放置在作为另一个组合子项的视图层次结构中的 ComposeViews 现在托管其祖先的子组合 (I92883)
更新了 compose 的 imageFromResource API,以便在加载 ImageBitmap 对象时重用资源可绘制缓存。 (If3627, b/178751994)
版本 1.0.0-alpha11
2021 年 1 月 28 日
API 变更
androidx.compose.ui:ui-*:1.0.0-alpha11
已发布。 版本 1.0.0-alpha11 包含这些提交。- WithConstraints 已重做为 BoxWithConstraints 并移至 foundation.layout。 (I9420b, b/173387208)
- Key.DPadUp 已弃用。请改用 Key.DirectionUp。 (Iab335, b/177954892)
- Owner 接口现在是内部的。 (If8e35)
- 添加了 FocusManager.moveFocus() API 以编程方式移动焦点。 (I045cb, b/177681839)
- 将 PopupPositionProvider 更改为使用相对于窗口的坐标,而不是全局坐标。将 parentGlobalBounds 重命名为 anchorBounds,并将 windowGlobalBounds 更改为 windowSize: IntSize (I2994a)
- Duration 和 Uptime 将被 Long 毫秒替换,此步骤消除了指针输入对这些类的依赖。 (Ia33b2, b/175142755, b/177420019)
- AmbientSavedStateRegistryOwner 已添加,类似于已有的 AmbientLifecycleOwner 和 AmbientViewModelStoreOwner (I9a3e8, b/176756365)
- 更新了矢量图形 API 以支持解析应用于矢量图形根部的色调。 (Id9d53, b/177210509)
- 为 PointerInputChange 添加了 toolType 以区分设备 (Iac787, b/175142755)
- AmbientWindowManager 重命名为 AmbientWindowInfo (I2686a, b/177084714, b/177084983)
- 弃用了全局坐标方法,并创建了新的基于窗口的坐标方法。 (Iee284)
- 添加了 Modifier.toolingGraphicsLayer,在开启检查时添加图形层修饰符。 (I315df)
- FocusRequester.createRefs 现已标记为实验性,因为它可能会更改。 (I2d898, b/177000821)
- SemanticsPropertyReceiver.hidden 已重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。AccessibilityRangeInfo 已重命名为 ProgressBarRangeInfo。stateDescriptionRange 已重命名为 progressBarRangeInfo。AccessibilityScrollState 已重命名为 ScrollAxisRange。horizontalAccessibilityScrollState 已重命名为 horizontalScrollAxisRange。verticalAccessibilityScrollState 已重命名为 verticalScrollAxisRange。 (Id3148)
- 移除了 PointerInputData 并修改了 PointerInputChange,使其具有 PointerInputData 的所有字段。将 PointerInputEvent 和 PointerInputEventData 设为内部,因为它们未在任何公共 API 中使用。 (Ifff97, b/175142755)
- 更新了 GraphicsLayerScope 实现密度以支持 dp 到原始像素的转换。 (Ied528, b/176819695)
- 更新了矩阵 API,以遵循行主序并提供索引常量,以帮助在不同的矩阵表示之间进行转换,从而匹配内部 SkMatrix 和 Matrix4 之间的框架转换逻辑。 (I432e6)
- 移除了实验性的 monotonicFrameAnimationClockOf 方法 (Ib753f, b/170708374)
- 将 String.fintPrecedingBreak 和 String.fingFollowingBreak 移至 InternalTextApi。 (I657c4)
- androidx.compose.ui.util.isSurrogatePair 已从公共 API 中移除。 (Ia9494)
- 将 TransformedText.transformedText 重命名为 TransformedText.text
- TransformedText 不再是数据类 (Ie672a)
- 移除了以下类中的
data class
- InlineTextContent
- 移除了以下类中的
- LocaleList (I605c7)
- 以下类不再是数据类
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
- 将 VisualTransformation 更改为函数接口 (I3bba4)
- 添加了函数引用参数类型 (I5e1bd)
Bug 修复
- 向 InspectorNode 添加转换后的边界 (Ice42f)
onCommit、onDispose 和 onActive 已弃用,取而代之的是 SideEffect 和 DisposableEffect API (If760e)
- Font/FontFamily/Typeface 的工厂函数更改
- 添加了以大写字母开头的工厂函数
- 弃用了以前以小写字母开头的工厂函数
- 新的工厂函数返回 FontFamily 而不是子类
- 隐藏了子类的构造函数,因此它们只能通过工厂函数构造。
将 Font.asFontFamily 重命名为 Font.toFontFamily (I42aa7)
引入了
ComposeContentTestRule
,它扩展了ComposeTestRule
并定义了setContent
(已从ComposeTestRule
中移除)。添加了工厂方法createEmptyComposeRule()
,它返回ComposeTestRule
并且不会为您启动 Activity。当您希望在测试期间启动 Activity 时(例如使用ActivityScenario.launch
),请使用此方法。 (I9d782, b/174472899)animateAsState 现在是 animateFooAsState,其中 Foo 是正在动画的变量类型。例如,Float、Dp、Offset 等 (Ie7e25)
Content description 参数已添加到 Image 和 Icon。它用于为辅助功能服务提供描述。 (I2ac4c)
移除了 displaySize,因为它应该避免使用。通常最好使用 onRoot() 的大小或至少窗口大小。 (I62db4)
OnSizeChanged 之前报告的是布局内容的大小。现在它报告的是修饰符链中其位置的大小。 (I36b78, b/177562900)
emit() API 和所有重载已弃用并重命名为 ComposeNode。这些 API 完全相同,只是名称不同,以遵循 Compose 的命名约定 (I4137b)
- TextFieldValue 接受 AnnotatedString。然而,这只是一个 API 更改,多样式文本编辑尚未实现。
从 EditingBuffer 构造函数参数中移除了
initial
。 (I326d5)invalidate 和 compositionReference() 现已弃用,取而代之的是 currentRecomposeScope 和 rememberCompositionReference。 (I583a8)
AnnotatedString 已更改为继承自 kotlin.CharSequence。因此,length 和 subSequence 现在是实例函数,并且扩展函数已移除。 (Iaf429)
RememberObserver 替换了 CompositionLifecycleObserver,现在 CompositionLifecycleObserver 已弃用。
RememberObserver
是CompositionLifecycleObserver
的替代品,具有修改后的语义和重命名的方法。对于只记住一次的对象,可以机械地切换到新的 API,这仍然是推荐的做法。但是,如果一个引用在组合中被记住多次,那么onRemembered
会为每个引用调用,而onEnter
只调用一次。onEnter
在对象用于子组合(例如WithConstraints
和Scaffold
)时会多次调用,使得单次onEnter
调用的保证不可靠,因此在RememberObserver
中将其移除。RememberObserver
添加了onAbandoned
,当RememberObserver
实例从传递给remember
的回调中返回但未在组合状态中记住时调用,因此永远不会调用onRemembered
。这可能发生在异常终止组合、组合被丢弃(因为它正在生成组合的状态不再当前或不再需要)等情况下。如果RememberObserver
实例遵循上述单一引用建议并跟踪外部资源,则onForgotten
和onAbandoned
都表示该资源不再需要。如果对象跟踪在onRemembered
中启动的工作或分配的资源,则可以忽略onAbandoned
,因为它在调用onRemembered
时不会被调用。 (I02c36)弃用了 2 个或更多 TextUnits 之间的算术运算。弃用了 TextUnit.Sp 和 TextUnit.Em 函数,而倾向于使用 Int.sp 和 Int.em 等扩展函数。 (I48369)
默认情况下,没有明确声明公共资源(例如通过 public.xml)的库中的资源现在是私有的。 (Ia1dcc, b/170882230)
ScrollableColumn/Row 已弃用。使用 ScrollableColumn 效率不如 LazyColumn,因为当您有大量滚动内容时,LazyColumn 只能组合/测量/绘制可见元素。为了防止用户选择低效的方式,我们决定弃用 ScrollableColumn 和 ScrollableRow,并推广使用 LazyColumn 和 LazyRow。用户仍然可以决定他们不需要延迟行为,并直接使用修饰符,例如:Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b, b/170468083)
LazyColumn/LazyRow/LazyVerticalGrid 作用域的新
items(count: Int)
工厂方法。items(items: List)
和itemsIndexed(items: List)
现在是扩展函数,因此在使用时必须手动导入它们。数组的新扩展重载:items(items: Array)
和itemsIndexed(Array)
(I803fc, b/175562574)- 请使用 ImeAction.None 而不是 ImeAction.NoAction
请使用 ImeAction.Default 而不是 ImeAction.Unspecified (Ie1bcc)
TextInputService.onStateUpdated 已重命名为 updateState (Id4853)
基于 TransitionDefinition 的 Transition 已被弃用 (I0ac57)
TextUnitType.Inherit 已移除。请改用 TextUnitType.Unspecified。 (I9ff64)
版本 1.0.0-alpha10
2021 年 1 月 13 日
androidx.compose.ui:ui-*:1.0.0-alpha10
已发布。 版本 1.0.0-alpha10 包含这些提交。
重大变更
内部编译器 API 的重构允许将合成结果生成的节点更改批处理到合成的“应用更改”阶段,即在所有
@Composable
函数完成后。这是一个行为上的重大变更,可能会影响应用程序代码,因为节点在应用更改之前无法从内部和实验性 API 获取。这通常可以通过将此类依赖项的代码封装在
SideEffect
composable 中来解决,以推迟代码的执行,直到节点创建和初始化完成。 (I018da)
API 变更
- 添加了 Modifier.focusOrder(),可用于指定自定义焦点遍历顺序 (I90cf5, b/175899543, b/170155556, b/170155429)
- 移除了已弃用的 focusObserver,请改用 onFocusChanged 或 onFocusEvent (I3ecb9, b/175156387)
- EditOperations API 变更
- EditOperation 已重命名为 EditCommand
- 为 EditOperation 具体实现添加了 Command 后缀
- EditCommand 不再是数据类
- EditOperation.process 函数已重命名为 applyTo
- InputEventListener 已重命名为 InputEventCallback
- (I0a366)
- 移除了未使用的 PxSquared, PxCubed, PxInverse。将 Size.center() 更改为属性。 (I973f7)
- ui-test 模块现在能够为正在测试的 UI 配置 Recomposer 的创建 (Ibebd8)
- 修改了 Velocity,使其具有组件部分和数学运算。 (Ib0447)
- 将
@ExperimentalTesting
重命名为@ExperimentalTestApi
,以与类似的实验性 API 注解保持一致 (Ia4502, b/171464963) - 将 Color.useOrElse() 重命名为 Color.takeOrElse() (Ifdcf5)
- 移除了未使用的 DpInverse, DpSquared 和 DpCubed 类。 (I4d62b)
- Constraints#satisfiedBy 已重命名为 isSatisfiedBy。 (I9cf5c)
- 添加回调以在 layoutnode 边界更改时通知所有者。 (I72fd1)
- 为具有 Unspecified 常量的内联类添加了 isSpecified、isUnspecified 和 useOrElse。 (I93f7b, b/174310811)
扩展 [Abstract]ComposeView API 以允许回收基于 Compose 的视图,处置其合成以供稍后重新创建。添加用于安装和发现窗口范围的 Recomposer 和 CompositionReferences 的 API,以创建子合成。
添加 ViewCompositionStrategy 以配置 [Abstract]ComposeViews 的合成处置策略;默认行为是在窗口分离时处置。 (I860ab)
移除了 Any.identityHashCode() 公共 API (I025d7)
移除了 toStringAsFixed API,转而直接使用 String.format。 (Iaba6b)
将 Toggle 添加到 foundation Strings.kt (I4a5b7, b/172366489)
将 nativeClass 移至 ui 模块并设为内部。更新了 equals 实现中 nativeClass 的用法,改用 'is MyClass'。 (I4f734)
Modifier.focus() 和 Modifier.focusRequester() 已被弃用。请改用 Modifier.focusModifier() 和 Modifier.focusReference()。 (I75a48, b/175160751, b/175160532, b/175077829)
引入了 SelectionRegistrar.notifySelectableChange,用于通知 SelectionManager 可选更新。 (I6ff30, b/173215242)
引入了 Outline.bounds 属性,用于获取各种轮廓实现的边界矩形。 (I16e74, b/175093504)
TestUiDispatcher 已弃用。请改用 Dispatchers.Main (Ic171f, b/175385255)
ImeOptions 和 KeyboardOptions 不再是数据类 (I3c898, b/168684531)
VisualTransformation API 变更
- OffsetMap 已重命名为 OffsetMapping
- OffsetMapping.identityOffsetMap 已重命名为 OffsetMapping.Identity
- PasswordTransformation 不再是数据类
- 将 OffsetMapping 移至其自己的文件
- (I0bdf3)
将 Position 重命名为 DpOffset 并移除了 getDistance() (Ib2dfd)
将 fun Dp.isFinite() 更改为 val Dp.isFinite (I50e00)
Bug 修复
- Recomposer 现在公开其当前状态的 Flow,允许监控其活动和相关效果的活动。 (Ifb2b9)
- 现在可以通过 keyEvent.nativeKeyEvent 访问原生 keyEvent (I87c57, b/173086397)
animate()
现在已替换为animateAsState()
,后者返回一个State<T>
而不是T
。这可以提供更好的性能,因为无效范围可以缩小到读取 State 值的位置。 (Ib179e)- 添加了 Semantics 角色 API,并将 Role 作为 clickable、selectable 和 toggleable SemanticsModifier 的参数。修改了 Modifier.progressSemantics,以便 Slider 也可以使用它。 (I216cd)
- 新的基于协程的 API
Animatable
,确保其动画之间互斥。- 新的 DecayAnimationSpec 以支持多维衰减动画
- (I820f2, b/168014930)
版本 1.0.0-alpha09
2020 年 12 月 16 日
androidx.compose.ui:ui-*:1.0.0-alpha09
已发布。 版本 1.0.0-alpha09 包含这些提交。
API 变更
- 已弃用的 KeyEvent.Alt 现已移除。请改用 KeyEvent.isAltPressed。 (Idd695)
- Modifier.keyInputFilter 和 Modifier.previewKeyInputFilter 已弃用,请改用 Modifier.onKeyEvent 和 Modifier.onPreviewKeyEvent (Idbf1b, b/175156384)
- Modifier.focusObserver 已弃用。请改用 Modifier.onFocusChanged 或 Modifier.onFocusEvent (I30f17, b/168511863, b/168511484)
- 对于挂起指针输入 API,将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。 (Idf0a1, b/175142755)
- Autofill API 现在是实验性 API,需要选择启用 (I0a1ec)
- 添加解构声明以创建 FocuSRequester 实例 (I35d84, b/174817008)
- accessibilityLabel 已重命名为 contentDescription。accessibilityValue 已重命名为 stateDescription。 (I250f2)
- 自定义事件已从挂起指针输入 API 中移除 (Ia54d5, b/175142755)
- 在 SelectionRegistrar 中引入了几个新函数,并将 onPositionChange 重命名为 notifyPositionChange。 (Ifbaf7)
- LayoutNode 的更多成员被标记为内部 (I443c6)
- 引入了 LayoutInfo 供工具和测试使用 (I9b190)
- AndroidOwner 已内部化 (Ibcad0, b/170296980)
- 移除了 ExperimentalPointerInput 注解 (Ia7a24)
- 添加了嵌套滚动系统。有关更多详细信息,请参阅 Modifier.nestedScroll (I36e15, b/162408885)
- subcomposeInto(LayoutNode) 已内部化 (Id724a)
Applier
接口已更改,以简化自下而上而不是自上而下构建树。insert()
方法已重命名为insertTopDown()
。添加了一个新方法
insertBottomUp()
。应用器根据性能选择使用
insertTopDown()
或insertBottomUp()
将节点插入到它正在编辑的树中。某些树,例如
LayoutNode
和View
,自下而上构建比自上而下构建效率高得多。在此更改之前,自下而上构建需要一个插入堆栈,该堆栈需要复制到每个需要自下而上构建以提高性能的应用器中。通过此更改,Applier
重写insertBottomUp()
以自下而上构建树,并重写insertTopDown()
以自上而下构建树。 (Icbdc2)向 AndroidDialogProperties 添加了 dismissOnBackPress 和 dismissOnClickOutside 属性。这些属性允许配置何时调用对话框的 onDismissRequest lambda。 (If5e17)
添加了 painterResource API,用于不透明地从光栅化资产格式(如 PNG)或 VectorDrawables 加载 Painter 对象。消费者不再需要提前确定资产类型,并且可以调用此方法来获取 Painter 对象,以用于 Image 可组合项或 painter 修饰符。 (I2c703, b/173818471)
添加了 Modifier.clearAndSetSemantics 以清除后代语义并设置新的语义。 (I277ca)
将 ContentDrawScope 移至 ui-graphics 模块,与 DrawScope 放在一起。 (Iee043, b/173832789)
引入了 PathEffect 图形 API,为描边形状提供不同的图案。弃用了 NativePathEffect 的用法,转而使用 PathEffect 的 expect/actual 实现。 (I5e976, b/171072166)
添加了 Compose 的 IdlingResource 接口,作为 Espresso 空闲资源的 Compose 支持变体。它们可以通过 ComposeTestRule 进行注册和取消注册 (I433f3)
移除了 ComposeIdlingResource 的全局(取消)注册以及时钟到 ComposeIdlingResource 的全局(取消)注册 (I32660)
Bug 修复
- 偏移修饰符中的 lambda 现在返回 IntOffset 而不是 Float。 (Ic9ee5, b/174137212, b/174146755)
从公共 API 中移除了 SlotTable、SlotReader 和 SlotWriter。这些之前被标记为 InternalComposeAPI。现在它们是 compose 模块的内部 API。
添加了 CompositionData 和 CompositionGroup 作为 ui-tooling API 的替代品,用于提取合成信息。这些是公共的,但并非旨在用于 ui-tooling API 之外,因为它们提供 ui-tooling API 解释的原始信息 (I31a9c)
重构了 ShaderBrush,以在绘图环境的尺寸信息可用时延迟创建着色器实例。这对于在合成时定义占据可组合项完整绘图边界的渐变非常有用,而无需实现自定义 DrawModifier 实现。
弃用了渐变函数构造函数 API,转而使用 Gradient 对象上的工厂方法。 (I511fc, b/173066799)
弃用 LazyColumnFor, LazyRowFor, LazyColumnForIndexed 和 LazyRowForIndexed。请改用 LazyColumn 和 LazyRow (I5b48c)
弃用了 BuildCompat.isAtLeastR (Idb37e)
添加了 buildAnnotatedString 工厂函数,用于构建 AnnotatedString。弃用了 annotatedString 构建器函数。 (Idfe0b)
移除了 Float 和 Double 上将值转换为弧度的扩展方法。移至 PathParser 实现中的私有函数,因为它是唯一使用它的地方。 (I25f52)
版本 1.0.0-alpha08
2020 年 12 月 2 日
androidx.compose.ui:ui-*:1.0.0-alpha08
已发布。 版本 1.0.0-alpha08 包含这些提交。
API 变更
- 添加语义操作 Dismiss (I2b706)
- 将 DrawModifier API 从 androidx.compose.ui 包移到 androidx.compose.ui.draw 包。创建了 DrawModifierDeprecated.kt 文件以包含类型别名/辅助方法,以帮助从弃用 API 迁移到当前 API。 (Id6044, b/173834241)
- Modifier.drawLayer 已重命名为 Modifier.graphicsLayer。还根据 API 反馈更新了相关类以使用 GraphicsLayer。 (I0bd29, b/173834241)
- 添加了新的 placeable.placeWithLayer() 和 placeable.placeRelativeWithLayer() 方法,允许自定义布局和布局修饰符在放置子项时引入图形层进行绘制。这样我们可以首先优化重绘,因此当我们需要移动子项时,我们无需重绘其内容;其次,我们可以对子项应用绘制转换。 (Ibd8f6, b/170296989, b/171493718, b/173030831)
- SubcomposeLayout 声明中的
<T>
已移除。现在可以不指定类型使用它。 (Ib60c8) - 添加了 Modifier.scale/rotate API 作为 drawLayer 的便利方法。
- 将
Modifier.drawOpacity
重命名为Modifier.alpha
- 将
Modifier.drawShadow
重命名为Modifier.shadow
(I264ca, b/173208140)
- 将
- 使 PointerInputData 的 uptime 和 position 字段不可为空。 (Id468a)
- MaterialTheme 现在为选择手柄和选择背景设置正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColors 来自定义用于选择的颜色。 (I1e6f4, b/139320372, b/139320907)
- 添加了 WindowManager.isWindowFocused 以检查主机窗口是否获得焦点,并添加了 WindowFocusObserver,它提供 onWindowFocusChanged 回调。 (I53b2a, b/170932874)
- 更新了 TransformOrigin API,使其具有解构语法,以将
pivotFractionX
和pivotFractionY
作为component1
和component2
返回。 (If43c4, b/173586560) - 添加了用于可组合 lambda 参数命名和位置的 lint 检查,以检查与 Compose 指南的一致性。还根据 lint 检查和指南,将一些使用
children
作为其尾随 lambda 名称的 API 迁移到content
。 (Iec48e) - 添加了 API,用于检查在分发 KeyEvent 时是否按下了 Alt、Ctrl、Meta 或 Shift 修饰符键。 (I50ed9)
- 添加了一个新的
Modifier.drawLayer()
重载。它在新的 GraphicsLayerScope 上接受一个 lambda 块,您可以在其中定义层参数,从而允许在状态更改时跳过重新合成和重新布局。DrawLayerModifier 现在是内部的,以准备将其逻辑迁移到 LayoutModifier 的 placeable.placeWithLayer() 方法中。 (I15e9f, b/173030831) - 弃用了以
Ambient
为后缀的 Ambients,并将其替换为以 Ambient 为前缀的新属性,遵循其他 Ambients 和 Compose API 指南。 (I33440) - 将
androidx.compose.ui.text.Typeface
移至androidx.compose.ui.text.font.Typeface
(Ic2b81) - Semantics 参数 mergeAllDescendants 已重命名为 mergeDescendants。 (Ib6250)
- 新的拖动手势检测器挂起指针输入 API,包括方向锁定。 (Icef25)
- 将 VectorAsset 重命名为 ImageVector。根据 API 指南,将 VectorAsset 移至并重命名为 Builder,作为 ImageVector 的内部类。添加了 VectorAssetBuilder 的类型别名,以链接到 ImageVector.Builder 以实现兼容性。 (Icfdc8)
- 将 ImageAsset 和相关方法重命名为 ImageBitmap。 (Ia2d99)
- 添加 PlacementScope 的 place() 的 zIndex 参数,以便 Modifier.zIndex() 现在作为 LayoutModifier 工作,并且任何自定义布局都可以在放置块中直接为其子项设置 zIndex (I711f7, b/171493718)
- 将 foundation 语义属性移至 ui (I6f05c)
- 弃用 place(Offset) 和 placeRelative(Offset)。请改用带 int 偏移的重载。 (I4c5e7)
- 之前弃用的 API 已移除:Modifier.onPositioned 已移除,请改用 Modifier.onGloballyPositioned。Modifier.onDraw 已移除,请改用 Modifier.onDrawBehind。Modifier.plus 已移除,请改用 Modifier.then。Color.Unset 已移除,请改用 Color.Unspecified。PxBounds 类已移除,请改用 Rect。 (Ie9d02, b/172562222)
- Alignment 接口已更新并变为函数式。 (I46a07, b/172311734)
- 使用新的挂起指针输入添加了用于点按、双击、长按和按压指示的手势检测器。还添加了一些实用工具,使开发人员更容易编写自己的手势检测器。 (I00807)
id
已重命名为layoutId
,用于LayoutIdParentData
。Measurable.id
已重命名为Measurable.layoutId
。 (Iadbcb, b/172449643)- 新的多点触控手势检测器,包括用于检测旋转、缩放和平移的辅助功能。 (Ic459d)
- 引入了 SweepGradientShader 和 SweepGradientBrush API。 (Ia22c1)
- 测试中的时间控制(TestAnimationClock 及其用法)现在是实验性的 (I6ef86, b/171378521)
添加基于协程的滚动 API
添加 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及用于滚动控制的低级 API。这些 API 提供了挂起接口来控制滚动,并在滚动完成前等待返回。 (Ie5642)
Modifier.focusable 已添加到 foundation 中。使用它为组件添加可聚焦行为,并具有正确的语义和可访问性。 (I41eb9, b/152525426, b/162865824)
在 AnimationClockTestRule 中提供方法的默认实现和可以委托给其
clock
的属性 (I7ea3d, b/173399709)AndroidComposeTestRule 现在可以接受自定义 activity launcher (Ib8288, b/153623653, b/154135019)
TextLayoutResult.getLineVisibleEnd 已弃用。作为替代,TextLayoutResult.getLineEnd 现在有一个新参数 visibleEnd。 (I73282)
更新了 TextFieldValue API
- 使 TextFieldValue.composition 只读
- 移除了无效选择范围抛出的异常 (I4a675, b/172239032)
支持 TtsAnnotation 用于文本转语音引擎。 (I54cc6)
新的用于在协程中运行动画的 API (Ied662)
Bug 修复
- Box 的 alignment 参数已重命名为 contentAlignment。 (I2c957)
- offsetPx 修饰符已重命名为 offset。它们现在接受 lambda 参数而不是 State。 (Ic3021, b/173594846)
- 向 TextInputService#onStateUpdated 添加了 resetInput 参数 (I3e8f5, b/172239032, b/171860947)
- 添加了用于 Composable 函数中 Modifier 参数的 lint 检查。此 lint 检查会检查参数的命名、返回类型、默认值和顺序,以与 Compose 指南保持一致。 (If493b)
- 暂时添加了选项,允许 TestAnimationClock 由 MonotonicFrameClock 驱动 (I1403b, b/173402197)
- 添加了 Android Typeface 包装器。您可以通过
typeface
函数加载 Android Typeface,例如typeface(Typeface.DEFAULT)
。还将typefaceFromFontFamily()
重命名为typeface()
(I52ab7) - 添加了 lint 检查,以检查 Modifier 工厂函数是否定义为 Modifier 的扩展,以便它们可以流畅地链接在一起。 (I07981)
- 移除旧的 ui-test 模块及其存根 (I3a7cb)
- Recomposer 不再接受 EmbeddingContext;所需的调度依赖项是从 effectCoroutineContext 获取的。FrameManager 已弃用;平台集成应初始化自己的全局快照处理。 (I02369)
- 将样式信息传递给可访问性节点。 (If5e8d)
- TextUnit.Inherit 已重命名为 TextUnit.Unspecified,以与其他单位保持一致。 (Ifce19)
Compose UI 版本 1.0.0-alpha07
2020 年 11 月 11 日
androidx.compose.ui:ui-*:1.0.0-alpha07
已发布。 版本 1.0.0-alpha07 包含这些提交。
API 变更
- 引入了 ScaleFactor 内联类,用于表示水平轴和垂直轴的比例因子,彼此独立,以支持非均匀缩放用例。
- 向 ContentScale 添加了 computeScaleFactor 方法
- 添加了 ContentScale.FillBounds 以执行非均匀缩放,将源边界拉伸以完全占据目标。
- 添加了操作方法以使用 Size 参数计算 ScaleFactor 参数。
- (Ic96a6, b/172291582)
- 添加了用于创建 Alignments 的 BiasAlignment 和 BiasAbsoluteAlignment 工厂。 (Iac836, b/169406772)
- 允许开发人员强制清除焦点。 (I90372)
- 修复了 Compose 内部 View 的高程有时未被绘制的 bug。 (If7782)
- 在 ContentDrawScope 中创建了 onDrawBehind API,以与 Modifier.drawBehind 的命名约定匹配。 (I4fc3a, b/171955269)
- 增加了对相机距离的支持,以补充图层 API 上的 3D 转换 rotationX/rotationY。 (I40213, b/171492100)
- 添加了不带回调的 SelectionContainer (Ibfadb)
- ExperimentalSubcomposeLayoutApi 注解已被移除。SubcomposeLayout 现在可以在不添加 @OptIn 的情况下使用 (I708ad)
- FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 包 (Ied2e7)
- 移除了 drawShadow() 修饰符中的不透明度,因为它令人困惑。 (I82c62, b/171624638)
- MeasureResult 已移出 MeasureScope。 (Ibf96d, b/171184002)
- 一些与布局相关的符号已从 androidx.compose.ui 移至 androidx.compose.layout.ui。 (I0fa98, b/170475424)
- 移除了弃用的 FocusState2 (I686cb, b/168686446)
- ZIndexModifier 现在是内部的 (I1808b, b/171493718)
- 更新了 Size 参数上的 lerp 方法的返回类型,使其返回非空 Size,以避免不必要的装箱。 (Ib0044)
- 添加了 TestMonotonicFrameClock,用于测试依赖 Compose 的 MonotonicFrameClock 的代码,以使用 kotlinx-coroutines-test 的 runBlockingTest 等待合成帧事件 (I4402f)
- 移除了 GestureScope.localToGlobal (I15299, b/171462785)
- 添加了
onAllNodesWithSubstring
查找器 (I81dd7, b/171462889) - androidx.ui.test 模块已弃用。请迁移到 androidx.compose.ui.test 和 androidx.compose.ui.test.junit4 (I452e8)
Bug 修复
- captureToBitmap 移至 captureToImage。 (I86385)
- foundation.Text 已弃用,并替换为 material.Text。有关不从主题中获取值的基本、无意见的文本 API,请参阅 androidx.compose.foundation.BasicText。 (If64cb)
- 更新 TextField 以接受 KeyboardOptions (Ida7f3)
- 将 KeyboardOptions 重命名为 ImeOptions (I82f36)
- 将 KeyboardType 和 ImeAction 移至 KeyboardOptions (I910ce)
- 添加了 provideDefault 作为提供环境的替代方案,它可用于指定只有在尚未提供环境值时才会设置的环境值。 (Id6635, b/171024925)
- BaseTextField 已弃用。请改用 BasicTextField。 (I896eb)
- 引入 ui-test-junit4 模块 (Ib91f8)
relativePaddingFrom
已重命名为paddingFrom
。添加了paddingFromBaseline
修饰符,作为方便指定布局边界到文本基线的距离的方法。 (I0440a, b/170633813)- LaunchedTask 已重命名为 LaunchedEffect,以与 SideEffect 和 DisposableEffect API 保持一致。不允许使用不带 subject params 的 LaunchedEffect,以鼓励最佳实践。 (Ifd3d4)
- 引入了 resources composable,它在配置更新时重新合成。 (I6387c, b/167352819)
- Recomposer 现在需要在构造时提供 CoroutineContext (Ic4610)
- 当应用了多个
Modifier.zIndex()
时,将zIndex
值相加。之前第一个会生效。 (Ic514c, b/170623936) - 对内部 SlotTable 实现的更改,不应影响公共 API。 (If9828)
- 添加了键盘自动更正 IME 选项 (I57b8d)
- androidx.ui.test 移至 androidx.compose.ui.test (I9ffdb)
- 从公共 API 中移除了 KeyboardOptions.toImeOptions。 (Ic2e45)
外部贡献
- 禁用内部工件 androidx.compose.ui:ui-text-android 的发布 (Ib93fa)
版本 1.0.0-alpha06
2020 年 10 月 28 日
androidx.compose.ui:ui-*:1.0.0-alpha06
已发布。 版本 1.0.0-alpha06 包含这些提交。
API 变更
- Recomposer 现在是 CompositionReference,也是有效的合成父级。现在在更少的地方需要显式 Recomposer。 (I4036f)
- 弃用 VectorPainter,转而使用 rememberVectorPainter,以更好地表明可组合 API 内部利用“remember”在合成之间持久化数据。 (Ifda43)
- 更新了 Modifier.drawWithCache API,以将 ContentDrawScope 作为接收器作用域公开,而不是 DrawScope,以便为实现提供重新排序绘图命令的能力。这对于混合/着色用例非常有用,其中内容像素必须首先渲染,才能正确应用相应的混合模式算法。 (Ie7ec8)
- 将 SimpleContainer 移到 PopupTestUtils.kt (I78c57)
- ConsumedData 不再是数据类。详情请参阅 https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219 (I1737f)
- 修复了 RTL 手柄位置。 (I6e1e0)
- 重构 DrawScope 和 ContentDrawScope 为接口而不是抽象类
- 创建了 DrawScope 的 CanvasDrawScope 实现
- 重构了 DrawScope 的实现以改用 CanvasScope
- 创建了 DrawContext 以封装 DrawScope 的依赖项
- 移除了 DrawScope 上已弃用的方法 (I56f5e)
- 重大更改:从
PointerInputFilter.onPointerEvent(...)
中移除了返回值,因为指针事件中唯一可以更改的值是消耗数据。现在,您无需从PointerInputFilter.onPointerEvent(...)
返回数据,而是可以直接修改传入的 PointerEvents 的消耗数据。 (I6acd0) - MeasureScope 和 IntrinsicMeasureScope 被制成接口。 (I1a087, b/170461665)
- AlignmentLine 的合并功能已隐藏。 (I9da1a, b/170612900, b/170611568)
- 添加了在组合修饰符中指定检查器信息的能力 (Idee08, b/163494569)
- 在选择菜单中添加了“全选”选项 (Ief02b)
- 更新了 DrawTransform.rotate 以接受默认的中心枢轴参数,以匹配文档。
- 更新了 DrawScope.rotateRad,以接受用于枢轴点的 Offset,以匹配其他转换方法。
- 弃用了 DrawScope.rotateRad 的重载,该重载接受浮点数作为枢轴的 x 和 y 坐标。
- (Iffcbb, b/170434992)
Bug 修复
- 针对 androidx 启用了 API lint 检查 MissingGetterMatchingBuilder (I4bbea, b/138602561)
- 添加测试。 (I6b8ae)
- 在 ComposeTestRule 中启用转换;从 ComposeTestRule 中移除启用闪烁光标的选项。 (If0de3)
- 添加了 KeyboardCapitalization IME 选项 (I8ac38)
- 在 CoreTextField 中添加了单行键盘选项 (I72e6d)
- 将 SimpleContainer 移到 PopupTestUtils.kt (I65c3e)
- 将 Radius API 重命名为 CornerRadius,以更好地表达其在 Compose 中的使用方式。更新了文档以指示负角半径将钳制为零。 (I130c7, b/168762961)
- 通过继续将 MotionEvents 发送到其 onTouchEvent 返回 false 的子 Android Views(ACTION_DOWN 除外)来改进 Android 互操作性。 (I94c5a, b/170320973)
- Box 被内联化为函数。 (Ibce0c, b/155056091)
外部贡献
- 支持
AnnotatedString.capitalize
和AnnotatedString.decapitalize
的不同区域设置 (I4aa7f)
版本 1.0.0-alpha05
2020 年 10 月 14 日
androidx.compose.ui:ui-*:1.0.0-alpha05
已发布。 版本 1.0.0-alpha05 包含这些提交。
API 变更
- 添加了用于指定检查器信息的 DSL (Ic9a22)
- 将 LongPress 移至 Text。 (Iff2bc)
- 实验性 Modifier.pointerInput 挂起输入修饰符 (Ia77d2)
- 添加了复制/粘贴/剪切辅助功能操作 (I6db4f)
- AndroidOwner 的公共构造函数已移除 (Iacaef)
- 弹窗和对话框现在从父窗口继承 FLAG_SECURE。还添加了明确配置此项的选项 (I64966, b/143778148, b/143778149)
消耗数据现在是可变的。此外,调用进行消耗的扩展函数现在不再返回新的 PointerInputChange,而是修改提供的 PointerInputChange。
这是使 PointerEvent 数据可变的两个步骤中的第一步,以便其他指针数据不能由用户代码编辑。第二步将是移除
PointerInputFilter.onPointerEvent(...)
的List<PointerInputChange>
返回类型。 (Id067e)禁用 Text 中的选择,并提供一个 Demo。 (Ie7e97)
将 onGloballyPositioned 设为内联函数 (I15830)
OnPositionedModifier 已重命名为 OnGloballyPositionedModifier,onPositioned() 已重命名为 onGloballyPositioned()。 (I587e8, b/169083903)
向 Owner 添加了 hasPendingMeasureOrLayout 属性,指示 Owner 是否有任何待处理的布局工作。 (I3d9f8, b/169038599)
添加了以编程方式清除焦点的 API (Ie1dc2, b/161487952)
移除了
PointerInputFilter.onPointerInput(...)
。应改用PointerInputFilter.onPointerEvent(...)
。 (I6f04a)Size 的更改
- 移除了 Size.getFlipped
- 移除了 Size.rem
- 移除了 Size.truncDiv (Ief44d, b/169790720)
作为内联类哨兵值标准化的一部分,将 Color.Unset 重命名为 Color.Unspecified,以与其他内联类保持一致。 (I97611, b/169797763)
引入了 TextOverflow.None。当 overflow 为 None 时,Text 将不再处理溢出,并将其实际大小报告给 LayoutNode。 (I175c9, b/158830170)
AnnotatedString.Builder.addStringAnnotation 中的 scope 参数已重命名为 tag,以保持 API 一致性。 (I7c8cb)
Bug 修复
- LazyColumn/Row 的滚动性能通过在每次滚动时减少子合成的工作量而得到改善。为 Composition 类添加了新的 hasInvalidations() 方法。Recomposer 的 hasPendingChanges() 方法已重命名为 hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- 更新了 Size.Unspecified 参数,使其为 Float.NaN 而非 Float.POSITIVE_INFINITY。更新了 Painter 实现,以检查 Size.Unspecified 以及非有限 Size。 (I95a7e)
- 自定义布局中 place() 调用的顺序现在定义了子项的绘制顺序 (Ibc9f6)
- 支持 AnnotatedString 到 SpannableString 的转换,以实现可访问性。 (Ief907)
- 添加了 Android 类存根,这些类在旧平台上可用,以尽可能避免使用反射。 (Ia1790)
- 修复了:如果软件键盘的显示导致应用平移,指针输入坐标将不正确的问题。 (Ic4cec, b/163077821)
版本 1.0.0-alpha04
2020 年 10 月 1 日
androidx.compose.ui:ui-*:1.0.0-alpha04
已发布。 版本 1.0.0-alpha04 包含这些提交。
API 变更
- 添加了 OwnerScope 以允许在布局和绘制观察作用域不再有效时收集它们。 (Ic4cf8)
- 添加了 OnRemeasuredModifier 和 onSizeChanged(),分别用于在内容布局重新测量和大小更改时接收回调。 (I657cf, b/154108792)
- 添加长按语义操作 (I6281b, b/156468846)
- 将 FocusManager 设为私有。 (I7872f)
更新了实现以创建专用的 DrawCacheModifier 实现,而不是在 DrawModifier 上添加可选属性。
更新了各种方法的文档 (Ibd166)
将 TextRange 内联以避免对象创建。 (Id034b)
PlacementScope#parentWidth 和 PlacementScope#parentLayoutDirection 不能再从自定义布局的放置块中读取。 (Icc1ae, b/168295623)
将 AccessibilityScrollState 添加到语义属性。 (Ifeda9)
引入了 Modifier.drawWithCache,以支持创建绘图对象,该对象可有条件地重新创建依赖于尺寸/状态信息的依赖项。 (I376dc)
ParagraphConstraints 已移除。现在 Width 直接传递给 Paragraph。 (Ica712)
Bug 修复
- 更新了许多图形 API
- 更新了缩放和旋转变换 API,以使用单个 Offset 参数表示枢轴坐标,而不是 DrawScope 和 DrawTransform 中 x/y 坐标的单独浮点参数
- 移除了 Rect.expandToInclude 和 Rect.join 方法
- 更新了 Radius 文档,除了椭圆形外,还提到了椭圆形
- 添加了文档,指示内联 Radius 类的公共构造函数不应直接调用,而应通过其函数构造函数实例化 Radius 对象
- 移除了 RoundRect API 以查询 topRight、bottomRight、bottomCenter 等
- 弃用了 Rect.shift,转而使用 Rect.translate
- 移除了 RoundRect.grow 和 Rect.shrink API
- 将 RoundRect.outerRect 重命名为 Rect.boundingRect
- 移除了 RoundRect.middleRect/tallMiddleRect/wideMiddleRect 和 Rect.isStadium 方法
- 将 RoundRect.longestSide 重命名为 RoundRect.maxDimension
- 将 RoundRect.shortestSide 重命名为 RoundRect.minDimension
- 将 RoundRect.center 更改为属性而不是函数
- 更新了 RoundRect 构造函数,以使用 Radius 属性而不是 x/y 半径值的单个参数
- 移除了假设原点为 0,0 的矩形的 Size API
- 添加了 Radius 的解构 API
- 迁移了各种 RoundRect 扩展函数,使其成为属性
- (I8f5c7, b/168762961)
- foundation.Box 已弃用。请改用 foundation.layout.Box。 (Ie5950, b/167680279)
- Stack 已重命名为 Box。之前存在的 Box 将被弃用,转而使用 compose.foundation.layout 中的新 Box。新 Box 的行为是在它有多个子项时将子项堆叠在一起——这与之前的 Box 不同,后者表现得类似于 Column。 (I94893, b/167680279)
- Box 装饰参数已弃用。如果您想在 Box 上进行装饰/填充,请改用修饰符 (Modifier.background, Modifier.border, Modifier.padding) (Ibae92, b/167680279)
- 更新了许多图形 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)
- 使用 @VisibleForTesting 注解了 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory,使其成为内部 API 并隐藏其 kdoc (I554eb, b/168308412)
- 从顶部移除了 SelectionContainer 以禁用默认选择并避免意外行为。可以专门使用 SelectionContainer 来包装需要可选择的内容。 (I8dfe0, b/158459594)
版本 1.0.0-alpha03
2020 年 9 月 16 日
androidx.compose.ui:ui-*:1.0.0-alpha03
已发布。 版本 1.0.0-alpha03 包含这些提交。
API 变更
- 移除了向前/向后滚动语义操作。在 AccessibilityRangeInfo 中添加了步骤。 (Ia47b0)
- 从
Owner
中移除了onInvalidate()
——OwnedLayer
处理无效化。 (Ica72b, b/162061312) 移除了 Size API 上使用 Offset 参数的运算符方法。这些操作的结果不明确,并且结果类型出乎意料。例如,size - offset 应该返回偏移量还是带有差值的尺寸结果?
还移除了 Size 类中已弃用的方法。 (Iec902, b/166514214)
Bug 修复
- 修复了 LazyColumn 的项目有时绘制不正确的问题,这在某些情况下也导致了崩溃。 (Ibcf17, b/163066980, b/165921895)
- DpConstraints 和使用它的 API 已被弃用。 (I90cdb, b/167389835)
- 将
createAndroidComposeRule
和AndroidInputDispatcher
从androidx.ui.test.android
移至androidx.ui.test
(Idef08, b/164060572) - 在布局 API 中,gravity 的用法始终重命名为 align 或 alignment。 (I2421a, b/164077038)
- 在 ComposeTestRule 上添加了 onNode 和其他全局方法,因为当前的全局方法将被弃用。 (Ieae36)
版本 1.0.0-alpha02
2020 年 9 月 2 日
androidx.compose.ui:ui-*:1.0.0-alpha02
已发布。 版本 1.0.0-alpha02 包含这些提交。
API 变更
- 移除了在 layoutnode 边界更改时通知所有者的回调。 (If654e, b/166106882)
- 增加了对矢量图形路径的 filltype 参数的支持,以根据 evenOdd 或 NonZero 路径填充规则支持形状切口。 (I43dd2)
- Uptime 和 Velocity 现在是内联类 (I48f4a)
- Duration 现在是内联类 (I565eb)
- 添加回调以在 layoutnode 边界更改时通知所有者。 (Ic40b3)
修复了 Rect 函数构造函数与 Offset 和 radius 创建 Rect 的顺序错误问题,该顺序为 left、right、top、bottom,而不是 left、top、right、bottom。
移除了 Rect 上已弃用的伴生方法,转而使用函数构造函数。
添加了测试以验证 Rect.kt 中的方法 (I08460, b/165822356)
Bug 修复
- 添加了 MutableRect,一个可修改的矩形。 (I71bd2, b/160140398)
- Matrix4 已被 Matrix 取代。vectormath 包的所有其他部分均已移除。 (Ibd665, b/160140398)
可组合函数的调用约定已更改。这是一个二进制重大更改。所有库都必须重新编译才能与此版本的 compose 编译器插件一起使用。
此更改不会创建源代码级别的重大更改,因为唯一更改的 API 是具有显式选择加入的编译器 API。 (I7afd2, b/158123185)
修复了将调度到 PointerInputFilter 可能导致 PointerInputFilter 同步移除时发生的崩溃。 (I58f25)
版本 1.0.0-alpha01
2020 年 8 月 26 日
androidx.compose.ui:ui-*:1.0.0-alpha01
已发布。 版本 1.0.0-alpha01 包含这些提交。
版本 0.1.0-dev
版本 0.1.0-dev17
2020 年 8 月 19 日
androidx.compose.ui:ui-*:0.1.0-dev17
已发布。 版本 0.1.0-dev17 包含这些提交。
API 变更
emitView
已弃用。如果可能,请改用AndroidView
在 Compose 中发出 View。请注意,将来将不支持直接组合 View 和 ViewGroup,除非它们是组合树中的叶节点,在这种情况下可以使用 AndroidView 实现。 (I29b1e, b/163871221)FocusState2
已弃用,并由FocusState
替换 (Ia8b79, b/160822876, b/160923332)- 弃用的 AndroidView 重载已被移除。 (I946b9, b/163802393)
- 自定义发出现在可以声明其一个或多个 setter 可以跳过并独立于发出重新组合。 (Ibbd13)
更改了 Vector 类,使其不再是数据类,因为合成时使用相同的对象实例。
为 VectorPainter 添加了 mutableStateOf 标志,以便在矢量内容更改时有条件地重新绘制。
重构了 VectorComponent 实例,使其成为 VectorPainter 的一部分,因为它在合成之间重复使用。
更新了 GroupComponent 和 PathComponent,使其名称字段可变 (Ieae45, b/151378808)
移除了
onChildPositioned
和OnChildPositionedModifier
。开发人员应改用子布局上的onPositioned
和OnPositionedModifier
。 (I4522e, b/162109766)Offset 已成为内联类 (Iaec70)
向 SelectionContainer 添加了 modifier 参数 (I4aada, b/161487952)
移除了已弃用的 FocusModifier (I0b4ba, b/160922116, b/160821157, b/162441435, b/160822875, b/160921940)
向
SemanticsPropertyKey
添加了mergePolicy
lambda。这可用于定义 mergeAllDescendants 语义合并的自定义策略。默认策略是如果父值已存在则使用父值,否则使用子值。 (Iaf6c4, b/161979921)Constraints 现在是内联类 (I88736)
添加了 FocusManager,它将通用焦点逻辑从 AndroidComposeView 中移出 (I528ef, b/161487952, b/162206799)
更新了 PointerEventPass 名称以适应 Alpha 发布。 (Ifda6f)
IntOffset 现在是内联类 (Iac0bf)
IntSize 现在是内联类 (I2bf42)
PlacementScope.placeAbsolute()
已重命名为PlacementScope.place()
,而之前的PlacementScope.place()
已重命名为PlacementScope.placeRelative()
。因此,PlacementScope.place()
方法将不再自动镜像从右到左上下文中的位置。如果需要此功能,请改用PlacementScope.placeRelative()
。 (I873ac, b/162916675)AlertDialog 现在使用 FlowRow 作为按钮 (I00ec1, b/161809319, b/143682374)
将一些测试工具设为非公共,因为它们不属于此处。将来会公开。 (I32ab1)
重构了指针输入代码的组织。 (Ie3f45)
弃用了 PxBounds,转而使用 Rect。更新了所有使用 Rect 的 PxBounds,并添加了正确的弃用/替换注解以协助迁移。 (I37038, b/162627058)
移除了弃用的 KeyEvent2。请改用 KeyEvent。 (Ied2d0, b/162097587)
KeyEvent 具有一个 unicode 属性,可用于获取由指定键和元键状态组合生成的 unicode 字符 (If3afc)
将 DelayUp 自定义事件和相关类设为选择加入 API,因为它很可能被更改。 (I56d6f)
移除了不再需要的 2 个 PointerEventPass。 (I3dd9d)
为 Paragraph.paint 添加参数 color、shadow 和 TextDecoration。此函数有助于避免不必要的 Paragraph 重建。 (I81689)
Bug 修复
- 移除了 TextField 中的 onFocusChanged 回调。请改用 Modifier.focusObserver。 (I51089, b/161297615)
- Modifier.drawBorder 已弃用。请改用 Modifier.border。Border 数据类已替换为 BorderStroke (I4257d, b/158160576)
移除了已弃用的 FrameManager 调用。
内部 compose API 已更改,以减少跟踪状态对象(例如
mutableStateof()
)的开销。 (I80ba6)VerticalScroller 和 HorizontalScroller 已移除。请改用 ScrollableColumn/Row。Modifier.drawBackground 已移除。请改用 Modifier.background (I73b0d, b/163019183)
修复了在 for 循环内部使用保存状态的某些内容时可能发生的崩溃。现在允许在 savedInstanceState() 中使用相同的键,UiSavedStateRegistry 的 API 现在已调整以满足此新要求 (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
state { ... }
可组合项现在已弃用,转而明确调用remember { mutableStateOf(...) }
以提高清晰度。这减少了整体 API 表面和状态管理概念的数量,并与用于类属性委托的by mutableStateOf()
模式匹配。 (Ia5727)将 RRect 重命名为 RoundRect,以更好地符合 Compose 命名模式。创建了与 RRect 相似的函数构造函数,并弃用了 RRect 函数构造函数。 (I5d325)
版本 0.1.0-dev16
2020 年 8 月 5 日
androidx.compose.ui:ui-*:0.1.0-dev16
已发布。 版本 0.1.0-dev16 包含这些提交。
API 变更
- OnChildPositioned 已弃用。请改用子节点上的 OnPositioned。 (I87f95, b/162109766)
- setViewContent 已弃用。应改用 setContent。 (I7e497, b/160335130)
- 添加了 AndroidViewBinding API,用于基于 ViewBinding 膨胀和组合布局资源。 (I081c6)
- KeyEvent2 被 KeyEvent 替换 (I2d770, b/162097585)
- 添加了 Alt 硬件键支持 (I9036b)
- FocusManager 已弃用。请改用 Modifier.focus()、Modifier.focusObserver() 和 Modifier.focusRequester()。 (I74ae4, b/162211322)
- loadVectorResource 支持 trimPath 属性 (I808fe)
- 将对话框移至 ui (I47fa6)
- 移除了不再需要的 2 个 PointerEventPass。 (I33ca7)
- 实现了 PointerInteropModifier,它提供接收 MotionEvents 并像 Android View 实现一样与 Compose 交互的能力。 (Ieb08c)
- 移除了已弃用的 tag 修饰符。请改用 layoutId。 (Idaa05, b/162023919)
- 已更新右到左支持的 API。已添加 LayoutDirectionAmbient,可用于读取和更改布局方向。Modifier.rtl 和 Modifier.ltr 已移除。 (I080b3)
- 支持矢量图形中的路径裁剪 (Ie16c9, b/158188351)
- 添加了 Modifier.layout(),允许方便地创建自定义布局修饰符 (I73b69, b/161355194)
- 添加了一个新的 AndroidView API 并弃用了现有 API。 (I5bcfd)
- Modifier.plus 已弃用,请改用 Modifier.then。'Then' 具有更强的排序信号,同时禁止键入
Modifier.padding().background() + anotherModifier
,这会中断链条且难以阅读 (Iedd58, b/161529964) - 添加 [Abstract]ComposeView View 子类,用于在 View 层次结构中托管 Compose 内容。 (I46357)
Row
和Column
现在是内联函数,显著减少了使用它们的开销。 (I75c10)- 增加了 SubcomposeLayout。它是一个低级原语,允许在测量期间组合子元素,如果我们想在测量稍后才可用的某些值用于子树组合,就可以使用它。例如,WithConstraints 不是使用 SubcomposeLayout 实现的。( I25cc8)
- 添加了
SemanticsNode.positionInRoot
以获取 SemanticsNode 相对于 Compose 层次结构根的位置(Icdf26, b/161336532) - MotionEvent 从 Android 传递到 Compose,然后再回到 Android。( I14be8, b/158034713)
- 移除了 dropdownPopup。( I00430)
- 修复了切口显示器上的弹出窗口位置。( Idd7dd)
- 添加了辅助功能操作以获取 TextLayoutResult (I9d6e6)
- 增加了 RemeasurementModifier。它允许同步重新测量布局。通常情况下,您不需要它,因为重新测量/重新布局是自动发生的,但我们在滚动期间的 LazyColumnItems 中使用了它。( I5f331, b/160791058)
- 移除了 getLineEllipsisOffset/getLineEllipsisCount。请改用 getLineVisibleEnd/getLineEnd/isLineEllipsized。( I85aa2)
- 为了最佳实践原因添加了一些标记/注解。( I66b20)
- 在 TextLayoutResult 中公开了更多行 API。( I79bd2)
- 内置的矢量转换器现在可以通过 Foo.VectorConverter 访问,用于转换内置单元。例如:Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter 等。( I3e273)
Bug 修复
- 处理了广泛的 API 修复( I077bc)
- 移除了未使用的 OffsetBase 接口
- 对齐 Offset 和 IntOffset 类以拥有一致的 API 表面
- 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
- 将 nativeCanvas 方法从 Canvas 接口移开,以支持消费者创建自己的 Canvas 实例
- 创建了存根 EmptyCanvas 类,以将 DrawScope 重构为非空参数而非 lateinit,并确保字段的非空性
- 将 ClipOp 枚举重命名为 PascalCase
- 将 FilterQuality 枚举重命名为 PascalCase
- 将 StrokeJoin 枚举重命名为 PascalCase
- 将 PointMode 枚举重命名为 PascalCase
- 将 PaintingStyle 枚举重命名为 PascalCase
- 将 PathFillType 枚举重命名为 PascalCase
- 将 StrokeCap 枚举重命名为 PascalCase
- 更新了 DrawCache 实现,不再使用 lateinit 参数
- 更新了 DrawScope,不再对 fillPaint 和 strokePaint 内部参数使用 lazy 委托
- 更新了 Image 可组合项,避免使用 Box 以减少开销
- 更新了 Outline 类以包含 @Immutable 注解
- 更新了 PathNode,使其每个路径指令都包含 @Immutable 注解
- 更新了 Vector 子组合,移除了冗余的相等性条件检查,因为 compose 已处理这些
- 弃用了 Rect 伴生构造方法,转而使用函数构造方法
- 更新了 Brush 类和函数构造函数,使其包含 @Immutable 和 @Stable API
- 更新了 VertexMode 枚举,使其采用 PascalCase 命名
- 更新了 DrawScope 的 selectPaint 方法,如果笔触参数发生变化,则有条件地覆盖其上的笔触参数
- 更新了 Size,添加了解构 API,将 UnspecifiedSize 重命名为 Unspecified,并移除了未使用的方法
- 更新了 compose BlendMode API 消耗,根据 API 级别正确映射 Android 框架 BlendModes 和 PorterDuff 模式。引入了 BlendMode#isSupported API,作为能力查询,以在使用 BlendMode 之前确定其在设备上是否受支持。( I0ef42)
- 为 Lazy 列表的 itemContent 参数添加了 LazyItemScope。它提供了修饰符来填充父项的最大尺寸,解决了当项目应填充视口而常规 Modifier.fillMaxSize() 不起作用(因为项目是在无限约束下测量的)的使用场景。( Ibd3b2, b/162248854)
- 移除了
SemanticsNodeInteraction.performPartialGesture
。请改用SemanticsNodeInteraction.performGesture
。( Id9b62) LazyColumnItems
已重命名为LazyColumnFor
。LazyRowItems
已重命名为LazyRowFor
(I84f84)foundation.shape.corner
包已扁平化为foundation.share
(I46491, b/161887429)- 将
AndroidComposeTestRule
重命名为createAndroidComposeRule
。( I70aaf) - 向
TextLayoutResult
添加了更多 API。( Id7e04) - Material
FilledTextField
已重命名为TextField
,基础TextField
已重命名为BaseTextField
,以便更容易发现和使用最简单的所需 API (Ia6242, b/155482676) - Modifier.drawBackground 已重命名为 Modifier.background (I13677)
版本 0.1.0-dev15
2020 年 7 月 22 日
androidx.compose.ui:ui-*:0.1.0-dev15
已发布。版本 0.1.0-dev15 包含这些提交。
依赖项更新
- 要使用 Compose 的
0.1.0-dev15
版本,您需要根据上面“声明依赖项”中显示的新代码段更新您的依赖项。
API 变更
- FocusModifier 已弃用,取而代之的是 Modifier.focus, Modifier.focusRequester, Modifier.focusObserver。FocusState 和 FocusDetailedState 已弃用,取而代之的是 FocusState2 (I46919, b/160822875, b/160922136)
- 添加了一个修饰符来观察焦点状态变化。( I05866, b/160924455, b/160923326)
- 添加了一个修饰符以请求焦点更改( I8dd73, b/161182057, b/160924778)
- 调整了工具栏菜单以正确显示复制、剪切、粘贴。( Id3955)
- 单值语义属性现在使用调用样式。例如,'semantics { hidden = true }' 现在写作:
semantics { hidden() }
。( Ic1afd, b/145951226, b/145955412) - 添加了 Modifier.focus,它取代了 FocusModifier。( Ib852a, b/160924778)
- 为 TextField Selection 添加了 FloatingToolbar。( Ie8b07)
- 为键盘输入相关 API 添加了实验性 API 注解( I53c0a)
- 为所有焦点相关 API 添加了实验性 API 注解( I53b24, b/160903352)
- 添加了 FocusState2,它将取代 FocusDetailedState (I0a3ba, b/160822595)
- 添加了 ExperimentalFocus,这是一个用于 Focus API 的 @OptIn 注解。( I1544b, b/160820961)
- 添加了一个 IntBounds 单元类,表示布局中的整数像素边界。PopupPositionProvider 的 API 已更新为使用它。( I0d8d0, b/159596546)
- Applier 现在需要一个 clear() 方法来处理组合的销毁( Ibe697)
- KeyEvent 已弃用,由 KeyEvent2 取代( I68730)
- 一个新的可选标志 useUnmergedTree 已添加到测试查找器中。( I2ce48)
- 将 LayoutNode 设置为实验性 API ( I4f2e9)
为各种内联类类型添加了 copy 方法,包括
- Offset
- Size
- Radius
- Motion
TransformOrigin
弃用了 Size.copy 伴生对象方法,转而使用实例 copy 方法(Ife290, b/159905651)
Popups、Dialogs 和 Menus 现在继承了上下文 MaterialTheme (Ia3665, b/156527485)
TextDirection 被重命名为 ResolvedTextDirection (I3ff38)
从 Layout() 函数的 measure 块中移除了布局方向参数。但是,布局方向通过 measure 作用域对象在回调中可用( Ic7d9d)
重构了 SelectionHandles 以实现复用。( I420e0)
Clickable 已移除。请使用 Modifier.clickable (I84bdf)
TestTag 和 Semantics 已删除。请改用 Modifier.testTag 和 Modifier.semantics (I15ff0, b/158841414)
在此更改之前,Compose 编译器插件会在 @Composable 函数内非平凡地拦截对构造函数的调用(如果存在 (I5205a, b/158123804)
Modifier.tag 已重命名为 Modifier.layoutId,以避免与 Modifier.testTag 混淆。( I995f0)
从 Placeable#get(AlignmentLine) 返回的对齐线 Int 位置现在是非空的。如果查询的对齐线缺失,将返回 AlignmentLine.Unspecified。( I896c5, b/158134875)
AndroidView 可组合项添加了一个修饰符参数。( I48a88, b/158746303)
Semantics() 已弃用。请改用 Modifier.semantics()。( I72407, b/158841414)
添加了 viewModel() 可组合项,它允许创建或获取已创建的 ViewModel,类似于它在 Activity 或 Fragment 中的工作方式( I5fdd1)
将 IntPx 的用法替换为 Int。将 IntPxPosition 替换为 IntOffset。将 IntPxSize 替换为 IntSize。( Ib7b44)
为了整合用于表示尺寸信息的类数量,将 PxSize 的使用标准化为 Size 类。这提供了内联类的好处,可以利用 long 类型打包 2 个浮点值来表示宽度和高度(以浮点数表示)。( Ic0191)
为了整合用于表示位置信息的类数量,将 PxPosition 的使用标准化为 Offset 类。这提供了内联类的好处,可以利用 long 类型打包 2 个浮点值来表示 x 和 y 偏移量(以浮点数表示)。( I3ad98)
作为大型重构工作的一部分,将各种 compose 类中 Px 类的使用替换为仅依赖 Dp 和基本类型作为像素参数。完全删除了 Px 类( I3ff33)
作为大型重构工作的一部分,将各种 compose 类中 Px 类的使用替换为仅依赖 Dp 和基本类型作为像素参数( I086f4)
作为大型重构工作的一部分,将各种 compose 类中 Px 类的使用替换为仅依赖 Dp 和基本类型作为像素参数( Id3434)
作为大型重构工作的一部分,将各种 compose 类中 Px 类的使用替换为仅依赖 Dp 和基本类型作为像素参数( I97a5a)
TestTag 现在已弃用。请改用 Modifier.testTag。( If5110, b/157173105)
ParentDataModifier#modifyParentData 的默认无操作实现已被移除 - 它等同于根本不实现该接口。( I0deaa)
之前弃用的 ScaleFit 已移除。请改用 ContentScale。( Ifbc5b)
作为大型重构工作的一部分,将各种 compose 类中 Px 类的使用替换为仅依赖 Dp 和基本类型作为像素参数( I19d02)
在 ui-material 中添加了 DropdownMenu 组件,这是一个 Material Design 菜单实现。( I9bb3d)
移除了已弃用的 LayoutTag(),请改用 Modifier.tag()。移除了已弃用的 Modifier.matchParent(),请改用 Modifier.matchParentSize()。( If8044)
作为大型重构工作的一部分,将各种 compose 类中 Px 类的使用替换为仅依赖 Dp 和基本类型作为像素参数( I57bff)
Modifier.semantics 已取消弃用,以允许在高级组件中使用。( I4cfdc)
整合了 CanvasScope 实现,现在只剩下 DrawScope 和 ContentDrawScope。将 CanvasScope 重命名为 DrawScope。更新了 DrawScope 以实现 Density 接口并提供 LayoutDirection。删除了 ContentDrawScope 中的 DrawScope 子类。Painter 和 PainterModifier 已更新为不再自行维护 RTL 属性,因为 DrawScope 已提供此功能,无需手动提供。( I1798e)
DoubleTapGestureFilter 现在在整个树中区分 SingleTapGestureFilter。( If92b1)
更新了 Alignment API 并添加了对绝对对齐的支持(在 Rtl 上下文中不会自动镜像)(I38cd3)
DrawLayer 修饰符 API 已更改:outlineShape 重命名为 shape 并具有 RectangleShape 默认值,现在是非空的;clipToOutline 重命名为 clip;clipToBounds 已移除,因为它与 clip == true 且 RectangleShape 相同( I7ef11, b/155075735)
更新了公开 Canvas 的高级 compose API,以公开 CanvasScope。这消除了消费者维护自己的 Paint 对象的需要。对于仍需要访问 Canvas 的消费者,他们可以使用 drawCanvas 扩展方法,该方法提供了回调以使用底层 Canvas 发出绘图命令。( I80afd)
WithConstraints 尾随 lambda API 已更改。现在它不再是两个参数,而是一个接收器作用域,除了约束和布局方向外,还在 Dp 中提供了 minWidth, maxWidth, minHeight 和 maxHeight 属性(I91b9a, b/149979702)
将 LayoutModifier2 重命名为 LayoutModifier。( Id29f3)
移除了已弃用的 LayoutModifier 接口。( I2a9d6)
Layout 和 LayoutModifier2 中的固有测量函数现在具有 IntrinsicMeasureScope 接收器,该接收器通过隐式传播的布局方向提供固有查询 API。( Id9945)
Layout 和 LayoutModifier 子项可以使用不同的布局方向进行测量。( Ibd731)
添加了新的 Modifier.zIndex() 来控制同一父布局中子元素的绘制顺序。DrawLayerModifier 上的 elevation 属性已重命名为 shadowElevation,并且不再控制绘制顺序。DrawShadow 的参数顺序已更改:elevation 现在是第一个参数,shape 是第二个参数,默认值为 RectangleShape。( I20150, b/152417501)
移除了 Owner 中的 onSizeChange 和 onPositionChange。( I5c718)
添加了 Constraints2,它是 Constraints 的副本,但只支持 Int 约束值而不是 IntPx。IntPx 将被移除,所有整数约束将被视为像素,就像 Android 一样。
- 还添加了 IntSize,它最终将取代 IntPxSize。( I4b43a)
使 Alignment 可用任意值实例化。添加了 1D Alignments。( Ia0c05)
alignToSiblings 现在接受 Measured 而不是 Placeable。( I5788d)
( I45f09, b/152842521)
- 将 ScaleFit 重命名为 ContentScale
- 将 ContentScale 从 ui-graphics 移动到 ui-core 模块,使其与 Alignment API 位于同一模块中。
- 将 FillMaxDimension 重命名为 Crop
- 将 FillMinDimension 重命名为 Fit
- 将 Fit 重命名为 Inside 以更好地匹配
- ImageView.ScaleType 等效项
- 添加了文档,表明 Crop 和 Alignment.Center 的组合实现了与 ImageView.ScaleType.CENTER_CROP 相同的结果,而 Fit 与 Alignment.Center 结合使用实现了与 ImageView.ScaleType.FIT_CENTER 相同的结果。Inside 与 Alignment.Center 结合使用实现了与 ImageView.ScaleType.CENTER_INSIDE 相同的结果。
绘制修饰符支持 Rtl。( I0aaf9)
发布了从 XML 膨胀 Android View 的 API。更多详情请参见 ViewInCompose 演示。( I42916)
改进了 DrawModifier API
- 将 draw() 的接收器作用域设为 ContentDrawScope
- 移除了 draw() 上的所有参数
- DrawScope 具有与原 CanvasScope 相同的接口
- ContentDrawScope 具有 drawContent() 方法( Ibaced, b/152919067)
为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。( Icacdd, b/152735784)
DrawLayerModifier 和 drawLayer() 现在默认将 clipToBounds 和 clipToOutline 设置为 false。( I0eb8b, b/152810850)
将 LayoutResult 重命名为 MeasureResult。( Id8c68)
添加了 LayoutModifier2,这是一个用于定义布局修饰符的新 API;弃用了 LayoutModifier (If32ac)
将 Modifier 的加号运算符替换为工厂扩展函数( I225e4)
添加了 translationX/Y 属性以支持偏移给定 Layer 的绘制命令显示列表。这对于响应动画或触摸事件移动内容非常有用。( I8641c)
为 Layer API 添加了 pivotX、pivotY 参数,以支持围绕图层上特定点的旋转和缩放( Icf7c3)
添加了 OnPositionedModifier 和 OnChildPositionedModifier,以替换 OnPositioned 和 OnChildPositioned 可组合函数。( I2ec8f)
添加了 LayerModifier,这是一个允许为布局添加 RenderNode 的修饰符。它允许设置剪裁、不透明度、旋转、缩放和阴影。这将取代 RepaintBoundary。( I7100d, b/150774014)
使布局方向从父布局节点传播到子节点。添加了布局方向修饰符。( I3d955)
Stack 组件支持从右到左的方向性( Ic9e00)
Compose 布局中对 Rtl 的初步支持( Ia5519)
Density 和 DensityScope 已合并为一个接口。现在您可以直接使用 DensityAmbient.current,而不是 ambientDensity()。将 withDensity(density) 替换为 with(density) (I11cb1)
更改了 LayoutCoordinates,使 providedAlignmentLines 成为 Set 而不是 Map,并让 LayoutCoordinates 实现 get() 运算符来检索值。这使得修饰符更容易修改集合中的一个或多个值,而无需为每个修饰符创建新集合。( I0245a)
LayoutCoordinates 不再具有 position 属性。在考虑 LayoutModifiers、旋转或缩放时,position 属性没有意义。相反,开发者应使用 parentCoordinates 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个的变换。
LayoutCoordinates 的 size 属性使用 IntPxSize 而不是 PxSize。布局使用整数像素大小进行布局,因此所有布局大小都应使用整数而不是浮点值。( I9367b)
Constraints 的 API 表面改进( I0fd15)
创建了 CanvasScope API,它包装了一个 Canvas 对象,以公开一个无状态的声明性绘图 API 表面。转换包含在其自己的接收器作用域内,并且尺寸信息也作用域到相应的内嵌边界。它不需要消费者维护自己的 Paint 状态对象来配置绘图操作。
- 添加了 CanvasScopeSample 并更新了演示应用程序以包含声明性图形演示( Ifd86d)
移除了未使用的 MaskFilter API,因为其使用受限,并且在大多数用例中未针对硬件加速进行优化( I54f76)
RectangleShape 从 androidx.ui.foundation.shape.* 移至 androidx.ui.graphics.* (Ia74d5, b/154507984)
将 API 中所有可为空的 Color 用法替换为不可为空的用法,并使用 Color.Unset 而非 null ( Iabaa7)
在 ImagePainter 中引入了额外的可选 rect 参数,以支持绘制底层 ImageAsset 的子部分( I0ea9e)
添加了 Unset Color 以表示未设置值,而无需对 Colors 进行装箱。( If901a)
添加了 Canvas.rotate 和 Canvas.scale 扩展方法,以使用可选的变换枢轴坐标。这些默认值是当前画布平移的左上角。
为了保持一致性,还将 Canvas.rotateRad 移至扩展方法( Ibaca6)
创建了 PixelMap API 以支持从 ImageAsset 查询像素信息。( I69ad6)
将 toFrameworkRect/toFrameworkRectF 重命名为 toAndroidRect/toAndroidRectF,以匹配 Compose 和其所基于的 Android 框架 API 之间对象转换的命名约定。还更新了这些 API 的文档( I86337)
添加了 VectorPainter API,以取代现有矢量图形的子组合 API。子组合的结果是一个 VectorPainter 对象,而不是 DrawModifier。弃用了之前的 DrawVector 可组合项,转而使用 VectorPainter。
将 Image(Painter) API 重命名为 PaintBox(Painter)。创建了 Vector 可组合项,其行为与 Image 可组合项类似,只是使用 VectorAsset 而不是 ImageAsset (I9af9a, b/149030271)
将 Image 重命名为 ImageAsset,以便更好地区分图像数据和即将推出的 Image 可组合项,该可组合项用于参与布局和绘制内容。_正文:在 android.graphics.Bitmap 上创建了扩展方法 Bitmap.asImageAsset(),用于创建 ImageAsset 实例,这对于将传统 Android 应用程序开发与 compose 框架结合起来非常有用( Id5bbd)
添加了 TextDirection.Content (I48f36)
添加了 TextDecoration.plus 运算符( I0ad1a)
Force
已从 TextDirectionAlgorithm 枚举值中移除( Icc944)TextDirectionAlgorithm 已重命名为 TextDirection (I75ce8)
为 TextField Selection 实现了 LongPressAndDrag。( I17919)
添加了 AnnotatedString.getStringAnnotations,它返回范围内所有注解。( I1fa00)
将 Locale 和 LocaleList 的包名从 androidx.ui.text 更改为 androidx.ui.intl (I8132c)
TextField 的光标具有闪烁动画( Id10a7)
API 更改:AnnotatedString(builder: Builder) 已重命名为 annotatedString(builder: Builder)。( Ia6377)
API 更改:AnnotatedString.Item 已重命名为 AnnotatedString.Range。( I2d44d)
将 AnnotatedString.Builder.addAnnotationString 重命名为 addStringAnnotation。( I5059e)
现在可以使用 SoftwareKeyboardController 隐藏/显示软键盘,该控制器通过 onTextInputStarted 回调提供( I8dc44, b/151860051)
为 (Text/Paragraph/Span)Style 添加了 plus 运算符,它委托给 merge() 函数。( Ia1add)
FontWeight.lerp 不再吸附。它仍然是一个数据类。( I521c2)
FontWeight 构造函数现在是公共的,它不再是数据类。( Id6b1f)
为 TextLayoutResult 添加了 getLineStart、getLineEnd、getEllipsisOffset 和 getEllipsisCount (Ibc801)
ui-text 模块已重命名为 ui-text-core (I57dec)
移除了未使用的 Size 类,因为 ui-geometry 模块中存在一个重复的 Size 类正在被使用。( I1b602)
添加了 AdapterList,这是一个滚动列表组件,它只组合和布局可见项目。目前已知的问题包括它仅支持垂直滚动,并且不能完全处理其子项发生变化的所有情况。( Ib351b)
为 Box 添加了 paddings、border、shape 和 background 参数( I05027, b/148147281)
Bug 修复
- 文本字段中的 onFocusChange 回调已重命名为 onFocusChanged (Ida4a1)
- VerticalScroller 和 HoriziontalScroller 已弃用。请使用 ScrollableColumn 和 ScrollableRow 以获得具有 Column/Row 行为和参数的内置体验,或者在您自己的元素上使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同样,ScrollerPosition 已弃用,取而代之的是 ScrollState'( I400ce, b/157225838, b/149460415, b/154105299)
runOnIdleCompose
重命名为runOnIdle
(I83607)- 为了更直观,一些测试 API 被重命名。所有 findXYZ API 都被重命名为 onNodeXYZ。所有 doXYZ API 都被重命名为 performXYZ。( I7f164)
- Compose UI 现在可以在 ViewGroup 内部组合,无需新的组合。请参阅 ViewInteropDemo 了解示例。( I9ab0b, b/160455080)
- 为 MutableVector 添加了 sortWith 和 removeRange (Icccf7)
- 实现了拖动选择句柄以更改 TextField 的选择。( I27032)
- 移除了包装 NativeShader expect 类的 Shader 内联类。将 NativeShader 重命名为 Shader。包装的 Shader 内联类没有为 API 表面添加任何有价值的东西,并且是一个内联类,因此直接使用 NativeShader 类。( I25e4d)
重构了 PainterModifier,使其不再根据给定约束和 ContentScale 参数提供缩放。Painter 的实现将根据其绘制到的 DrawScope 的给定大小自行缩放其绘制内容。
修复了 VectorPainter 的缓存位图尺寸为其默认尺寸而不是给定绘制尺寸的问题。
更新了 ImagePainter,使其自行缩放内容,而不是依赖 PainterModifier 代劳。( I6ba90)
添加了顶层 withFrameNanos 函数用于动画计时( Ie34c5)
@Untracked 注解已弃用。请替换为 @ComposableContract(tracked=false) (Id211e)
androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue 已弃用。使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项也已弃用。请改用 androidx.ui.input.TextFieldValue (I4066d, b/155211005)
修复了指针输入分派在分派过程中通过子组合移除 PointerInputFilters 时导致崩溃的问题。此问题现已修复。( I1f48b, b/157998762)
修复了指针输入分派在分派过程中通过子组合移除 PointerInputFilters 时导致崩溃的问题。此问题现已修复。( Iab398, b/157998762)
重构了 Radius 类,使其成为内联类。移除了伴生创建方法,转而使用函数构造函数,并带有默认参数,以便 y 轴上的半径与强制的 x 轴半径参数匹配。
更新了 DrawScope.drawRoundRect,使其接受一个 Radius 参数,而不是 x 和 y 轴上的 2 个单独的浮点半径值( I46d1b)
Recompose 可组合项不再是一个有用的抽象。大多数重组都应该通过 MutableState 赋值来发生。除此之外,建议您使用
invalidate
函数来触发当前作用域的重组。( Ifc992)作为大型重构工作的一部分,将各种 compose 类中 Px 类的使用替换为仅依赖 Dp 和基本类型作为像素参数( Iede0b)
更改了 Compose 编译器的代码生成策略。在此更改之前,Compose 编译器会转换对可组合函数的调用。通过此更改,我们现在转换可组合函数的主体,并(大部分)保持调用站点不变。
这意味着与 Compose 运行时通信的大多数逻辑发生在函数主体的开头,而不是在调用站点。
这应该是 Compose 所有用法的源代码兼容更改。大多数 Compose 用户无需因此更改而更新任何代码。
为了支持这项工作,所有可组合函数的 JVM 签名都已更改。接受单个参数的可组合函数被转换为接受 3 个参数的函数,额外参数是 Composer、一个“key”整数和一个用于通过调用传播元数据的位掩码整数。
Compose 现在还转换可组合函数的默认参数。它这样做时不会引入额外的合成默认重载函数本身,因此此更改将导致定义更少的函数。
此更改导致的已知有意行为更改
- 某些调用将跳过(而以前不会)
- 默认参数表达式中的可组合表达式现在被正确订阅和处理
这项工作包括一些优化: 1. 参数比较的结果通过调用图传播到其他可组合函数。这将导致运行时比较次数减少,减少槽表大小,并更多地跳过以前未跳过的可组合函数。 2. 在编译时确定为“静态”的参数不再进行比较或存储在运行时。这减少了比较次数并减少了槽表大小。 3. 函数主体的控制流结构用于最小化生成的组的数量。这减少了槽表大小并减少了运行时的工作量。 4. 如果函数体中未使用函数中未使用的分派和接收器参数,则不将其包含在确定函数可跳过性中。
大多数破坏性更改都是针对编译器直接针对的 API,Compose 的典型使用不会受到影响: 1. Composer::startExpr 已移除 2. Composer::endExpr 已移除 3. Composer::call 已弃用 4.
key
的非可变参数重载已移除。请继续使用vararg
版本。 5. Pivotal 注解已弃用。请使用key
作为替代。 6. ScopeUpdateScope::updateScope 已更改为预期 Function3 而非 Function1 7. restartableFunction 和 restartableFunctionN 已更新以包含额外的编译时参数(I60756, b/143464846)移除了已弃用的 LayoutAlign 修饰符。( I10877)
移除了 RepaintBoundary,转而使用 DrawLayerModifier (I00aa4)
Button、FloatingActionButton 和 Clickable 现在有一个单独的
enabled
参数。Button 上的一些参数已重命名或重新排序。( I54b5a)将 ButtonStyle 替换为不同的函数,并移除了文本(字符串)重载。有关使用信息,请参见更新的示例。( If63ab, b/146478620, b/146482131)
对 ambients API 的破坏性更改。有关详细信息,请参阅日志和
Ambient<T>
文档(I4c7ee, b/143769776)更改了默认 TextDirection 的行为,使其由 LayoutDirection 决定。即,如果 LayoutDirection 是 RTL,则默认 TextDirection 也将是 RTL。此前它是 TextDirection.ContentOrLtr/Rtl (I4e803)
Bug 修复:当字体粗细和字体样式在 AnnotatedString 上嵌套时,文本渲染不正确。( I77a9d)
向 Text() 添加了常用参数。如果您当前正在创建本地文本样式以传递少量这些参数,例如 Text(style = TextStyle(textAlign = TextAlign.Center)),您现在可以直接提供这些参数:Text(textAlign = TextAlign.Center) (I82768)
ui-android-text 模块已重命名为 ui-text-android (I68cbe)