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 版 |
---|---|---|---|---|
2024 年 9 月 4 日 | 1.7.0 | - | - | 1.8.0-alpha01 |
结构
Compose 是 androidx
中 7 个 Maven 组 ID 的组合。每个组包含一组目标功能子集,每个子集都有自己的一组发行说明。
此表解释了这些组,并链接到每一组发行说明。
组 | 描述 |
---|---|
compose.animation | 在他们的 Jetpack Compose 应用中构建动画,以丰富用户体验。 |
compose.compiler | 使用 Kotlin 编译器插件转换 @Composable 函数并启用优化。 |
compose.foundation | 使用现成的构建块编写 Jetpack Compose 应用,并扩展基础以构建您自己的设计系统组件。 |
compose.material | 使用现成的 Material Design 组件构建 Jetpack Compose UI。这是 Compose 的更高级别入口点,旨在提供与 www.material.io 中描述的组件相匹配的组件。 |
compose.material3 | 使用 Material Design 3 组件构建 Jetpack Compose UI,这是 Material Design 的下一个发展阶段。Material 3 包括更新的主题和组件以及 Material You 个性化功能,例如动态颜色,旨在与新的 Android 12 视觉风格和系统 UI 保持一致。 |
compose.runtime | Compose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。 |
compose.ui | Compose UI 的基本组件,用于与设备交互,包括布局、绘图和输入。 |
声明依赖项
要添加对 Compose 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读 Google 的 Maven 存储库 以获取更多信息。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项
Groovy
dependencies { implementation "androidx.compose.ui:ui:1.7.0" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.ui:ui:1.7.0") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
有关依赖项的更多信息,请参阅 添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的想法,请告知我们。在创建新问题之前,请查看此库中 现有问题。您可以通过点击星形按钮为现有问题添加您的投票。
有关更多信息,请参阅 问题跟踪器文档。
版本 1.8
版本 1.8.0-alpha01
2024 年 9 月 4 日
androidx.compose.ui:ui-*:1.8.0-alpha01
已发布。版本 1.8.0-alpha01 包含 这些提交。
版本 1.7
版本 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 之间在
NestedScrollSource
更改方面的一个行为不兼容问题,该问题发生在 1.7.0-alpha01 的早期阶段。
1.7.0-beta07 版本
2024 年 8 月 7 日
已发布 androidx.compose.ui:ui-*:1.7.0-beta07
。1.7.0-beta07 版本包含这些提交。
错误修复
- 文本输入相关的
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 版本包含这些提交。
错误修复
- 修复了更改软件键盘会导致
TextField
不接受来自新键盘的输入,直到焦点丢失并重新获得的问题。 - 修复了尝试持久化图层内容在使用
SurfaceView
内容渲染时会导致意外副作用的问题。
1.7.0-beta04 版本
2024 年 6 月 26 日
已发布 androidx.compose.ui:ui-*:1.7.0-beta04
。1.7.0-beta04 版本包含这些提交。
错误修复
- 避免在测量非常长的文本行(例如 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)
错误修复
- 将
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
中用于构造主题LinkAnnotations
和使用主题链接解析 HTML 的方法。取而代之的是,添加了一个TextLinkStyles
类,该类允许将链接样式作为参数传递给 Text 可组合项。(I31b93)
错误修复
- 修复了在事件期间动态添加指针输入修饰符时的其他用例 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) - 将
onClicked
重命名为onClick
,位于LinkInteractionListener
内。(Iaa35c) - 将
TextInclusionStrategy.isInside
重命名为isIncluded
。使Paragraph/MultiParagraph#getRangeForRect()
的返回类型为非空。(I51f26)
错误修复
- 修复了具有
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
的拖动和抛掷源被替换为UserInput
和SideEffect
,以适应这些源的扩展定义,这些定义现在包括动画(Side Effect)以及鼠标滚轮和键盘(UserInput
)。(I40579)ApproachLayoutModifierNode
和Modifier.approachLayout
现在已稳定,并添加了新的isMeasurementApproachInProgress()
和isPlacementApproachInProgress()
分别替换旧的isMeasurementApproachComplete()
和isPlacementApproachComplete()
。- 删除了已弃用的
intermediateLayout
修饰符。(I3e91c) - 将
GraphicsLayer#buildLayer
重命名为 record,以反映像RenderNode
和 Picture 这样的 Displaylist 支持的 API 的 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
) 和链接交互监听器。使用<a>
标签解析 HTML 标记的字符串时,该方法将为每个此类标签构建一个LinkAnnotation.Url
,并将样式对象和链接交互监听器传递给每个注释。(I7c977) LinkAnnotation
现在接受基于状态的样式参数和LinkInteractionListener
。将此注释添加到AnnotatedString
以获取超链接。通过传递focusedState
和/或hoveredState
,您可以定义链接在获得焦点和/或悬停时的视觉配置
。(I81ce4, b/139312671)ImeOptions.hintLocales
现在不再可为空。如果您想传递一个空的 Locale 列表,请使用LocaleList.Empty
。(Ic5bc4)
错误修复
- 优雅地处理错误/损坏的历史输入事件数据(忽略错误的偏移数据)。
- 修复了在活动指针输入事件流期间(例如,在悬停进入和悬停退出 [鼠标/触笔] 之间)动态添加指针输入修饰符之前添加另一个指针输入修饰符时出现的意外指针事件。
版本 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) - 使用官方 Android API (
ScrollCaptureCallback
) 实现了 Compose 滚动容器中长截图的实验性支持。此功能处于实验阶段,目前可能无法正确处理所有情况。因此,它目前默认处于禁用状态。要启用,请将ComposeFeatureFlag_LongScreenshotsEnabled
标志设置为 true。(I2b055, b/329296471)
API 更改
fun ClipEntry.getMetadata()
已更改为val ClipEntry.clipMetadata
。(I50155)- 删除了
ClipboardManager.getClipMetadata
和ClipboardManager.hasClip
函数。请使用clipEntry.getMetadata()
读取当前剪贴板条目的元数据。如果ClipboardManager.getClip
的结果为 null 或不为 null,也请检查它以了解剪贴板是否具有当前剪贴板。(I50498) - 现在您可以将
GraphicsLayer
对象传递到placeable.placeWithLayer()
函数中(I1b22f) ClipboardManager.setClip
现在接受 null 以能够清除剪贴板。(I7d2e9)- 添加了资源 ID 以帮助隐藏在构建工具中用作实现细节的视图(I99531)
- 添加了
GraphicsLayer#toImageBitmap
暂停方法以支持将位图内容渲染到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
允许在其他地方渲染 Composable 内容,并且在内容预计将在不同场景中渲染的动画用例中很有用。
API 更改
GraphicsLayer.draw(Canvas)
不再是公共 API。请改用DrawScope.drawLayer(GraphicsLayer)
扩展函数来绘制图层。(I7a7c0)- 将
restrictedConstraints()
分割为两个方法:fitPrioritizingWidth()
和fitPrioritizingHeight()
(I6d7fd) - 引入了
HardwareCanvas
存根以供 Android L 使用(I1c3b5, b/288494724) - 更新 Compose 框架以公开一个
GraphicsContext
组合本地,同时更新 Owner、DelegateableNode
和drawWithCache
修饰符实现以公开对GraphicsContext
的访问,以便进行范围访问,当修饰符被拆除时,它会自动清理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)
错误修复
- 添加了
GraphicsLayer
预期/实际 API 定义以支持捕获和重播绘图命令,并可选地进行合成视觉效果和变换。引入GraphicsContext
接口以包含图形依赖项,包括GraphicsLayer
实例的创建和管理。(I4a8d6, b/288494724) - 修复了与一维焦点搜索的互操作性问题,其中焦点会卡在嵌入在其他视图中的
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 和 overflow 支持,以及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
和androidx.compose.foundation.text2
包下的相关 API 已移动到androidx.compose.foundation.text
。(I9f635)- 添加了一个新的
ApproachLayoutModifierNode
API 以支持在显式修饰符节点中创建自定义接近逻辑。还添加了一个新的实验性DeferredTargetAnimation
API,用于在实例化时目标未知的动画。(I60745) - 新的
Path
API 用于查询路径的方向并从Path
中提取轮廓。(I63d04) - 添加了
PathHitTest
和Path.contains(Offset)
以检查Path
是否包含特定点。(I3b218) TextLayoutResult
现在公开了getLineBaseline(lineIndex)
方法。这允许读取文本任意行的基线,此外还有现有的便利属性firstBaseline
和lastBaseline
。(Ide4e8,b/237428541)- 添加了仅比较两个
AnnotatedStrings
的注释的方法。(I32659)
错误修复
- 修复了
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)
错误修复
- 修复了一个 a11y 错误,该错误允许在选中时单击非选项卡和非单选按钮。(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
,以支持任意内容(如图像)。 - 将
DeviceConfigurationOverride
API 添加到ui-test
,以允许在本地覆盖被测内容的行为,例如指定可用大小、语言环境、布局方向、字体缩放或主题。
版本 1.6
版本 1.6.8
2024 年 6 月 12 日
androidx.compose.ui:ui-*:1.6.8
已发布。版本 1.6.8 包含 这些提交。
错误修复
- 修复了字体缩放小于最低定义表时字体缩放的不一致性。在这种情况下,我们现在在线性 1x 缩放和最低定义表之间进行插值,以便字体大小随着缩放的增加而单调递增。(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 包含 这些提交。
错误修复
- 修复了一个罕见的
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 包含这些提交。
错误修复
- 修复了与
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 包含这些提交。
错误修复
- 优化了矢量图形实现,通过最大程度地减少额外的重新组合来提高性能。
版本 1.6.0-beta03
2023年12月13日
androidx.compose.ui:ui-*:1.6.0-beta03
已发布。版本 1.6.0-beta03 包含这些提交。
新功能
- 现在,
LayoutCoordinates
可以在节点未分离的情况下分离。在 Compose 布局检查器中防止这种情况发生。(If693)
错误修复
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
以用Float表示。更新文档以更清楚地说明maximumFlingVelocity
的单位。(I8adc7) onDragAndDropStart
在DragAndDropModifierNode
工厂中已重命名为acceptDragAndDropTransfer
。acceptsDragAndDropTransfer
已添加到dragAndDropTarget
修饰符中以从拖放会话中接收。如果对拖放会话感兴趣,此lambda将返回一个可行的DragAndDropTarget
。处理拖放事件的其他lambda已被此替换。已添加一个DragAndDropTarget
工厂函数以从拖放会话中接收。(Iebf3a)删除
DragAndDropInfo
作为类型,DragAndDropModifierNode.drag
现在采用transferData
、装饰尺寸和拖动装饰DrawScope
lambda的参数。DragAndDropTarget
具有特定拖放事件的方法,而不是单个抽象方法。onDragAndDropEvent
在DragAndDropModifierNode
的工厂函数中已重命名为onDragAndDropStart
,以更好地传达提供的DragAndDropTarget
仅对给定的拖放会话有效。DragAndDropEventType
已被删除。(I645b1)将
PlatformTextInputModifierNode.runTextInputSession
重命名为establishTextInputSession
。(I03cd0)改进可遍历节点 API 名称,使它们更容易理解。(Ia4474)
用
TextSubstitution
替换OriginalText
。(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)
错误修复
SoftwareKeyboardController.show()
如果未聚焦任何文本编辑器,将不再显示软件键盘。(I2165a,b/301477279)- 现在将忽略在同一 Compose View 中未收到按下事件的硬件键向上事件。(Ib37b4,b/305518328)
- 添加对
ArcLine
中扫描渐变的渲染器支持。(I4d5bb) - 为
PageSize.Fixed
实现 equals 和 hashcode。(Ie3ede,b/300134276) - 修复与窗口插入更改的二进制兼容性问题。(Iee695)
- 删除 Material3 芯片/按钮的 Material core 层,因为微基准测试显示在没有它的情况下性能更好。(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
。因为这些类是内联类,所以通过用 Unspecified 替换可空类型,我们避免了基本类型装箱。已更新TextStyle
和段落样式中的构造函数、getter 和其他方法,以接受上述参数作为非空类型。(I4197e,b/299490814) - 添加
GoogleFont
重载以从 XML 中读取GoogleFont
。(If8f59) - 将
LoremIpsum
PreviewParameterProvider
设为开放类。(I41bf5,b/266918816,b/300116360)
错误修复
FontFamilyResolver
现在使用Dispatchers.Main
进行缓存管理协程。(Ie8dd9)AndroidViewBinding
现在同步移除布局中包含FragmentContainerView
膨胀的Fragment
实例,作为其onRelease
的一部分,通过使用commitNow
(而不是之前使用的commit
),从而修复了 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)
错误修复
- 优化了 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) - 向
PreviewScreenSizes
定义中添加showSystemUi=true
。(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) - View 组件(如
ScrollView
和RecyclerView
)中的抛掷速度上限为ViewConfiguration.ScaledMaximumFlingVelocity
。Compose 现在包含其自己的maximumFlingVelocity
版本,现在适用于Draggable
。(Ibf974) - 添加了支持平台拖放 API 的初始脚手架。(If84ce)
- 将
deviceId
添加到RotaryScrollEvent
中。(Iba3bf) - 更新了
ui-tooling
设备 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 预览的有效可穿戴设备。(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
Composable 函数和接口现在是稳定的。(Ifb2ce) - 添加了对配置
privateImeOptions
的支持。(Idb772)
错误修复
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 更改
- 添加了一个服务定位器接口,可以由 Composition 的实现者实现,它允许 Composition 的实现将服务查找委托给另一个组合委托,委托给原始 Composition。这不应该直接调用,用于在运行时启用创建实验性 API,这些 API 可以从组合器(例如 UI 模块)的包装版本中找到。(I296b9)
- 完全重新设计了
PlatformTextInput*
API。(I6c93a,b/274661182,b/267235947,b/277380808) SoftwareKeyboardController
和LocalSoftwareKeyboardController
不再是实验性的。LocalSoftwareKeyboardController
现在也成为一个合适的CompositionLocal
。(I4c364)LookaheadLayout
和LookaheadLayoutScope
已经弃用了一些版本,现在已移除。替换 API 是LookaheadScope
,它可以与任何布局一起使用。(I12ac3)- 添加了
SemanticsNodeInteraction.requestFocus
,作为一种更方便且易于发现的测试中请求焦点的方法。(Ie8722) - 添加了用于注册全局断言的实验性 API,供将来测试框架使用。(I12d77)
错误修复
AndroidView
的update
回调的第一次调用现在将延迟到视图附加后,而不是在引入AndroidView
的组合应用时运行。这修复了一个错误,即如果立即由效果更改了读取的状态,则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
includeFontPadding
现在在 Compose 中默认为 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)
错误修复
- 添加了
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 包含这些提交。
错误修复
- (b/301209788)
TextField
有时会在聚焦和输入韩语输入时错误地应用以前的命令,导致字符丢失。
版本 1.5.2
2023 年 9 月 27 日
androidx.compose.ui:ui-*:1.5.2
已发布。版本 1.5.2 包含这些提交。
错误修复
- 添加了解决方案,用于修复从后台线程访问可访问性滚动 API 时发生的崩溃。
- 修复了未附加的节点被添加到语义树中的问题。
版本 1.5.1
2023 年 9 月 6 日
androidx.compose.ui:ui-*:1.5.1
已发布。版本 1.5.1 包含这些提交。
错误修复
- 修复了文本字段在
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 包含这些提交。
错误修复
- 修复了在
movableContentOf()
内部使用SubcomposeLayout
时发生的崩溃。
版本 1.5.0-beta03
2023 年 6 月 28 日
androidx.compose.ui:ui-*:1.5.0-beta03
已发布。版本 1.5.0-beta03 包含这些提交。
错误修复
- 添加了
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 以启用使用android.graphics.Paint
实例在 Compose 中。
错误修复
- 添加了
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) - 稳定了许多包括
Brush
、DrawStyle
、TextMotion
、DrawScope.drawText
、Paragraph.paint(Brush)
、MultiParagraph.paint(Brush)
的 Text API。(I2f740, b/261581564, b/261581931, b/261561245) PlatformTextStyle.includeFontPadding
已取消弃用。我们最初的意图是删除该字段,但是反馈表明开发人员需要此配置选项。因此,从该字段中删除弃用 (I98e96, b/277703184)- 添加了公共
TextRange.constrain
方法。(I97912) AnnotatedString
中的UrlAnnotation
现在可以通过诸如TalkBack
之类的可访问性服务打开。(If4d82, b/253292081)- 为文本字段添加了
InsertTextAtCursor
语义操作。(I11ed5) LineHeightStyle.Alignment(topRatio)
构造函数已提升为稳定 API。(I79c32, b/261565383)TextMeasurer
和相关 API 现在不再是实验性的。(I74647, b/261581753)- 向文本编辑器节点添加了
PerformImeAction
语义操作以调用 IME 操作。(Ic606f,b/269633506) PlatformTextInput
API 对于 Android 来说不再是实验性的。(I668eb)Enum.valueOf
的 value 参数名称已更改(Ia9b89)- 枚举 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)
错误修复
- 删除了指针速度跟踪中的多次分配(I26bae)
- 减少了布局和指针输入管理中的分配(I5333a)
- 优化 Vector 内存使用和首帧渲染(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
进行 View 重用。(I00b1e,b/276802519) - 更新了 Compose Path API 以支持倒带操作,以支持频繁路径操作并更快地重复使用。(I7b797)
- 添加了具有完整参数列表的优化
TextStyle.merge(...)
。(Iad234, b/246961787) - 稳定了许多包括
Brush
、DrawStyle
、TextMotion
、DrawScope.drawText
、Paragraph.paint(Brush)
、MultiParagraph.paint(Brush)
的 Text API。(I2f740, b/261581564, b/261581931, b/261561245) PlatformTextStyle.includeFontPadding
已取消弃用。我们最初的意图是删除该字段,但是反馈表明开发人员需要此配置选项。因此,从该字段中删除弃用 (I98e96, b/277703184)
错误修复
- 修复了在对话框(不是由
Dialog
可组合项创建的对话框)内文本字段不显示键盘的回归问题。(I82551,b/262140644)
版本 1.5.0-alpha03
2023 年 4 月 19 日
androidx.compose.ui:ui-*:1.5.0-alpha03
已发布。版本 1.5.0-alpha03 包含这些提交。
新功能
SubcomposeLayout
在LookaheadScope
中的新默认行为:没有条件插槽的SubcomposeLayouts
(例如TabRow
、Scaffold
、BoxWithConstraints
等)现在可以很好地与前瞻动画配合使用。
API 更改
- 新的默认
intermediateMeasurePolicy
重用前瞻传递中的测量策略,允许没有条件插槽的SubcomposeLayout
子类型(如Scaffold
、TabRow
和BoxWithConstraints
)默认情况下与前瞻配合使用。(Id84c8) - 为 Android 窗口创建的 recomposer 现在只会阻止对
withFrameNanos
的调用,而不是在收到ON_STOP
通知时阻止所有合成。这意味着与已停止的活动关联的窗口将继续为数据更改重新合成,但动画或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) - 添加了一种为更复杂的
Modifier.Node
实现实例化SuspendingPointerInputModifierNode
的方法。(Ic4933) AnnotatedString
中的UrlAnnotation
现在可以通过诸如TalkBack
之类的可访问性服务打开。(If4d82, b/253292081)- 添加了一个 API,用于在硬件键发送到软键盘之前拦截它们。(I4f4c6,b/186800395)
- 为文本字段添加了
InsertTextAtCursor
语义操作。(I11ed5) - 与文本相关的测试操作(例如
performTextInput
)现在将使用语义操作直接请求焦点,而不是点击字段。(I6ed05)
错误修复
- 文本测试操作现在要求文本字段处于启用状态。(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 包含这些提交。
错误修复
- 修复了当
AndroidView
与某些 Modifier 一起使用时可能无法正确布局的问题。(I4dc77,b/274797771) - 修复了二维焦点搜索中影响
DropDown
菜单的错误(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 包含这些提交。
错误修复
- 修复了
AndroidView
无法正确重用其 Modifier 的问题,这可能会导致意外行为和崩溃。(Ib67ee,b/275919849) - 修复了在对话框(不是由
Dialog
可组合项创建的对话框)内文本字段不显示键盘的回归问题(I82551,b/262140644)
版本 1.4.1
2023 年 4 月 5 日
androidx.compose.ui:ui-*:1.4.1
已发布。版本 1.4.1 包含这些提交。
错误修复
- 修复了
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) - 在 Surface 上添加了
IsContainer
语义属性。此属性将在以后的更改中使用,该更改将根据元素(如 Surface)的语义含义确定遍历顺序。(I63379) - 添加了一个新的辅助功能角色
DropdownList
。这可用于在聚焦android.widget.Spinner
时复制TalkBack
的行为。(I177e5,b/236159001) - 您现在可以使用
PlatformTextStyle(emojiSupportMatch)
选择性地禁用单个段落的 Emoji 支持处理。(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
参数。它允许在组合中的节点被丢弃并在兼容的方式下重用时重用 View 实例。这对于 View 的LazyRows
和LazyColumns
特别有用。(I3f10d,b/230099236) - 引入了新的低级
PlatformTextInputAdapter
API,用于构建直接与平台 API 交互的自定义文本输入实现。(I58df4)
错误修复
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)
错误修复
- 改进了辅助功能焦点顺序算法,例如顶部/底部栏更常分别先/后读取(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
添加为ComposeTestRule
的实验性 API,将waitUntil
API 扩展为接受任何匹配器和任何节点计数。有关更多文档,请参阅ComposeTestRule
。(Ifa1b9,b/226934294) - 将
Font.MaximumAsyncTimeout
重命名为Font.MaximumAsyncTimeoutMillis
。(I07af5) - 删除了
GoogleFont.Provider.AllFontsListUri
,并在 ktdoc 中链接到它。(I16f29)
错误修复
- 添加了
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) - 在 Surface 上添加了
IsContainer
语义属性。此属性将在以后的更改中使用,该更改将根据元素(如 Surface)的语义含义确定遍历顺序。(I63379) - 添加了一个新的辅助功能角色
DropdownList
。这可用于在聚焦android.widget.Spinner
时复制TalkBack
的行为。(I177e5,b/236159001) - 您现在可以使用
PlatformTextStyle(emojiSupportMatch)
选择性地禁用单个段落的 Emoji 支持处理。(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
内使用时未正确延迟波纹的问题。 - 更新了抽屉和表单,以便在手势可能变成滚动事件时正确延迟按下。
- 将
CompositingStrategy.Always
重命名为Offscreen
,以指示graphicsLayer
将始终渲染到中间缓冲区中(I47dc1) - 具有多个内容插槽的布局重载现已稳定(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) - 将 EmojiCompat 添加到 Compose(Ibf6f9, b/139326806)
- 为动态颜色支持添加了新的壁纸参数到
@Preview
(I9f512)
错误修复
- 快照应用通知现在在
Recomposer
完成应用更改后发送。(Iad6c0, b/222093277) - 在
captureToImage
中引入了更改,以允许捕获多窗口屏幕截图。这对于使用 Compose 弹出窗口的屏幕截图测试很有用。(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
的当前大小。这对于根据 Composable 大小计算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 对象转换为 Compose Paint。(Ica91b) - 添加新的
FontFamily.Resolver.resolveAsTypeface
以在 Android 上使用。(I8950b) - 添加
ToolingState
以允许工具更改 Composable 的内部状态(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
将电视设备添加到预览中(Ie15cd)
版本 1.3
版本 1.3.3
2023 年 1 月 11 日
androidx.compose.ui:ui-*:1.3.3
已发布。 版本 1.3.3 包含以下提交。
错误修复
- 修复了在 Android 9 上 Activity 保存 Compose View 状态时有时发生的崩溃问题。(I0b755, b/260322832)
版本 1.3.2
2022 年 12 月 7 日
androidx.compose.ui:ui-*:1.3.2
已发布。 版本 1.3.2 包含以下提交。
错误修复
- 更新为使用 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 以来重要更改
- 新的实验性 API 套件
LookaheadLayout
(启用之前无法实现的动画行为) - 新的实验性 API 套件
Modifier.Node
(比Modifier.composed
性能更高的替代方案) - 改进了窗口内嵌套支持。
- 在 LazyLists 中为方向键和硬件键盘添加了焦点支持。
- 对话框和弹出窗口中支持的最大海拔高度已降至 8dp(对于某些自定义设计系统而言,此更改会导致行为中断 - beta01 版本说明中给出了原因)
- 许多 次要的、不破坏 API 的改进
- 许多错误修复和性能改进
版本 1.3.0-rc01
2022 年 10 月 5 日
androidx.compose.ui:ui-*:1.3.0-rc01
已发布。 版本 1.3.0-rc01 包含以下提交。
API 更改
- 添加了新的实验性 API 连字符,以支持在 Text 中自动断字 (Iaa869)
错误修复
DeviceFontFamilyName
字体默认情况下不会配置wght
和ital
变体设置,而是使用加载的Typeface
的平台设置。 (Ia7a6d, b/246989332)- 修复了
LazyColumn
内存泄漏 - 当修饰符被重用时,onModifierLocalsUpdated
没有使用默认值被调用 (b/230168389)
版本 1.3.0-beta03
2022 年 9 月 21 日
androidx.compose.ui:ui-*:1.3.0-beta03
已发布。 版本 1.3.0-beta03 包含以下提交。
API 更改
- 添加了自定义 Text 中换行方式的选项。 (I86907)
- 将
TextMeasurer.measure
方法中的size:IntSize
参数更改为constraints: Constraints
,以支持最小宽度约束。 (I37530, b/242707525)
错误修复
- AndroidX Activity 的
BackHandler
API 现在可以在Dialog
可组合项中使用。 (I35342)
版本 1.3.0-beta02
2022 年 9 月 7 日
androidx.compose.ui:ui-*:1.3.0-beta02
已发布。 版本 1.3.0-beta02 包含以下提交。
API 更改
- 添加了 Layout 的一个实验性重载,它接受一个包含多个可组合内容 lambda 表达式的列表,这允许对放入不同内容 lambda 表达式中的可测量对象进行不同的处理 (Ic1b4e)
实验性 Focus 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
实例并在 LayoutNodes
上协调其行为的层已进行了重大重构。目前,这是一个不影响 Compose 中众多修饰符任何公共 API 的重构,可以将其视为仅实现更改。尽管如此,由于各种原因,这是一个重要的更改。 (Ie4313)
更改摘要
添加的实验性 Modifier.Node
API 提供了一个抽象,允许在将与布局节点的生命周期一起保留的实例上维护状态,并且将为每个布局节点和每个使用生成它的相应 Modifier.Element
分配。
广义地说,此抽象提供了一种替代机制来生成有状态的修饰符,而无需依赖 Modifier.composed
API 的机制。
风险
此更改与之前的版本严格二进制兼容,并且旨在在可观察行为方面尽可能地向后兼容。也就是说,此重构几乎没有接触到 Compose 的几个子系统,并且 *行为很可能发生了我们测试中未涵盖且尚未发现和修复的方式的变化*。
请谨慎升级到此版本。如果您认为这破坏了您的某些功能,请告知我们。
实验性 API
已添加各种实验性 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。此更改会影响材料和 UI 自定义对话框和弹出窗口。进行此更改是为了缓解 Android S 以下版本上的辅助功能错误,并确保这些窗口内的辅助功能服务能够与对话框或弹出窗口内的内容进行交互。
仅当您创建具有高于 8dp 的海拔高度的自定义对话框或弹出窗口实现时,才会受到此更改的影响。请考虑降低对话框或弹出窗口的海拔高度。如果您需要选择退出此新行为,请考虑使用所需的设置海拔高度创建您自己的对话框或弹出窗口。不建议这样做,因为辅助功能可能会受到负面影响,并且开发人员需要确保对话框或弹出窗口的底部部分可供辅助功能服务交互和阅读。
API 更改
- 修复了
painterResource
在配置更改时不会更新的问题 (I58e73, b/228862715) rememberTextMeasurer
不再接受FontFamily.Resolver
、Density
或LayoutDirection
参数。请使用TextMeasurer
构造函数为这些参数提供自定义值。 (Ia1da3)- 添加了
DialogProperties.decorFitsSystemWindows
属性,以允许 Dialog 支持WindowInsets
。 (I57742, b/229378542) - 将字体构造函数移回原始 Kotlin 文件以保留二进制兼容性。与上一个稳定版本没有区别。 (Ieb2f3)
- 从几个 equals 定义中删除了不必要的运算符 - 这没有影响。 (I6c309)
FontVariation.Setting
是一个密封接口,以允许未来的钳位 API。 (I11021, b/143703328)- 将
CompositionGroup.findParameters
添加到SlotTree.kt
。这允许工具检索CompositionGroup
的参数,而无需解析整个插槽表。 (I124fe)
版本 1.3.0-alpha03
2022 年 8 月 10 日
androidx.compose.ui:ui-*:1.3.0-alpha03
已发布。 版本 1.3.0-alpha03 包含以下提交。
API 更改
LayoutCoordinates.findRootCoordinates()
现在是公开的 (I7fa37, b/204723384)- 添加了实验性 API 以获取
PlacementScope
中的LayoutCoordinates
。这使开发人员能够了解当前布局的位置,以便相对于其位置放置子项。 (I5482b, b/238632578) - 添加了
LayoutCoordinates.transformFrom
以获取从一个LayoutCoordinates
到另一个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 现在是密封接口 Paragarph。没有使用 Paragraph 子类的用例,如果您发现此更改对您有影响,建议您与我们联系。 (If5247, b/239962983)
- 从
PlatformTextStyle
和LineHeightStyle
中删除了实验性注释。(I64bef) - 弃用
TextInputService.show|hideSoftwareKeyboard
。请在应用代码中使用SoftwareKeyboardController
,在 IME 管理代码中使用TextInputSession
。(I14e4c,b/183448615) - 为现有动画类型添加新的 API(I26179)
错误修复
- 在 SDK 33 及更高版本上,为需要授予
POST_NOTIFICATIONS
权限的 API 添加了@RequiresPermission
。(Ie542e,b/238790278)
版本 1.3.0-alpha02
2022 年 7 月 27 日
androidx.compose.ui:ui-*:1.3.0-alpha02
已发布。版本 1.3.0-alpha02 包含这些提交。
API 更改
- 添加了一个新的属性
PointerInputChange#pressure
来检索压力。(I45a5e,b/205164819) - 添加了
rememberTextMeasurer
,以便在组合中轻松创建和记住TextMeasurer
实例。(I8d66e) Rect
、RoundRect
和MutableRect
现在支持 Kotlin 的in
语法来调用contains
函数。(Ie42b0,b/238642990)- 从
KeyInjectionScope
中删除了不必要的函数,因为它们可以使用 API 的更简单的部分轻松实现。已删除的函数包括pressKeys
、keysDown
和keysUp
。(I81d77) - 重构了
KeyInjectionScope
中的常量和参数名称,在这些常量和参数的单位为毫秒时,包含后缀“Millis”。(Iabef5) - 向
EditCommand
添加了toStringForLog()
方法,以帮助排除文本编辑问题。(I53354,b/228862731) - 在
DrawScope
上添加了drawText
扩展函数,提供了一种在可组合项和作用于DrawScope
(如Canvas
和drawBehind
)的修饰符上绘制多样式文本的方法。(I16a62,b/190787898) - 引入了一个名为
TextMeasurer
的新实验性 API,它允许进行任意文本布局计算,该计算会创建与BasicText
相同的结果,并且独立于 Compose 运行时。(I17101) - 向
SlotTree.kt
添加mapTree
。这允许工具检查SlotTree
,而无需像 asTree 那样首先进行内存复制。对于布局检查器,这使性能提高了大约 10 倍。(I5e113) - 将 Compose 预览更改为存储在二进制输出文件中,以便开发人员能够从库中编写和重用
MultiPreview
注释。(I85699,b/233511976)
错误修复
- 将
InputEventChange
事件添加到Velocity
跟踪器时,我们现在将考虑增量而不是位置,这将保证在所有情况下都能正确计算速度,即使目标元素移动也是如此。(Icea9d,b/216582726,b/223440806,b/227709803) - 修复了当存在注释时,
AnnotatedString.toUpperCase
导致的 NPE。(I0aca2,b/210899140)
版本 1.3.0-alpha01
2022 年 6 月 29 日
androidx.compose.ui:ui-*:1.3.0-alpha01
已发布。版本 1.3.0-alpha01 包含这些提交。
API 更改
- 新的
LookaheadLayout
支持在实际测量/布局之前进行预读传递。这允许在布局更改时进行预计算,同时允许后预读测量/布局使用预计算的大小/位置将大小和位置动画化到目标。(SubcomposeLayouts
尚不支持,但将在即将发布的版本中提供支持。)(I477f5) - 向
TextStyle
和SpanStyle
的 Brush 风格添加了可选的 alpha 参数,以修改整个Text
的不透明度。(Ic2fac,b/234117635) - 引入了
UrlAnnotation
注释类型和相关方法,以支持AnnotatedString
中的TalkBack
链接支持。(I1c754,b/231495122) - 将实用程序功能移动到运行时(I4f729)
错误修复
TextLayoutResult.getLineForOffset
不会抛出异常。(Idc5d6,b/235876324)
外部贡献
- 添加了一个新的 API
WindowInfo.keyboardModifiers
,用于在可组合函数中或通过 snapshotFlow 观察其状态(Icdb8a)
版本 1.2
版本 1.2.1
2022 年 8 月 10 日
androidx.compose.ui:ui-*:1.2.1
已发布。版本 1.2.1 包含这些提交。
错误修复
- 修复了检查器中的空指针异常(b/237987764)
- 修复了检查器中 remember 期间的类转换异常(b/235526153)
版本 1.2.0
2022 年 7 月 27 日
androidx.compose.ui:ui-*:1.2.0
已发布。版本 1.2.0 包含这些提交。
自 1.1.0 以来重要更改
焦点遍历改进
- 现在可以使用新的
BeyondBoundsLayout
核心 API 实现 Lazy 列表的焦点驱动滚动 FocusOrder
和FocusProperties
中的新行为自定义 API- 改进了使用物理键盘或电视遥控器的行为
- 现在可以使用新的
新的 API 用于
- 窗口内边距
- 手势驱动、无限和布局动画的核心原语
GraphicsLayer
功能,包括RenderEffect
许多错误修复和性能改进
版本 1.2.0-rc03
2022 年 6 月 29 日
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 日
androidx.compose.ui:ui-*:1.2.0-rc01
已发布。版本 1.2.0-rc01 包含这些提交。
API 更改
- 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 日
androidx.compose.ui:ui-*:1.2.0-beta03
已发布。版本 1.2.0-beta03 包含这些提交。
API 更改
- 添加了
pressKeyTimes
以及isCapsLockOn
等功能到KeyInjectionScope
。此外,该 API 现在支持鼠标和键盘组合注入模式,例如在按住元键的同时单击鼠标按钮。(I4c8da,b/229831515) - 添加了用于注入键盘事件的实验性支持。使用
performKeyInput
发送键盘事件,或在使用performMultiModalInput
进行多模式输入手势期间,通过MultiModalInjectionScope
的key
属性发送这些事件。有关 API 文档,请参阅KeyInjectionScope
。(Ic5000,b/229831515) - 添加了新的
GoogleFont.Provider.AllFontsListUri
,用于检索 Android 支持的 Google 字体的规范互联网源。 - 改进了在 Compose 中 GoogleFonts 加载失败时重新抛出的错误消息。(I0416c)
错误修复
- 在将
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日
androidx.compose.ui:ui-*:1.2.0-beta02
已发布。版本 1.2.0-beta02 包含这些提交。
API 更改
- 在其他预览类型中重用功能(I19f39)。
错误修复
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
已重命名为DisposeOnDetachedFromWindowOrReleasedFromPool
,以更好地反映何时发生处置,而不是仅仅何时不发生处置。(If15ca)。
版本 1.2.0-beta01
2022年5月11日
androidx.compose.ui:ui-*:1.2.0-beta01
已发布。版本 1.2.0-beta01 包含这些提交。
新功能
- 这是 1.2 的第一个 Beta 版本!
API 更改
- 添加了实验性的
BeyondBoundsInterval
,当自定义实现的LazyList
在可见边界之外布局项目时可以使用它(Ifabfb,b/184670295)。 Modifier.composed
的键控版本现在是稳定 API(Ie65e4,b/229988420)。- 简化了
rememberNestedScrollConnection
API 以使用组合本地获取当前视图信息(I67ca7)。 @ComposableTarget
注解和@ComposableTargetMarker
标记的注解现在可以在文件范围内使用@file
前缀。在文件范围内使用目标注解将导致编译器假设文件中所有可组合函数都旨在成为目标关联的应用器。例如,使用@file:UiComposable
声明所有@Composable
函数都针对 Compose UI 应用器。需要针对另一个应用器的函数必须为所需的应用器显式提供目标标记注解。(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
,但目前不提供任何桌面特定的运行函数。可以像这样(Android 示例)将测试从
ComposeTestRule
迁移到ComposeUiTest
。@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)。将
Brush
添加到TextStyle
和SpanStyle
以提供一种使用渐变颜色绘制文本的方法。(I53869,b/187839528)。LineHeightBehavior
的trimFirstLineTop
、trimLastLineBottom
属性更改为单个枚举:LineHeightTrim
。LineHeightTrim
具有由两个布尔值定义的 4 种状态的值:FirstLineTop
、LastLineBottom
、Both 和 None(Ifc6a5,b/181155707)。将
LineHeightBehavior
添加到TextStyle
和ParagraphStyle
。LineHeightBehavior
控制是否将行高应用于第一行的顶部和最后一行的底部。它还定义了在TextStyle(lineHeight)
提供的空间中的行对齐方式。例如,可以通过
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
获得类似于 CSS 定义的行为。trimFirstLineTop
、trimLastLineBottom
配置仅在includeFontPadding
为 false 时才能正常工作。(I97332,b/181155707)。PlatformParagraphStyle.lerp
和PlatformSpanStyle.lerp
函数已更改为顶级函数(I9a268)。
错误修复
PointerInputChange::copy
文档现在正确地说明它是一个浅拷贝。(I182f5)。- 当高度受限且无法容纳所有文本行时支持省略号(Ie528c,b/168720622)。
- 启用默认的
includeFontPadding
。可以使用TextStyle.platformTextStyle
属性关闭includeFontPadding
。在不久的将来,我们将更改默认行为,但在那之前,这使我们能够更好地集成行高改进(aosp/2058653)并解决TextField
裁剪问题。(I01423,b/171394808)。
外部贡献
MouseInjectionScope.scroll(delta = someDelta)
现在在 Android 上反转,如果我们垂直滚动(如果 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 的类,该类不允许在其中添加新项目。(Icd314)。- PointerIcon 现在是一个
@Stable
接口(I9dafe)。 - 在
PointerInputChange
中已弃用部分使用(向下或位置)。您可以使用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) - 段落和多段落指令将位置参数重新排序到可选参数之前。(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 类启用 View 和 Compose 之间的嵌套滚动互操作。这意味着 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)
错误修复
- 向 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()
应替换为与focusProperties()
结合使用的focusRequester()
修饰符。这允许修饰符具有更强的关注点分离。(I601b7)升级
RecyclerView
和Compose
现在将为将 Compose 视图作为子视图的 RecyclerView 带来更好的滚动性能。添加
ViewCompositionStrategy.Default
作为检索内置默认策略的一种方法。添加
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
,这是新的默认策略,并正确处理诸如 RecyclerView 之类的池化容器。(If7282)添加了使用 @Preview 注释注释类的支持,作为添加多预览功能的第一步。此类注释可用于注释 Composable 方法或其他注释类,然后可以将其视为间接使用给定的 @Preview 进行注释。(I12eff)
向 @Preview 的设备列表中添加了参考设备(I071c9)
错误修复
- 更新了矢量图形 API 以使用正确的可组合注释 @VectorComposable 而不是 @UiComposable(I942bc)
- 从
AnnotatedString.Builder.withStyle
中删除 crossinline(If84d5)
外部贡献
- compose-ui:向
GraphicsLayerScope
添加ambientShadowColor
和spotShadowColor
属性(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)- 更新了核心和 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)
错误修复
- 如果尝试在已存在内容时设置内容,
ComposeContentTestRule.setContent
现在将抛出IllegalStateException
。(I888a5,b/199631334) - 修复了在 Android 上从剪贴板读取时由剪贴板内容引起的崩溃。(I06020,b/197769306)
- 改进 RSB 滚动示例。(I6a596)
外部贡献
- 更新为使用 Kotlinx 协程 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
,允许在编译时报告何时调用可组合函数以针对它未设计为使用的应用器。在大多数情况下,Compose 编译器插件可以推断出这些注释,因此直接使用这些注释的情况应该很少。无法推断的情况包括创建和使用自定义应用器、抽象可组合函数(例如接口方法)、可组合 lambda 的字段或全局变量(本地变量和参数是推断的),或使用
ComposeNode
或相关的可组合函数时。对于自定义应用器,调用
ComposeNode
或ReusableComposeNode
的可组合函数需要为该函数以及任何可组合的 lambda 参数类型添加ComposableTarget
注解。但是,建议创建一个用ComposableTargetMarker
注解的注解,然后使用标记的注解代替直接使用ComposableTarget
。用ComposableTargetMarker
标记的可组合注解等效于一个ComposbleTarget
,其应用器参数为属性类的完全限定名。有关使用ComposableTargetMarker
的示例,请参阅anroidx.compose.ui.UiComposable
。(I38f11)Font(resId, ...)
现在在稳定 API 上接受 loadingStrategy。(Ief3d2)FontLoadingStrategy
现在是稳定 API。(I1ee35,b/174162090)在 Text 中支持异步字体加载(I77057,b/214587005)
添加用于将自定义
Font.ResourceLoader
转换为FontFamily.Resolver
的桥接 API。(Ia0060)
错误修复
- 提供的
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 的新调用进入组合,则状态和关联的节点会移动到新调用的位置。如果没有添加新的调用,则状态将永久删除,并通知 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.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)
错误修复
- 当文本字段获得焦点且显示键盘时,文本字段现在将保持在键盘上方,前提是软输入模式为
ADJUST_PAN
。(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
中添加了标识字段,用于在布局检查器中生成不变 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 包含这些提交。
错误修复
- 修复
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 以来重要更改
版本 1.1.0-rc03
2022 年 1 月 26 日
androidx.compose.ui:ui-*:1.1.0-rc03
已发布。 版本 1.1.0-rc03 包含这些提交。
错误修复
- 更新以支持 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 包含这些提交。
错误修复
- 修复了一个导致辅助功能滚动操作丢失的错误 (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) - 添加了允许用户整体使用 PointerInputchange 或检查其是否已被使用的新实验性 API。 (I2e59d)
- 在 UI 层添加了对鼠标滚轮事件的支持。 (Ia14eb, b/198214718)
- 添加了实验性的
Modifier.composed
重载,它们接受用于比较相等性和限定跳过优化的键。 (Ice799, b/205851704) ComposeNotIdleException
现在扩展自Exception
,而不是直接扩展自Throwable
。请注意,这意味着以前捕获Exception
的 catch 子句现在可能会捕获ComposeNotIdleException
,而以前不会。 (I9c217)
错误修复
- 修复了 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)
错误修复
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)
- 将
viewConfiguration: ViewConfiguration
添加到LayoutInfo
以允许使用者获取诸如长按超时等内容的正确值。 (I76ca6)- 将
viewConfiguration: ViewConfiguration
添加到InjectionScope
以允许测试根据诸如长按超时或触摸容差等内容调整输入注入。 - 更改了触摸和鼠标输入的长按和双击的默认持续时间,使其基于
InjectionScope.viewConfiguration
中的值。
- 将
- 基于包含 TextField 和 DropdownMenu 的 ExposedDropdownMenuBox 实现 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)- 将
flush()
和dispose()
添加到InjectionScope
。分别在您想要立即刷新所有排队的事件以及想要处置作用域时使用它们。 (Ifb73a) - 添加了
performScrollToNode(matcher: SemanticsMatcher)
,它将可滚动容器滚动到与给定匹配器匹配的内容。 (Ic1cb8) InjectionScope
现在实现了Density
,允许您在performTouchInput
及其朋友中轻松地在 px 和 dp 之间进行转换。 (I8fe1f)
错误修复
- 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)
- 将
density: Density
和layoutDirection: LayoutDirection
添加到LayoutInfo
中。这允许LayoutInfo
的使用者正确地解释LayoutInfo
中公开的尺寸和位置。 (I002f1) - 添加了对注入鼠标事件的实验性支持。使用
performMouseInput
开始发送鼠标事件,或在使用performMultiModalInput
进行多模态输入手势期间通过MultiModalInjectionScope
的Mouse
属性发送鼠标事件。有关可用 API 的文档,请参阅MouseInjectionScope
。 (Iaa4a8, b/190493367)
错误修复
- 修复了关于滚动的可滚动项(惰性和非惰性)的辅助功能支持 (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)。
- 更改了可检查功能的参数名称以匹配组合功能(I3a482,b/191017532)。
引入了
performTouchInput
和TouchInjectionScope
作为performTouchInput
和TouchInjectionScope
的替代,为其他模式(如鼠标)铺平了道路。TouchInjectionScope
与GestureScope
具有相同的方法,除了movePointerTo
和movePointerBy
,它们已分别重命名为updatePointerTo
和updatePointerBy
。所有其他方法都相同。TouchInjectionScope
的行为与GestureScope
几乎相同,但有两个小细节。- 在指针已移动但未发送移动事件的情况下发送按下事件时(换句话说,已使用
updatePointerTo()
,但未使用move()
,然后调用down()
),以前的实现将推进事件时间并在发送按下事件之前发送移动事件。新的实现仍然发送移动事件,但在这种特定情况下不会推进事件时间。 - 在指针已移动但未发送移动事件的情况下发送抬起事件时(与上述情况类似),以前的实现将推进事件时间并在发送抬起事件之前发送移动事件。新的实现既不这样做:指针的新位置将仅通过抬起事件反映。
最后,
TouchInjectionScope
引入了一种新方法currentPosition(pointerId: Int)
来获取给定指针的当前位置。(If1191,b/190493367)。- 在指针已移动但未发送移动事件的情况下发送按下事件时(换句话说,已使用
错误修复
- 允许裁剪将触摸目标边界扩展到裁剪区域之外,以满足最小触摸目标的要求。(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,以将模糊用例简化为更常用的剪辑标志和 TileMode 组合。大多数用例都涉及以下两种情况:让模糊内容在原始内容边界之外渲染,并使用透明黑色模糊这些边界之外的区域;或者将内容裁剪到内容边界,并为扩展到内容边界之外的模糊内核采样最接近的边缘。(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 支持,这在定义基于模糊的 RenderEffect 的边缘行为时很有用。(I7e8ed,b/166927547)。
performScrollToIndex
、performScrollToKey
、hasScrollToIndexAction
和hasScrollToKeyAction
现在是稳定的 API(I142ae,b/178483889)。- 添加了测试方法以获取裁剪后的边界。(I6b28e)。
错误修复
- 删除了 BlurredEdgeTreatment 中的 isBounded 方法,转而显式检查 shape 参数是否为空。(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)。
错误修复
- 更新了矢量图形 xml 解析,以支持在 VectorDrawable 上将 ColorStateList 作为根颜色色调属性。(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)。
错误修复
- 为了更好地支持绘制修饰符的链接,请确保 Modifier.paint 实现调用 drawsContent。以前,Modifier.paint 预计是修饰符链中的叶节点,但是,这样做会阻止它在组合容器(例如 box)上进行配置或在顶部添加其他装饰,例如
Modifier.paint().border()
。通过在绘制给定 painter 的内容后让 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 包含这些提交。
错误修复
- 修复了跟踪 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 包含以下提交。
错误修复
- 对话框现在遵循平台大小行为。将
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
,它允许您预览使用诸如rememberLauncherForActivityResult()
之类的 API 的 Composable,这些 API 依赖于该所有者存在。(Ib13d1,b/185693006) - Compose
@Preview
现在提供了一个LocalOnBackPressedDispatcherOwner
,它允许您预览使用诸如BackHandler
之类的 API 的 Composable,这些 API 依赖于该所有者存在。(Ia1c05,b/185693006)
错误修复
- 将
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)
错误修复
- 密钥常量目前为 @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
中指定。该文件每行指定一个规则,在本例中,规则是用于匹配库中方法或类的模式。这些规则的语法是用于使用adb shell profman --dump-classes-and-methods ...
时的人类可读 ART 配置文件格式的超集。这些规则采用两种形式之一来定位方法或类。方法规则将具有以下模式
<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 工件中。当然后构建包含这些工件的应用程序时,这些规则将合并在一起,合并后的规则用于构建特定于应用程序的紧凑二进制 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 和文本语义属性不再是单个值,而是列表。这使得可以合并它们,而不是连接。还提供了更好的测试 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。
错误修复
- 修复了 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)
错误修复
- LazyColumn/Row 现在将最多保持 2 个先前可见的项目处于活动状态(未释放),即使它们已被滚动出显示区域。这允许组件在需要合成新项目时重用活动子合成,从而提高滚动性能。(Ie5555)
TextGeomerticTransform
和TextDecoration
在AnnotatedString
上将按原样应用。(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)
错误修复
- 修复了
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)
错误修复
- 修复了当位于边缘的
LazyColumn
/LazyRow
项目在快速抛掷后定位不正确的问题 (Ie4d13,b/183877420) AndroidViewBinding
现在在AndroidViewBinding
从 Compose 层次结构中删除时,会正确删除通过FragmentContainerView
膨胀的片段。(Ib0248,b/179915946)AndroidViewBinding
现在在您的ComposeView
在Fragment
中时,会正确嵌套通过FragmentContainerView
膨胀的片段,从而修复了保存和恢复这些片段状态的问题。(I70eb0,b/179915946)- Compose ViewBinding 现在依赖于 Fragment
1.3.2
,并且现在在配置更改后始终显示通过FragmentContainerView
膨胀的片段。(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)
- 将以下
SemanticsMatchers
标记为 @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)
错误修复
- 强制执行对实验性 API 的公共使用的限制(I6aa29,b/174531520)
androidx.compose.ui:ui
不再依赖于 AppCompat 或 Fragment。如果您在应用程序中使用 ComposeView,并且您正在使用 Fragment 和/或 AppCompat,请确保您正在使用 AppCompat 1.3+ / Fragment 1.3+ - 这些版本是正确设置 ComposeView 所需的生命周期和保存状态所有者所必需的。(I1d6fa,b/161814404)- 修复了在导航组合的目的地内部使用
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) - 用于调整大小为固有大小的修饰符不再是实验性的。(I15744)
- MeasureBlocks 重命名为 MeasurePolicy,后者成为一个有趣的接口。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 修饰符,允许为辅助功能目的标记选项卡或单选按钮的集合(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() 中的滚动位置现在使用 Int 表示 (I81298)
FlingConfig 已重命名为 FlingBehavior,现在允许自定义悬停动画,而不是预定义的衰减。(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)
错误修复
- 添加了在 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 更改
- UiApplier 中已删除对 ViewGroups 的支持。已删除已弃用的 emitView 可组合函数。(Ifb214)
- Modifier.pointerInput 现在需要记住键来指示指针输入检测协程何时应为新的依赖项重新启动。(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)
- 使用 substring 作为参数的更好的子字符串测试 API (Icbe78)
- 添加了一个
Modifier.focusOrder()
,它接受 FocusRequester 而不指定自定义焦点顺序的 lambda。当我们只需要指定一个引用但不需要为可组合项指定自定义焦点顺序时,这很有用 (I4f52a, b/179180978) - ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(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 中添加了 expand 和 halfExpand (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)
- 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 工件现已弃用。MonotonicFrameClock 现在可以在 compose:runtime 中找到,AndroidUiDispatcher 可以在 compose:ui 中找到。( Ib5c36)
- Outline.* 类不再是数据类 ( I4879e, b/178001427)
- 删除了
view.captureToImage()
且未提供任何替代方案。( I7fcd2) - 引入了 ColorMatrix API 用于修改源内容的 rgb 值。重构了 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()。[抽象]ComposeView 现在默认为延迟创建的、窗口范围内的 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)
删除意外公开的 StringBuilder.deleteAt 函数 ( Id6ed9)
错误修复
- 放置在另一个组合的子级视图层次结构中的 ComposeViews 现在承载其祖先的子组合 ( I92883)
- 更新了 compose 的 imageFromResource API,以便在加载 ImageBitmap 对象时重用资源 drawable 缓存。( If3627, b/178751994)
版本 1.0.0-alpha11
2021 年 1 月 28 日
androidx.compose.ui:ui-*:1.0.0-alpha11
已发布。 版本 1.0.0-alpha11 包含这些提交。
API 更改
- 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)
- 类似于已存在的 AmbientLifecycleOwner 和 AmbientViewModelStoreOwner,添加了 AmbientSavedStateRegistryOwner ( 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)
- 向 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)
内容描述参数已添加到 Image 和 Icon 中。它用于向辅助功能服务提供描述 (I2ac4c)
移除 displaySize,因为它应该避免使用。通常最好使用 onRoot() 的大小或至少窗口大小。 (I62db4)
OnSizeChanged 之前报告的是布局内容的大小。现在它报告的是其在修饰符链中的位置处的大小。 (I36b78, b/177562900)
emit() API 及其所有重载已被弃用,并重命名为 ComposeNode。这些 API 与之前相同,只是为了遵循 Compose 的命名约定而更改了名称 (I4137b)
TextFieldValue 接受 AnnotatedString。但是,这只是一个 API 更改,多样式文本编辑尚未实现。
- 从 EditingBuffer 构造函数参数中移除
initial
。 (I326d5)
- 从 EditingBuffer 构造函数参数中移除
invalidate 和 compositionReference() 现在已弃用,建议使用 currentRecomposeScope 和 rememberCompositionReference 代替。 (I583a8)
AnnotatedString 更改为扩展自 kotlin.CharSequence。因此,length 和 subSequence 现在是实例函数,扩展函数已被移除。 (Iaf429)
RememberObserver 替换了 CompositionLifecycleObserver,CompositionLifecycleObserver 现在已弃用。
RememberObserver
是CompositionLifecycleObserver
的替代品,具有修改后的语义和重命名的方法。对于仅记住一次的对象,可以机械地更改为新的 API,这仍然是推荐的做法。但是,如果一个引用在一个组合中被记住多次,则会为每个引用调用onRemembered
,而onEnter
仅调用一次。如果对象在子组合中使用(例如WithConstraints
和Scaffold
),则onEnter
会被调用多次,这使得单个onEnter
调用的保证不可靠,并且已从RememberObserver
中移除。RememberObserver
添加了onAbandoned
,如果RememberObserver
实例从传递给remember
的回调中返回,但未在组合状态中记住,因此永远不会调用onRemembered
,则会调用此方法。如果异常在完成前终止组合或组合被丢弃(因为该状态正在为其生成组合的状态不再是当前状态或不再需要),则可能会发生这种情况。如果上面遵循单个引用建议的RememberObserver
实例正在跟踪外部资源,则onForgotten
和onAbandoned
都表示不再需要该资源。如果对象在onRemembered
中跟踪已启动的工作或已分配的资源,则可以忽略onAbandoned
,因为如果调用onRemembered
,则不会调用它。 (I02c36)弃用 2 个或多个 TextUnit 之间的算术运算。弃用 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)
在测试中利用 TestCoroutineDispatcher (I532b6)
将 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
可组合函数中来解决,以便在创建和初始化节点后延迟执行代码。 (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 的 Recomposers 的创建 (Ibebd8)
- 修改 Velocity 以具有组成部分和数学运算。 (Ib0447)
- 将
@ExperimentalTesting
重命名为@ExperimentalTestApi
,以与类似的实验性 api 注解保持一致 (Ia4502, b/171464963) - 将 Color.useOrElse() 重命名为 Color.takeOrElse() (Ifdcf5)
- 移除未使用的 DpInverse、DpSquared 和 DpCubed 类。 (I4d62b)
- Constraints#satisfiedBy 已重命名为 isSatisfiedBy。 (I9cf5c)
- 添加一个回调,在布局节点边界更改时通知 Owner。 (I72fd1)
- 为具有 Unspecified 常量的内联类添加了 isSpecified、isUnspecified 和 useOrElse。 (I93f7b, b/174310811)
扩展 [Abstract]ComposeView API 以允许回收基于 Compose 的视图,在其后再次创建之前处置其组合。添加用于安装和发现窗口范围内的 Recomposers 和 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 以将 Selectable 更新通知给 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)
错误修复
- Recomposer 现在公开了一个其当前状态的 Flow,允许监视其活动以及关联效果的活动。(Ifb2b9)
- 现在可以通过 keyEvent.nativeKeyEvent 访问原生 keyEvent(I87c57,b/173086397)
animate()
现在已替换为animateAsState()
,后者返回State<T>
而不是T
。这可以提高性能,因为失效范围可以缩小到读取 State 值的位置。(Ib179e)- 添加了语义角色 API 并将 Role 作为参数添加到可点击、可选和可切换的 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)
- 自动填充 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()
。Applier 使用
insertTopDown()
或insertBottomUp()
将节点插入到它正在编辑的树中,具体取决于哪种方法性能更好。某些树(例如
LayoutNode
和View
)自下而上构建的效率远高于自上而下构建。在此更改之前,需要一个插入堆栈来实现自下而上构建,该堆栈需要复制到每个需要自下而上构建以提高性能的 Applier。通过此更改,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)
错误修复
- 偏移修饰符中的 Lambda 现在返回 IntOffset 而不是 Float。(Ic9ee5,b/174137212,b/174146755)
从公共 API 中删除了 SlotTable、SlotReader 和 SlotWriter。这些之前被标记为 InternalComposeAPI。现在它们是 compose 模块的内部内容。
添加了 CompositionData 和 CompositionGroup 作为 ui-tooling API 的替代方案,用于提取组合信息。这些是公开的,但不打算在 ui-tooling API 之外使用,因为它们提供了 ui-tooling API 解释的原始信息(I31a9c)
重构了 ShaderBrush,以便在绘制环境的大小信息可用时延迟创建着色器实例。这对于在组合时定义占据可组合项完整绘制边界的渐变很有用,而无需实现自定义 DrawModifier 实现。
已弃用渐变函数构造函数 API,转而使用 Gradient 对象上的工厂方法。(I511fc,b/173066799)
已弃用 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)
<T>
已从 SubcomposeLayout 声明中删除。您现在可以在不指定类型的情况下使用它。(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 用于检查宿主窗口是否处于焦点状态,以及一个提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2a,b/170932874)
- 更新了 TransformOrigin API,使其使用解构语法返回
pivotFractionX
和pivotFractionY
作为component1
和component2
(If43c4,b/173586560) - 添加了 lint 检查,用于检查可组合 lambda 参数命名和位置,确保与 Compose 指南保持一致。此外,根据 lint 检查和指南,将一些使用
children
作为其尾随 lambda 名称的 API 迁移到content
。(Iec48e) - 添加了 API 用于检查在分发按键事件时是否按下了 Alt、Ctrl、Meta 或 Shift 修饰键。(I50ed9)
- 添加了一个新的
Modifier.drawLayer()
重载。它在新的 GraphicsLayerScope 上接受一个 lambda 块,您可以在其中定义图层参数,从而在状态发生变化时跳过重新组合和重新布局。DrawLayerModifier 现在是内部的,准备将其逻辑迁移到 LayoutModifier 的placeable.placeWithLayer()
方法中(I15e9f,b/173030831) - 弃用以
Ambient
作为后缀命名的 Ambient,并将其替换为以 Ambient 为前缀的新属性,遵循其他 Ambient 和 Compose API 指南。(I33440) - 将
androidx.compose.ui.text.Typeface
移动到androidx.compose.ui.text.font.Typeface
(Ic2b81) - Semantics 参数 mergeAllDescendants 重命名为 mergeDescendants。(Ib6250)
- 新的拖动手势检测器挂起指针输入 API,包括方向锁定。(Icef25)
- 将 VectorAsset 重命名为 ImageVector,并将 VectorAsset.Builder 重命名为 ImageVector 的内部类,以符合 API 指南。添加了 VectorAssetBuilder 的类型别名以链接到 ImageVector.Builder 以实现兼容。(Icfdc8)
- 将 ImageAsset 和相关方法重命名为 ImageBitmap。(Ia2d99)
- 为 PlacementScope 的 place() 添加了 zIndex 参数,因此 Modifier.zIndex() 现在可以作为 LayoutModifier 使用,并且任何自定义布局都可以在放置块中为其子元素设置 zIndex(I711f7,b/171493718)
- 将基础语义属性移动到 ui(I6f05c)
- 弃用 place(Offset) 和 placeRelative(Offset)。改为使用带整数偏移量的重载。(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)
在 foundation 中添加了 Modifier.focusable。使用它可以为组件添加可聚焦行为,并具有正确的语义和可访问性。(I41eb9,b/152525426,b/162865824)
在 AnimationClockTestRule 中提供方法和属性的默认实现,这些方法和属性可以委托给它的
clock
(I7ea3d,b/173399709)AndroidComposeTestRule 现在可以接受自定义活动启动器(Ib8288,b/153623653,b/154135019)
TextLayoutResult.getLineVisibleEnd 已弃用。作为替代,TextLayoutResult.getLineEnd 现在有一个新的参数 visibleEnd。(I73282)
更新了 TextFieldValue API
- 使 TextFieldValue.composition 成为只读
- 删除了对无效选择范围抛出的异常(I4a675,b/172239032)
支持用于语音合成引擎的 TtsAnnotation。(I54cc6)
用于在协程中运行动画的新 API(Ied662)
错误修复
- Box 的对齐参数重命名为 contentAlignment。(I2c957)
- offsetPx 修饰符重命名为 offset。它们现在接受 lambda 参数而不是 State。(Ic3021,b/173594846)
- 为 TextInputService#onStateUpdated 添加了 resetInput 参数(I3e8f5,b/172239032,b/171860947)
- 添加了 lint 检查,用于检查可组合函数中的 Modifier 参数。此 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 以执行非均匀缩放,将 src 范围拉伸以完全占据目标。
- 添加了运算符方法,以便使用 Size 参数计算 ScaleFactor 参数。
- (Ic96a6,b/172291582)
- 添加了用于创建 Alignment 的 BiasAlignment 和 BiasAbsoluteAlignment 工厂。(Iac836,b/169406772)
- 允许开发人员强制清除焦点。(I90372)
- 修复了一个导致 Compose 内部 View 的海拔高度未绘制的错误。(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)
错误修复
- captureToBitmap 已移动到 captureToImage。(I86385)
- foundation.Text 已弃用,并替换为 material.Text。对于一个不依赖主题值的简单、无约束的文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
- 更新 TextFields 以接受 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 的一致性。为了鼓励最佳实践,不允许使用没有主题参数的 LaunchedEffect。(Ifd3d4)
- 引入了 resources 可组合项,该项在配置更新时会重新组合。(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(...)
的返回值,因为在指针事件中唯一可以更改的值是消耗数据。现在,您可以直接修改传入的 PointerEvents 的消耗数据,而不是从PointerInputFilter.onPointerEvent(...)
返回数据。(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)
错误修复
- 为 androidx 启用了 MissingGetterMatchingBuilder 的 API lint 检查 (I4bbea,b/138602561)
- 添加测试。(I6b8ae)
- 在 ComposeTestRule 中启用转换;从 ComposeTestRule 中删除启用闪烁光标的选项。(If0de3)
- 添加了键盘大写 IME 选项 (I8ac38)
- 在 CoreTextField 中添加了单行键盘选项 (I72e6d)
- 将 SimpleContainer 移动到 PopupTestUtils.kt 中 (I65c3e)
- 将 Radius API 重命名为 CornerRadius,以更好地表达它在 Compose 中的使用方式。更新文档以指示负角半径被钳位到零。(I130c7,b/168762961)
- 通过继续将 MotionEvents 发送到对所有操作(除了
ACTION_DOWN
)返回 false 的 onTouchEvent 的子 Android 视图来改进 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 中的选择,以及演示。(Ie7e97)
将 onGloballyPositioned 设为内联函数 (I15830)
OnPositionedModifier 重命名为 OnGloballyPositionedModifier,onPositioned() 重命名为 onGloballyPositioned()。(I587e8,b/169083903)
hasPendingMeasureOrLayout 属性已添加到 Owner,用于指示 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。当溢出为 None 时,Text 将不再处理溢出,并且它会将其实际大小报告给 LayoutNode。(I175c9,b/158830170)
AnnotatedString.Builder.addStringAnnotation 中的作用域参数已重命名为 tag,以保持 API 一致性。(I7c8cb)
错误修复
- 通过减少每次滚动时子组合中的工作量,改进了 LazyColumn/Row 的滚动性能。为 Composition 类添加了新的 hasInvalidations() 方法。Recomposer 中的 hasPendingChanges() 方法重命名为 hasInvalidations() (Ib2f32,b/168293643,b/167972292,b/165028371)
- 将 Size.Unspecified 参数更新为 Float.NaN,而不是 Float.POSITIVE_INFINITY。更新了 Painter 实现,以检查 Size.Unspecified 以及非有限大小。(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 已移除。现在宽度直接传递给 Paragraph。(Ica712)
错误修复
- 更新了许多图形 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 不同,之前的 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 将应用于所有 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) 删除了使用 Offset 参数的 Size API 上的操作符方法。这些操作的结果不清楚,并且对于这些操作,结果的类型出乎意料。例如,size - offset 应该返回偏移量还是大小结果,其中包含差异?
还删除了 Size 类中已弃用的方法。(Iec902,b/166514214)
错误修复
- 修复了 LazyColumn 的项目有时绘制不正确的问题,这在某些情况下也会导致崩溃。(Ibcf17,b/163066980,b/165921895)
- DpConstraints 和使用它的 API 已弃用。(I90cdb,b/167389835)
- 将
createAndroidComposeRule
和AndroidInputDispatcher
从androidx.ui.test.android
移动到androidx.ui.test
(Idef08,b/164060572) - 布局 API 中对重力的使用已一致地重命名为对齐或对齐。(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 更改
- 删除回调以在布局节点边界更改时通知 Owner。(If654e,b/166106882)
- 添加了对矢量图形路径上的 filltype 参数的支持,以根据奇偶或非零路径填充规则支持形状的切口。(I43dd2)
- Uptime 和 Velocity 现在是内联类 (I48f4a)
- Duration 现在是内联类 (I565eb)
- 添加回调以在布局节点边界更改时通知 Owner。(Ic40b3)
修复了使用 Offset 和半径的 Rect 函数构造函数会按 left、right、top、bottom 的顺序创建 Rect 而不是 left、top、right、bottom 的顺序的问题。
删除了 Rect 中已弃用的伴侣方法,转而使用函数构造函数。
添加了测试以验证 Rect.kt 中的方法 (I08460,b/165822356)
错误修复
- 添加了 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 和 ViewGroups,除非这些是组合树中的叶子,在这种情况下,可以使用 AndroidView 来实现。(I29b1e, b/163871221)FocusState2
已弃用,并由FocusState
替换 (Ia8b79, b/160822876, b/160923332)- 已移除弃用的 AndroidView 重载。(I946b9, b/163802393)
- 自定义发出现在可以声明其一个或多个设置器可以跳过,并独立于发出进行重新组合。(Ibbd13)
更改了 Vector 类,使其不再是数据类,因为相同的对象实例用于组合。
为 VectorPainter 添加了 mutableStateOf 标志,以便在向量内容更改时有条件地重新绘制。
重构了 VectorComponent 实例,使其成为 VectorPainter 的一部分,因为它在组合中被重复使用。
更新了 GroupComponent 和 PathComponent,使其 name 字段可变 (Ieae45, b/151378808)
已移除
onChildPositioned
和OnChildPositionedModifier
。开发人员应改为在子布局上使用onPositioned
和OnPositionedModifier
。(I4522e, b/162109766)Offset 已成为内联类 (Iaec70)
为 SelectionContainer 添加了修饰符参数 (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)
更新了 Alpha 版本的 PointerEventPass 名称。(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 个不再需要的 PointerEventPasses。(I3dd9d)
为 Paragraph.paint 添加参数 color、shadow 和 TextDecoration。此函数可用于避免不必要的 Paragraph 重新创建。(I81689)
错误修复
- 已移除 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 个不再需要的 PointerEventPasses。(I33ca7)
- 实现了 PointerInteropModifier,它提供了接收 MotionEvents 并与 Compose 交互的能力,就像您是 Android View 的实现一样。(Ieb08c)
- 已移除弃用的标签修饰符。请改用 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) - MotionEvents 从 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)
错误修复
- 解决广泛的 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 内部参数使用延迟委托
- 更新 Image 可组合以避免使用 Box 以减少开销
- 更新 Outline 类以具有 @Immutable 注释
- 更新 PathNode 以对每个路径指令具有 @Immutable 注释
- 更新向量子合成以删除对相等性的冗余条件检查,因为 Compose 已经处理了它们
- 弃用 Rect 伴随构造函数方法,而采用函数构造函数
- 使用 @Immutable 和 @Stable API 更新 Brush 类和函数构造函数
- 更新 VertexMode 枚举为 PascalCase
- 更新 DrawScope selectPaint 方法,如果笔刷参数已更改,则有条件地覆盖笔刷上的笔刷参数
- 更新 Size 以添加解构 API,将 UnspecifiedSize 重命名为 Unspecified 并删除未使用的 method
- 更新 Compose BlendMode API 使用情况,以根据 API 级别在 Android 框架 BlendModes 和 PorterDuff 模式之间正确映射。引入 BlendMode#isSupported API 作为功能查询,以在使用 BlendMode 之前确定设备上是否支持该 BlendMode。(I0ef42)
- LazyItemScope 已添加用于 Lazy 列表的 itemContent 参数。它提供修饰符以填充父级最大大小,这解决了项目应填充视口并且常规 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 选择添加了 FloatingToolbar。(Ie8b07)
- 为与键输入相关的 API 添加了一个实验性 api 注释(I53c0a)
- 为所有与焦点相关的 API 添加了一个实验性 api 注释(I53b24,b/160903352)
- 添加了 FocusState2,它将替换 FocusDetailedState(I0a3ba,b/160822595)
- 添加了 ExperimentalFocus,它是焦点 API 的 @OptIn 注释。(I1544b,b/160820961)
- 已添加 IntBounds 单位类,表示来自布局的整数像素边界。PopupPositionProvider 的 API 已更新为使用它。(I0d8d0,b/159596546)
- Applier 现在需要一个 clear() 方法来处理合成。(Ibe697)
- KeyEvent 已弃用,并由 KeyEvent2 替换(I68730)
- 一个新的可选标志 useUnmergedTree 已添加到测试查找器中。(I2ce48)
- 使 LayoutNode 成为实验性 API(I4f2e9)
已将复制方法添加到各种内联类类型中,包括
- Offset
- Size
- Radius
- Motion
TransformOrigin
弃用 Size.copy 伴随对象方法,建议使用实例复制方法(Ife290,b/159905651)
弹出窗口、对话框和菜单现在继承上下文 MaterialTheme(Ia3665,b/156527485)
TextDirection 已重命名为 ResolvedTextDirection(I3ff38)
从 Layout() 函数的测量块中删除了布局方向参数。但是,可以通过测量范围对象在回调中获得布局方向(Ic7d9d)
重构 SelectionHandles 以进行重用。(I420e0)
Clickable 已删除。使用 Modifier.clickable(I84bdf)
TestTag 和 Semantics 已删除。改用 Modifier.testTag 和 Modifier.semantics(I15ff0,b/158841414)
在此更改之前,如果存在(I5205a,b/158123804),Compose 编译器插件将以非平凡的方式拦截对 @Composable 函数内部构造函数的调用。
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)
为了减少用于表示尺寸信息的类数量,统一使用 Size 类而不是 PxSize。这利用内联类的优势,利用 long 来打包 2 个浮点值,分别表示以浮点数表示的宽度和高度。(Ic0191)
为了减少用于表示定位信息的类数量,统一使用 Offset 类而不是 PxPosition。这利用内联类的优势,利用 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 中的 Intrinsic 测量函数现在具有 IntrinsicMeasureScope 接收器,该接收器提供 Intrinsic 查询 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 对齐方式。(Ia0c05)
alignToSiblings 现在接受 Measured 而不是 Placeable。(I5788d)
-
- 将 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 属性以支持为给定图层偏移绘图命令的显示列表。这对于响应动画或触摸事件移动内容很有用。(I8641c)
为图层 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()。可以使用 with(density) 而不是 withDensity(density)。(I11cb1)
更改了 LayoutCoordinates,使其 providedAlignmentLines 成为 Set 而不是 Map,并使 LayoutCoordinates 实现 get() 运算符以检索值。这使得修饰符更容易修改集合的一个或多个值,而无需为每个修饰符创建新的集合。(I0245a)
LayoutCoordinates 不再具有 position 属性。在考虑 LayoutModifiers、旋转或缩放时,position 属性没有意义。相反,开发人员应该使用 parentCoordinates 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个 LayoutCoordinate 的转换。
LayoutCoordinates 使用 IntPxSize 作为 size 属性,而不是 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 来表示未设置的值,而无需对颜色进行装箱。(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 数据和即将推出的用于参与布局和绘制内容的 Image 可组合项。_正文:在 android.graphics.Bitmap 上创建扩展方法 Bitmap.asImageAsset(),以创建 ImageAsset 实例,这对于将传统的 Android 应用程序开发与 Compose 框架结合起来很有用 (Id5bbd)
添加了 TextDirection.Content (I48f36)
添加了 TextDecoration.plus 运算符 (I0ad1a)
Force
已从 TextDirectionAlgorithm 枚举值中删除 (Icc944)TextDirectionAlgorithm 重命名为 TextDirection (I75ce8)
为 TextField 选择实现 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 的加法运算符,该运算符委托给 merge() 函数。(Ia1add)
FontWeight.lerp 不会再捕捉了。它仍然是一个数据类。(I521c2)
FontWeight 构造函数现在是公有的,它不再是数据类了。(Id6b1f)
将 getLineStart、getLineEnd、getEllipsisOffset 和 getEllipsisCount 添加到 TextLayoutResult (Ibc801)
ui-text 模块重命名为 ui-text-core (I57dec)
删除了未使用的 Size 类,因为 ui-geometry 模块中存在一个重复的 Size 类,该类正在使用。(I1b602)
添加了 AdapterList,这是一种滚动列表组件,它只组合和布局可见的项目。当前已知问题包括它仅限垂直方向且未完全处理其子项更改的所有情况。(Ib351b)
将填充、边框、形状和背景参数添加到 Box (I05027, b/148147281)
错误修复
- 文本字段中的 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 现在可以组合在 ViewGroups 内部,而无需新的合成。请参阅 ViewInteropDemo 以了解示例。(I9ab0b, b/160455080)
- 将 sortWith 和 removeRange 添加到 MutableVector (Icccf7)
- 实现拖动选择句柄以更改 TextField 的选择。(I27032)
- 删除了包装 NativeShader 预期类的 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 参数而不是 2 个单独的浮点值来表示沿 x 轴和 y 轴的半径 (I46d1b)
Recompose 可组合项不再是有用的抽象。大多数重新组合应该作为 MutableState 赋值的结果发生。对于超出此范围的任何内容,建议您使用
invalidate
函数来触发当前范围的重新组合。(Ifc992)替换了各种 Compose 类中 Px 类的用法,作为仅依赖 Dp 和基本类型作为像素参数的大规模重构工作的一部分 (Iede0b)
更改了 Compose 编译器的代码生成策略。在更改之前,Compose 编译器会转换对可组合函数的调用。通过此更改,我们现在转换可组合函数的主体,并使调用站点保持不变(大部分)。
这意味着大多数与 Compose 运行时通信的逻辑发生在函数体开始处,而不是在调用站点。
对于所有 Compose 用法,这应该是一个源代码兼容的更改。大多数 Compose 用户无需因此更改而更新任何代码。
为了支持这项工作,所有可组合函数的 JVM 签名都已更改。接受单个参数的可组合函数被转换为接受 3 个参数的函数,这些附加参数是 Composer、一个“键”整数和一个用于在调用中传播元数据的位掩码整数。
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)
环境 API 的重大更改。有关详细信息,请参阅日志和
Ambient<T>
文档(I4c7ee,b/143769776)更改了默认 TextDirection 的行为,使其由 LayoutDirection 决定。即,如果 LayoutDirection 为 RTL,则默认 TextDirection 将为 RTL。之前为 TextDirection.ContentOrLtr/Rtl(I4e803)
错误修复:当字体粗细和字体样式在 AnnotatedString 中嵌套时,文本无法正确渲染。(I77a9d)
将常用参数添加到 Text() 中。如果您目前正在创建本地文本样式以传递少量这些参数,例如 Text(style = TextStyle(textAlign = TextAlign.Center)),您现在可以直接提供这些参数:Text(textAlign = TextAlign.Center)(I82768)
ui-android-text 模块重命名为 ui-text-android(I68cbe)