Compose UI

与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。
最近更新时间 稳定版 候选版 Beta 版 Alpha 版
2024 年 3 月 6 日 1.6.3 - - 1.7.0-alpha04

结构

Compose 由 androidx 中的 7 个 Maven 组 ID 构成。每个组都包含一套特定用途的功能,并各有专属的版本说明。

下表介绍了各个组的内容,点击链接即可查看其版本说明。

说明
compose.animation在 Jetpack Compose 应用中构建动画,丰富用户体验。
compose.compiler借助 Kotlin 编译器插件,转换 @Composable functions(可组合函数)并启用优化功能。
compose.foundation使用现成可用的构建块编写 Jetpack Compose 应用,还可扩展 Foundation 以构建您自己的设计系统元素。
compose.material使用现成可用的 Material Design 组件构建 Jetpack Compose UI。这是更高层级的 Compose 入口点,旨在提供与 www.material.io 上描述的组件一致的组件。
compose.material3使用 Material Design 3(新一代 Material Design)组件构建 Jetpack Compose UI。Material 3 中包括了更新后的主题和组件,以及动态配色等 Material You 个性化功能,旨在与新的 Android 12 视觉风格和系统界面相得益彰。
compose.runtimeCompose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。
compose.ui与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。

声明依赖项

如需添加 Compose 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

Groovy

dependencies {
    implementation "androidx.compose.ui:ui:1.6.3"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.10"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.6.3")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.10"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

版本 1.7

版本 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 还会在基础可滚动列表中应用上述属性。(Ic5fa2)
  • FocusRequester.createRefs 现已稳定(I4d92cb/261436820
  • 引入了 DelegatableNode.requireView(),以允许修饰符节点在不读取本地组合的情况下获取当前的 Android View。(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。我们非常高兴地宣布,在首次推出 ContextualFlowRowContextualFlowColumn 的同时,我们还对实验性 FlowRowFlowColumn 进行了增强功能,现在提供 maxLines 和溢出支持。此更新旨在提供性能最佳的组件,其中 ContextualFlow* 非常适合使用小型 maxLines 配置和动态 +N 查看更多按钮,而 FlowRowFlowColumn 则非常适合用于数量较少且数量不超过 100 项内容的组件。重要提示:如需保持 FlowRowFlowColumn 中的现有行为(无论它们是否适合交叉轴最大值),请在初始化期间将 overflow 设置为 FlowRowOverflow.VisibleFlowColumnOverflow.Visible。探索 ContextualFlowRowSampleFlowRowSample,查看这些新功能的实际应用示例。(Ib9135b/293577082
  • 添加了 maxTextLength 语义属性,该属性应针对过滤允许最大字符数的文本字段进行设置。(I24d9fb/170648072
  • 废弃了 Modifier.inspectable 封装容器。此 API 会创建不必要的修饰符无效化,因此现在不建议使用。如果开发者想要向工具公开修饰符属性,建议在 ModifierNodeElement 上实现 inspectableProperties() 方法。(Ib3236
  • 新增了 PopupProperties 构造函数,可完全控制 WindowManager.LayoutParams 标志。(Ibb33eb/312485503
  • 引入了 DelegatableNode.requireLayoutCoordinates() 来获取 Modifier.Node 的当前 LayoutCoordinates,而无需替换 onPlaced 并自行将坐标存储在属性中。(Ia8657
  • 引入了 DelegatableNode.currentLayoutCoordinates 来获取 Modifier.Node 的当前 LayoutCoordinates,而无需替换 onPlaced 并自行将坐标存储在属性中。(Iaebaa)
  • androidx.compose.foundation.text2 软件包下的 BasicTextField2 及相关 API 已移至 androidx.compose.foundation.text。(I9f635
  • 添加了新的 ApproachLayoutModifierNode API,以支持在显式修饰符节点中创建自定义方法逻辑。此外,还针对实例化时目标未知的动画添加了新的实验性 DeferredTargetAnimation API。(I60745
  • 新增了 Path API,用于查询 Path 的方向并从 Path 中提取轮廓。(I63d04
  • 添加了 PathHitTestPath.contains(Offset),用于检查 Path 是否包含特定的点。(I3b218
  • TextLayoutResult 现在公开了 getLineBaseline(lineIndex) 方法。这样,除了现有的便捷属性 firstBaselinelastBaseline 之外,还可以读取任意文本行的基线。(Ide4e8b/237428541
  • 添加了仅比较两个 AnnotatedStrings 的注解的方法。(I32659

bug 修复

  • 修复了 SemanticsPropertyReceiver.performImeActionSemanticsActions.PerformImeAction 的向后兼容性问题。(Id0528b/322269946

版本 1.7.0-alpha02

2024 年 2 月 7 日

发布了 androidx.compose.ui:ui-*:1.7.0-alpha02版本 1.7.0-alpha02 中包含这些提交内容

API 变更

  • 修复了 SemanticsPropertyReceiver.performImeAction 的二进制文件兼容性问题。(I65865b/322269946
  • 采用 usePlatformDefaultWidth 参数的 PopupProperties 构造函数不再处于实验阶段。(I8f8d2
  • 添加了 ComposeTestRule.waitUntil 重载,它接受要包含在超时消息中的条件的字符串说明。(I9413e
  • 新增了语义 API unset(),用于移除在同一修饰符链中添加的语义属性。新的语义属性 isOpaque。(I8c583b/317966058b/246056649
  • PointerInputChange 的公共 API 中的复制方法中移除了 originalEventPosition。(I7bead)

bug 修复

  • 修复了一个 a11y bug,允许非标签页和非单选按钮在选中后处于可点击状态。(I2181c
  • VelocityTracker 现在将修复默认开启添加点的功能。如果存在任何问题,仍然可以通过将 VelocityTrackerAddPointsFix 设置为 false 来关闭此修复。(Ib3877b/269487059
  • 修复了 TextStyleParagraphStyle 中的向后二进制文件不兼容问题。(I179f0b/320819734

外部贡献

  • 添加了新的 DialogProperties 构造函数,没有平台专用参数。(I45829
  • 添加了新的 PopupProperties 构造函数,没有平台专用参数。(I9a038

版本 1.7.0-alpha01

2024 年 1 月 24 日

发布了 androidx.compose.ui:ui-*:1.7.0-alpha01版本 1.7.0-alpha01 中包含这些提交内容

API 变更

  • 通过添加 ClipEntryClipMetadata 扩展了 ClipboardManager,以支持图片等任意内容。
  • ui-test 添加了 DeviceConfigurationOverride API,以允许在本地替换被测内容的行为,例如指定可用的大小、语言区域、布局方向、字体大小或主题。

版本 1.6

版本 1.6.3

2024 年 3 月 6 日

发布了 androidx.compose.ui:ui-*:1.6.3。版本 1.6.3 中包含这些提交内容

版本 1.6.2

2024 年 2 月 21 日

发布了 androidx.compose.ui:ui-*:1.6.2版本 1.6.2 中包含这些提交内容

版本 1.6.1

2024 年 2 月 7 日 发布了 androidx.compose.ui:ui-*:1.6.1版本 1.6.1 中包含这些提交内容

bug 修复

  • 修复了 SemanticsPropertyReceiver.performImeActionSemanticsActions.PerformImeAction 的向后兼容性问题。(Ie0bb2b/322269946
  • 现在,如果布局返回异常大的尺寸,则布局会在衡量时发出错误。当测量结果直接使用最大约束而不检查 Constraints.Infinity 时,通常会发生这种错误。此检查可帮助开发者发现布局尺寸有误的问题,而不是与包含该尺寸的布局相关的问题。(I339a9

版本 1.6.0

2024 年 1 月 24 日

发布了 androidx.compose.ui:ui-*:1.6.0版本 1.6.0 中包含这些提交内容

版本 1.6.0-rc01

2024 年 1 月 10 日

发布了 androidx.compose.ui:ui-*:1.6.0-rc01版本 1.6.0-rc01 中包含以下提交内容

bug 修复

  • 优化了矢量图形实现,通过最大限度地减少额外重组来提高性能。

版本 1.6.0-beta03

2023 年 12 月 13 日

发布了 androidx.compose.ui:ui-*:1.6.0-beta03版本 1.6.0-beta03 中包含这些提交内容

新功能

  • 现在,可在不分离节点的情况下分离 LayoutCoordinates。在 Compose 布局检查器中对此进行注意 (If693)

bug 修复

  • PlatformImeOptions 现在是具体的类,而不是接口。(If40a4
  • 修复了由于每次进行根重组时都提供新值而导致 LocalSoftwareKeyboardControllerLocalTextInputService 发生额外下游重组的问题。(I42190b/310510985

版本 1.6.0-beta02

2023 年 11 月 29 日

发布了 androidx.compose.ui:ui-*:1.6.0-beta02版本 1.6.0-beta02 中包含这些提交内容

版本 1.6.0-beta01

2023 年 11 月 15 日

发布了 androidx.compose.ui:ui-*:1.6.0-beta01版本 1.6.0-beta01 中包含这些提交内容

API 变更

  • DragAndDropTarget 修饰符现在会明确接收接收的 DragAndDropTarget,并具有用于选择加入拖放会话的 lambda。DragAndDropModifierNode 现在有两个工厂函数。一个用于接收传输,另一个用于传输数据 (I69481)
  • maximumFlingVelocity 更新为表示为浮点数。更新了文档,以更清楚地说明 maximumFlingVelocity 统一。(I8adc7
  • DragAndDropModifierNode 工厂中的 onDragAndDropStart 已重命名为 acceptDragAndDropTransferacceptsDragAndDropTransfer 已添加到 dragAndDropTarget 修饰符中,可从拖放会话中接受。如果对拖放会话感兴趣,此 lambda 会返回可行的 DragAndDropTarget。其他用于处理拖动事件的 lambda 已替换为此实现。添加了 DragAndDropTarget 工厂函数,以接收来自拖放会话 (Iebf3a)
  • 移除了 DragAndDropInfo,因为 DragAndDropModifierNode.drag 类型现在接受 transferData、装饰尺寸和拖动装饰 DrawScope lambda 的参数

    DragAndDropTarget 包含适用于特定拖放事件的方法,而不是单个抽象方法

    DragAndDropModifierNode 的工厂函数中的 onDragAndDropEvent 已重命名为 onDragAndDropStart,以更好地表明提供的 DragAndDropTarget 仅对给定的拖放会话有效

    移除了 DragAndDropEventType (I645b1)

  • PlatformTextInputModifierNode.runTextInputSession 已重命名为 establishTextInputSession。(I03cd0)

  • 改进了可遍历的节点 API 名称,使其更易于理解。(Ia4474

  • OriginalText 替换为 TextSubstitution。(Ifa5a8)

  • PlatformTextInputModifierNode.textInputSession 已重命名为 runTextInputSession。(Ie9c6b)

  • 保留下来以供日后重复使用的 SubcomposeLayout 子项(以及基于该子项的 LazyColumn 等布局)将被视为已停用。引入了新的 assertIsDeactivated() 测试 API 来测试此类节点。默认情况下,测试 API 的其余部分将过滤掉已停用的节点。(I2ef84b/187188981

  • 移除了 FocusDirection.InFocusDirection.Out,改为使用 FocusDirection.EnterFocusDirection.Exit (I2f660)

  • Material SwipeToReveal API(适用于卡片和条状标签)现在依赖于基于槽的 API(如 Compose 所推荐),而非基于数据类的实例来创建这些槽。这是一项重大变更,请参阅演示和示例代码,了解有关如何使用新 API 的示例。(Ia8943

  • 废弃了 FontStyle(int) 构造函数,请改用 FontStyle.NormalFontStyle.Italic。(I66610

  • FontScalable 接口已重命名为 FontScaling (Ie804a)

bug 修复

  • 如果没有任何文本编辑器获得焦点,SoftwareKeyboardController.show() 将不再显示软件键盘。(I2165ab/301477279
  • 现在,如果按键未在同一 Compose 视图中收到“按下”事件,系统会忽略相应的硬件按键向上事件。(Ib37b4b/305518328
  • ArcLine 中添加了对“清除渐变”功能的渲染程序支持。(I4d5bb
  • PageSize.Fixed 实现等号和哈希代码。(Ie3edeb/300134276
  • 修复了与窗口边衬区变更相关的二进制文件兼容性问题 (Iee695)
  • 移除了 Material3 芯片/按钮的 Material 核心层,因为在没有它的情况下,Microbenchmark 会显示更好的性能。(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。(Id0e30b/303904810
  • 引入了 SemanticsNodeInteraction.isDisplayed()SemanticsNodeInteraction.isNotDisplayed(),以检查匹配的节点是否可见,而无需同时对其进行断言。(I2c196b/302100809
  • ParagraphTextStyleTextAlignTextDirectionHyphensLineBreak 字段引入了特殊的 Unspecified 值,以替换 null。由于这些类是内联类,通过将可为 null 的值替换为 Unspecified,可以避免基元类型框化。更新了 TextStyle 和段落样式中的构造函数、getter 和其他方法,以接受上述参数作为非 null 类型。(I4197eb/299490814
  • 添加了 GoogleFont 重载,用于从 XML 读取 GoogleFont。(If8f59)
  • LoremIpsum PreviewParameterProvider 设为了开放类。(I41bf5b/266918816b/300116360

bug 修复

  • FontFamilyResolver 现在将 Dispatchers.Main 用于缓存管理协程。(Ie8dd9
  • AndroidViewBinding 现在通过使用 commitNow(而不是之前使用的 commit)在您的布局中添加 FragmentContainerView 作为其 onRelease 的一部分来同步移除 Fragment 实例,从而修复了实时编辑方法在更改时替换组合的问题。(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 修饰符用于从拖放会话接收内容。(Ib7828b/286038936
  • 添加了可避免分配的 ColorListColorSet 集合。(I744bd
  • 添加了 DisableNonLinearFontScalingInCompose 临时标记,以停用非线性字体缩放。如果您需要时间来清理测试,请在测试中设置 DisableNonLinearFontScalingInCompose = true。此标志将在 Compose 1.6.0-beta01 中移除。(Ic9486

bug 修复

  • 优化了 XML 矢量可绘制对象解析。(Ibb015

版本 1.6.0-alpha06

2023 年 9 月 20 日

发布了 androidx.compose.ui:ui-*:1.6.0-alpha06版本 1.6.0-alpha06 中包含这些提交内容

API 变更

  • 对 Material 图标进行了额外的优化。(I3e08d
  • 添加了遍历向上/向下修饰符树以查找类似节点的功能。(I2d234
  • focusRestorer() 修饰符添加了 onRestoreFailed() 回调 (Ie1d43)
  • 向各种图形 API 添加了 androidx 注解,以指定 ColorIntFloatRangeIntRangeSize 等。(Id65c8b/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
  • ScrollViewRecyclerView 等 View 组件中的快速滑动速度上限为 ViewConfiguration.ScaledMaximumFlingVelocity。Compose 现在包含自己的 maximumFlingVelocity 版本,该版本现在应用于 Draggable。(Ibf974)
  • 添加了初始基架,以支持平台拖放 API。(If84ce)
  • deviceId 添加到 RotaryScrollEvent 中 (Iba3bf)
  • 更新了 ui-tooling Devices API 以包含较新的设备 (Ib25b4)

版本 1.6.0-alpha04

2023 年 8 月 23 日

发布了 androidx.compose.ui:ui-*:1.6.0-alpha04版本 1.6.0-alpha04 中包含这些提交内容

API 变更

  • 添加了一个用于停用 ReusableComposition 的方法,移除了观察结果,但将节点留在原处。可通过调用 setContent 再次激活已停用的组合。(Ib7f31
  • 添加了 ReusableComposition 接口,用于管理子组合的生命周期和重复使用。(I812d1b/252846775
  • Modifier.focusGroup 已提升为稳定版 API。(I7ffa3
  • 向各种图形 API 添加了 androidx 注解,以指定 ColorIntFloatRangeIntRangeSize 等。(I70487b/290950582
  • 更新了 ColorFilter API,使其具有具体的子类类型,以提高参数的可检查性。(I5fe29
  • 引入了 wear-tooling-preview 库,以列出可用于界面预览的有效 Wear 设备 (Ib036e)
  • 创建了 FontScalable 接口,用于处理密度接口的字体缩放部分。(I2cf3f

版本 1.6.0-alpha03

2023 年 8 月 9 日

发布了 androidx.compose.ui:ui-*:1.6.0-alpha03版本 1.6.0-alpha03 中包含这些提交内容

API 变更

  • 一种新的进入/退出过渡类型,可在进入和退出动画播放期间根据动画容器的大小来缩放内容。LookaheadScope 可组合项函数和界面现已稳定。(Ifb2ce)
  • 添加了对配置 privateImeOptions 的支持 (Idb772)

bug 修复

  • 现在,如果计算中读取的状态发生更改,PopupPositionProvider.calculatePosition 会自动更新弹出式窗口的位置。(I676a1b/292257547
  • 修复了当 readOnly 为 true 时,显示键盘且可修改的文本字段。此外,还修复了 readOnly 从 true 变为 false 并聚焦时键盘不显示的问题。(I34a19b/246909589
  • 扩展了全局断言在界面测试中的应用。(I1f90d

版本 1.6.0-alpha02

2023 年 7 月 26 日

发布了 androidx.compose.ui:ui-*:1.6.0-alpha02版本 1.6.0-alpha02 中包含这些提交内容

API 变更

  • 添加了可以由 Composition 的实现者实现的服务定位器接口,该接口允许实现对原始组合进行委托的其他组合委托服务查找。这不应称为 Directy,而是用于在运行时创建可从编辑器的封装版本(例如界面模块)中找到的实验性 API。(I296b9
  • 经过全面重新设计的 PlatformTextInput* API。(I6c93ab/274661182b/267235947b/277380808
  • SoftwareKeyboardControllerLocalSoftwareKeyboardController 不再是实验性功能。LocalSoftwareKeyboardController 现在也是适当的 CompositionLocal。(I4c364
  • 已在几个版本中废弃了 LookaheadLayoutLookaheadLayoutScope,现已移除。替代 API 是可与任何布局搭配使用的 LookaheadScope。(I12ac3
  • 添加了 SemanticsNodeInteraction.requestFocus,以便在测试中请求焦点,是一种更方便、更易于发现的方式。(Ie8722
  • 添加了用于注册全局断言的实验性 API,以供将来的测试框架使用。(I12d77

bug 修复

  • 现在,AndroidViewupdate 回调的第一次调用将被推迟到附加视图之后,而不是在应用引入 AndroidView 的组合时运行。这修复了以下问题:如果 update 回调读取的状态立即被效果更改,则不会使该回调失效。(Ie9438b/291094055

版本 1.6.0-alpha01

2023 年 6 月 21 日

发布了 androidx.compose.ui:ui-*:1.6.0-alpha01版本 1.6.0-alpha01 中包含这些提交内容

新功能

  • LazyList 中支持向前先行。这样一来,先行传递中的 LazyList 便可绕过任何动画(例如项放置动画、AnimatedVisibility 等),并计算所有子项的先行大小和位置。在先行遍历之后,LazyList 的子项可以独立地以动画形式呈现,从而呈现在先行遍历中所看到的实际情况。

行为变更:Compose 中的 includeFontPadding 现在默认为 false

现在,Compose 中的 includeFontPadding 默认为 false (21d806)。

includeFontPadding 是一个旧版属性,用于控制是否在文本的第一行和最后一行添加额外的内边距,以容纳可能会延伸到文本基线上方或下方的任何字符。

更新此 Compose 版本将修改所有文本在界面中呈现的方式,方法是移除您显示的每个文本的第一行和最后一行顶部的额外内边距。

更改应该很小,具体取决于您的界面要求和您使用的字体指标。不过,您可能会遇到如下阻碍: - 损坏的屏幕截图测试。根据需要修复界面,并重新生成黄金图片。- 文本略微对齐。移除所有自定义的负内边距,或根据需要添加内边距。

您可以为每条文本使用 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,请参阅开发者文档这篇博文

如果您遇到与此项更改相关的问题/bug,请使用问题跟踪器提交 bug。

API 变更

  • 支持 InputConnection#requestCursorUpdates (I0c69b)
  • 添加了 FocusRequester.saveFocusedChildFocusRequester.restoreFocusedChildIc557eb/272302679b/275157318
  • 添加了 ResourceResolutionException 类型,以封装在尝试加载位图资源(其中包含未能加载的资源路径说明)时抛出的可抛出对象。(I19f44b/230166331b/278424788
  • 优化了性能和内存分配的可访问性。(Iede48
  • 添加了语义属性和操作以支持文本翻译。(I4a6bc
  • IntrinsincMeasureScope 及其实现中的新属性(例如 MeasureScope),用于指示当前的测量传递是否为先行传递。(I7a812
  • 更新了 DrawScope API,现在能够将渲染重新定位到具有备用密度/布局方向和尺寸的其他画布。
  • 更新了 DrawContext,以支持密度和布局方向的配置,以及使画布可配置。(Ie1f9bb/225408150
  • 添加了 Paragraph#fillBoundingBoxes,用于计算字符边界框。(If30ee
  • 添加了一组常用的 MultiPreviews (Ia5a27)

bug 修复

  • 添加了 FocusTargetModifierNode 接口,可用于创建自定义 FocusTarget。(I9790e
  • TextMeasurer 构造函数中的 fallback* 参数重命名为了 default*。(I940a5
  • SemanticsPropertyReceiver.performImeAction 重命名为 onImeAction,将 SemanticsActions.PerformImeAction 重命名为 OnImeAction。(I8e841
  • 添加了 Wheel,以区分鼠标滚动与嵌套滚动中的拖动(具体而言,在 NestedScrollConnection 中)。(Ie57e4)
  • 添加了 asComposePaint API 以替换 toComposePaint,因为返回的对象封装了原始 android.graphics.Paint (I22b4c)
  • 废弃了 SemanticsProperties.imeAction,并替换为 SemanticsActions.performImeAction 的新参数。(I4a587
  • 添加了对鼠标选择的支持。基于触摸的选择将按字词扩展,并按字符缩小。(Ic0c6cb/180639271
  • 过去针对出界偏移抛出 AssertionErrorParagraph 方法现在会像 MultiParagraph 一样抛出 IllegalArgumentException。(I549d3b/243338896

版本 1.5

版本 1.5.4

2023 年 10 月 18 日

发布了 androidx.compose.ui:ui-*:1.5.4版本 1.5.4 中包含这些提交内容

版本 1.5.3

2023 年 10 月 4 日

发布了 androidx.compose.ui:ui-*:1.5.3版本 1.5.3 中包含这些提交内容

bug 修复

  • (b/301209788) TextField 在聚焦和输入韩语输入法时,有时会错误地应用之前的命令,从而导致字符丢失。

版本 1.5.2

2023 年 9 月 27 日

发布了 androidx.compose.ui:ui-*:1.5.2版本 1.5.2 中包含这些提交内容

bug 修复

  • 添加了从后台线程访问无障碍功能滚动 API 时发生崩溃的解决方法。
  • 修复了向语义树中添加未附加节点的问题。

版本 1.5.1

2023 年 9 月 6 日

发布了 androidx.compose.ui:ui-*:1.5.1版本 1.5.1 中包含这些提交内容

bug 修复

  • 修复了当 readOnly 为 true 时,显示键盘且可修改的文本字段。此外,还修复了 readOnly 从 true 变为 false 并聚焦时键盘不显示的问题。(I34a19b/246909589

版本 1.5.0

2023 年 8 月 9 日

发布了 androidx.compose.ui:ui-*:1.5.0版本 1.5.0 中包含这些提交内容

版本 1.5.0-rc01

2023 年 7 月 26 日

发布了 androidx.compose.ui:ui-*:1.5.0-rc01版本 1.5.0-rc01 中包含这些提交内容

bug 修复

  • 修复了在 movableContentOf() 内使用 SubcomposeLayout 时发生崩溃的问题。

版本 1.5.0-beta03

2023 年 6 月 28 日

发布了 androidx.compose.ui:ui-*:1.5.0-beta03版本 1.5.0-beta03 中包含这些提交内容

bug 修复

  • 添加了 FocusTargetModifierNode 接口,可用于创建自定义 FocusTarget。(Ifb1d6)
  • 修复了与 Dialog 和 Popup 可组合项有关的问题,该问题可能会导致在 usePlatformDefaultWidth=true 时,子窗口无法按预期调整大小。(I112ee

版本 1.5.0-beta02

2023 年 6 月 7 日

发布了 androidx.compose.ui:ui-*:1.5.0-beta02版本 1.5.0-beta02 中包含这些提交内容

API 变更

  • 添加了 asComposePaint API,支持使用要在 Compose 中使用的 android.graphics.Paint 实例

bug 修复

  • 添加了 asComposePaint API 以替换 toComposePaint,因为返回的对象封装了原始 android.graphics.Paint (I22b4c)

版本 1.5.0-beta01

2023 年 5 月 24 日

发布了 androidx.compose.ui:ui-*:1.5.0-beta01版本 1.5.0-beta01 中包含这些提交内容

API 变更

  • 移除了重组、颜色动画和 AndroidComposeView 中的分配 (Ib2bfa)
  • 添加了辅助函数 CacheDrawModifierNode() 以允许委托 (Icf8f9)
  • 引入了可从 MeasureScope 访问的 isLookingAhead 属性,用于观察预见结果并根据需要影响主传递。(Ibf4c3)
  • 新增了语义属性 traversalIndex,一个浮点数,用于对 TalkBack 遍历中的节点重新排序(值越小,排在前面)。(I9a81bb/186443263
  • 将语义属性 isContainer 重命名为 isTraversalGroup (I121f6)
  • ColorProducer 现在具有 operator fun invoke,而不是 produce (I4a9a2)
  • 添加了 Path Transform API,以将平移/缩放/旋转转换应用于路径对象。(I23434b/233772232
  • ColorProducer 的方法称为 produce。(I78bde
  • toFrameworkColorSpace 重命名为 toAndroidColorSpace (I4f547)
  • 已将 ColorLambda 重命名为 ColorProducer。(I73b1a
  • 引入了用于在 Android 和 Compose 色彩空间类型之间进行转换的 API。(Ie7db4b/279979665
  • BasicText 添加了颜色参数,以便高效地为文本颜色添加动画效果或设置文本颜色。(Iffd88b/246961787
  • TextRange.constrain 已重命名为 TextRange.coerceIn。(I31be2)
  • 添加了具有完整参数列表的经过优化的 TextStyle.merge(...)。(Iad234b/246961787
  • 稳定了许多 Text API,包括 BrushDrawStyleTextMotionDrawScope.drawTextParagraph.paint(Brush)MultiParagraph.paint(Brush)。(I2f740b/261581564b/261581931b/261561245
  • 已取消弃用 PlatformTextStyle.includeFontPadding。我们最初的意图是移除该字段,但反馈显示开发者需要此配置选项。因此,从该字段中移除了废弃(I98e96b/277703184
  • 添加了公共 TextRange.constrain 方法。(I97912
  • AnnotatedString 中的 UrlAnnotation 现在可以通过 TalkBack 等无障碍服务打开。(If4d82b/253292081
  • 为文本字段添加了 InsertTextAtCursor 语义操作。(I11ed5
  • LineHeightStyle.Alignment(topRatio) 构造函数已提升为稳定版 API。(I79c32b/261565383
  • TextMeasurer 及相关 API 不再处于实验阶段。(I74647b/261581753
  • 添加了 PerformImeAction 语义操作,用于调用文本编辑器节点上的 IME 操作。(Ic606fb/269633506
  • 对于 Android,PlatformTextInput API 不再处于实验阶段。(I668eb
  • 更改了 Enum.valueOf 的值参数名称 (Ia9b89)
  • 枚举 valueOf 抛出更多异常 (I818fe)
  • 引入了新的低级别 PlatformTextInputAdapter API,用于构建直接与平台 API 通信的自定义文本输入实现。(I58df4
  • DrawScope.drawTextParagraph.paintMultiParagraph.paint 方法添加了 BlendMode 参数,以支持在画布上绘制文本时的不同混合算法。(I57508)
  • 已将 Font.MaximumAsyncTimeout 重命名为 Font.MaximumAsyncTimeoutMillis。仅重命名。(I07af5)
  • 更新了 @Preview 参考设备的 DPI 值(Id6151b/254528382
  • BasicText 添加了 brushalpha 参数,以便高效地为文本画笔添加动画效果或设置文本画笔。
  • 在 :ui:ui-unit 中为 Float、Double、Long、Int、Short 定义无框 lambda 类型(I6f18db/246961787

bug 修复

  • 移除了指针速度跟踪中的多个分配 (I26bae)
  • 减少了布局和指针输入管理中的分配 (I5333a)
  • 优化矢量内存用量和第一帧渲染 (I2f3c6)
  • 移除了使用画布绘制线条和点时的分配 (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 实例的增强功能。您可以使用 delegateundelegate API 来完成此操作。在此变更之前,委托节点中的每个 API 都需要明确委托给委托节点。此变更生效后,除非 DelegatingNode 明确替换节点接口,否则系统会隐式委派节点接口。(67352bc)

API 变更

  • 引入了 NestedScrollModifierNode,这是一个可以委托的 NestedScroll Modifier.Node。(I69513
  • AndroidViewBinding 可组合项添加了 onResetonRelease 参数,从而镜像了 AndroidView 可组合项,并支持通过 ViewBinding 重复使用 View。(I00b1eb/276802519
  • 更新了 Compose Path API,以支持回退操作,以支持频繁执行路径操纵的用例,并且可提高重用速度。(I7b797
  • 添加了具有完整参数列表的经过优化的 TextStyle.merge(...)。(Iad234b/246961787
  • 稳定了许多 Text API,包括 BrushDrawStyleTextMotionDrawScope.drawTextParagraph.paint(Brush)MultiParagraph.paint(Brush)。(I2f740b/261581564b/261581931b/261561245
  • 已取消弃用 PlatformTextStyle.includeFontPadding。我们最初的意图是移除该字段,但反馈显示开发者需要此配置选项。因此,从该字段中移除了废弃(I98e96b/277703184

bug 修复

  • 修复了以下回归问题:非 Dialog 可组合项创建的对话框中的文本字段不显示键盘。(I82551b/262140644

版本 1.5.0-alpha03

2023 年 4 月 19 日

发布了 androidx.compose.ui:ui-*:1.5.0-alpha03版本 1.5.0-alpha03 中包含这些提交内容

新功能

  • LookaheadScopeSubcomposeLayout 的新默认行为:现在,没有条件槽(例如 TabRowScaffoldBoxWithConstraints 等)的 SubcomposeLayouts 可以很好地与先行动画搭配使用。

API 变更

  • 重用先行传递的测量政策的新默认 intermediateMeasurePolicy 默认允许没有条件槽(例如 ScaffoldTabRowBoxWithConstraints)的 SubcomposeLayout 子类型与先行预测配合使用。(Id84c8)
  • 现在,在收到 ON_STOP 通知时,为 Android 窗口创建的 Recomposer 现在仅阻止对 withFrameNanos 的调用,而不是所有组合。这意味着,与已停止的 activity 相关联的窗口将继续因数据更改而重组,但动画或 withFrameNanos 的任何其他调用方将阻塞。(Id9e7fb/240975572
  • motionEventSpy 更改为了稳定版。(Ic5ec4b/261560988
  • 添加了公共 TextRange.constrain 方法。(I97912
  • 不再废弃 PlatformTextStyle.includeFontPadding,以鼓励开发者使用此兼容性 API 切换和测试 includeFontPadding false 设置。(I98e96b/277703184

版本 1.5.0-alpha02

2023 年 4 月 5 日

发布了 androidx.compose.ui:ui-*:1.5.0-alpha02版本 1.5.0-alpha02 中包含这些提交内容

API 变更

  • 新增了 SubcomposeLayout API,该 API 接受一个额外的中间测量政策,用于在基于先行的动画期间处理测量/布局逻辑。(I017d3
  • PointerInput 现在属于延迟输入,并且使用 Modifier.Node 来提高性能(了解细微的行为变更)。(15dab9)
  • 通过按键事件将实验性 API 更改为了稳定版。(I9c7d8b/261566839b/261567368
  • PointerInputChange 中将实验性 API 更改为稳定版。(I1b543b/261560988b/261565762b/261565749
  • 添加了一种为更复杂的 Modifier.Node 实现实例化 SuspendingPointerInputModifierNode 的方法。(Ic4933
  • AnnotatedString 中的 UrlAnnotation 现在可以通过 TalkBack 等无障碍服务打开。(If4d82b/253292081
  • 添加了一个 API,用于在硬件按键被发送到软键盘之前对其进行拦截(I4f4c6b/186800395
  • 为文本字段添加了 InsertTextAtCursor 语义操作。(I11ed5
  • 文本相关测试操作(例如 performTextInput)现在会使用语义操作直接请求焦点,而不是点击字段。(I6ed05

bug 修复

  • 现在,文本测试操作需要启用文本字段。(Iab328

版本 1.5.0-alpha01

2023 年 3 月 22 日

发布了 androidx.compose.ui:ui-*:1.5.0-alpha01版本 1.5.0-alpha01 中包含这些提交内容

API 变更

  • Modifier.intermediateLayout 现在不需要显式 LookaheadScope。mediateLayout 中的 measure 代码块将 IntermediateMeasureScope 作为接收器,以提供便捷的 CoroutineScope、LookaheadScope 和 MeasureScope。(Ibe2e5)
  • LookaheadLayout 已被 LookaheadScope 取代,后者不再是一种布局。这样,LookaheadScope 中的 chid 内容可以直接由父级的 MeasurePolicy 控制。(Ibe2e5
  • 添加了 Modifier.Node#coroutineScope,以允许 Modifier.Nodes 启动协程。(I76ef9
  • 允许 Modifier.Nodes 通过实现 CompositionLocalConsumerModifierNode 接口读取 CompositionLocal。(Ib44df
  • 将 @Deprecated 类传播到属性。(I882d1

版本 1.4

版本 1.4.3

2023 年 5 月 3 日

发布了 androidx.compose.ui:ui-*:1.4.3版本 1.4.3 中包含这些提交内容

bug 修复

  • 修复了 AndroidView 与某些修饰符一起使用时可能无法正确布局的问题。(I4dc77b/274797771
  • 修复了 2D 焦点搜索中会影响 DropDown 菜单的 bug (b/276811828)
  • 修复了自定义焦点输入/退出属性(仅在首次调用 lambda 时运行进入/退出代码块)中的 bug (b/277234245)
  • 修复了在读取 focusProperties 时导致对焦系统崩溃的回归问题。(b/271324781b/274897776

版本 1.4.2

2023 年 4 月 19 日

发布了 androidx.compose.ui:ui-*:1.4.2版本 1.4.2 中包含这些提交内容

bug 修复

  • 修复了 AndroidView 无法正确重用其修饰符可能会导致意外行为和崩溃的问题。(Ib67eeb/275919849
  • 修复了以下回归问题:对于不是由 Dialog 可组合项创建的对话框内的文本字段,键盘不显示(I82551b/262140644

版本 1.4.1

2023 年 4 月 5 日

发布了 androidx.compose.ui:ui-*:1.4.1版本 1.4.1 中包含这些提交内容

bug 修复

  • 修复了 ParentDataModifier 不影响 AndroidView 的问题 (b/274797771)

版本 1.4.0

2023 年 3 月 22 日

发布了 androidx.compose.ui:ui-*:1.4.0版本 1.4.0 中包含这些提交内容。

自 1.3.0 以来的重要变更

  • 添加了新的 PinnableContainer API 以允许固定延迟列表项,这样它们在滚出边界时不会被处置。例如,Modifier.focusable() 使用此机制来固定当前聚焦的项。(Ib8881b/259274257b/195049010
  • 使用新的实验性 Modifier.Node API 重写了聚焦系统。(I7F4D7b/247708726b/255352203b/253043481b/247716483b/254529934b/251840112b/251859987b/257141589
  • 在 Surface 上添加了 IsContainer 语义属性。此属性将在稍后的更改中使用,它会根据 Surface 等元素的语义含义确定遍历顺序。(I63379)
  • 添加了新的无障碍角色 DropdownList。这可用于在聚焦 android.widget.Spinner 时复制 TalkBack 的行为。(I177e5b/236159001
  • 现在,您可通过使用 PlatformTextStyle(emojiSupportMatch) 酌情为单个段落停用表情符号支持处理。(Ia7100b/139326806
  • 现在,Android Compose 界面测试将在执行进入空闲状态的帧时(例如通过 waitForIdle)运行每一帧的布局传递。这可能会影响对各个布局动画帧进行的测试。(I8ea08b/222093277
  • TextStyle 添加了实验性 TextMotion,以将 Text 定义为 Static(default) 或 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 的 LazyRowsLazyColumns 特别有用。(I3f10db/230099236
  • 引入了新的低级别 PlatformTextInputAdapter API,用于构建直接与平台 API 通信的自定义文本输入实现。(I58df4

bug 修复

  • BasicTextFieldSetText 语义操作现在将使用与 IME 更新和测试函数相同的代码路径(例如 performTextReplacement)更新文本缓冲区。
  • 文本测试函数 performTextClearanceperformTextReplacementperformTextSelection 现在使用 SemanticsActions。(I0807db/269633168b/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 以正确重置聚焦状态。(I65495b/265201972
  • DrawScope.drawTextParagraph.paintMultiParagraph.paint 方法添加了 BlendMode 参数,以支持在画布上绘制文本时的不同混合算法。(I57508)

bug 修复

  • 改进了无障碍功能焦点顺序算法,例如,顶部/底部栏的读/写频率都会提高 (74e9c5)

版本 1.4.0-beta01

2023 年 2 月 8 日

发布了 androidx.compose.ui:ui-*:1.4.0-beta01版本 1.4.0-beta01 中包含这些提交内容

API 变更

  • PinnableContainer.PinnedHandle.unpin() 已重命名为 release() (I4667a)
  • ComposeTestRule 添加了 waitUntilNodeCountwaitUntilAtLeastOneExistswaitUntilExactlyOneExistswaitUntilDoesNotExist 作为实验性 API,从而扩展 waitUntil API 以接受任何匹配器和任意数量的节点。如需查看更多文档,请参阅 ComposeTestRule。(Ifa1b9b/226934294
  • 已将 Font.MaximumAsyncTimeout 重命名为 Font.MaximumAsyncTimeoutMillis。(I07af5)
  • 移除了 GoogleFont.Provider.AllFontsListUri,改为在 ktdoc 中进行关联。(I16f29)

bug 修复

  • 添加了有关 AndroidFont.fontVariationSettings 的文档 (I7d9e2)

版本 1.4.0-alpha05

2023 年 1 月 25 日

发布了 androidx.compose.ui:ui-*:1.4.0-alpha05版本 1.4.0-alpha05 中包含这些提交内容

API 变更

  • 为接受 CoroutineContext 参数的 runComposeUiTest 函数和 create*ComposeRule 函数引入了新的实验性过载。上下文将用于测试组合以及其中的 LaunchedEffectrememberCoroutineScope() 调用。(I10614b/265177763
  • 添加了用于跟踪一维速度的新 API (If5a82)
  • FocusRequester 现在标记为 @Stable。(I580ee)
  • 从接受 usePlatformDefaultWidth 参数的 DialogProperties 构造函数中移除了一个实验性注解。(Ic4048)
  • 在路径上一定距离的计算位置和切线上新增了函数 - 使用 PathMeasure.getPosition()PathMeasure.getTangent() (I3b47c)
  • 移除了 PlatformParagraphStyle 上意外公开的公开 setter。(I07f47)
  • 内联/已废弃的隐藏函数的更多类型/可为 null 性 (I24f91)
  • 添加了 AnnotatedString.hasStringAnnotations 以查询没有分配资源的注解。(I94dfeb/246960758
  • 添加了适用于 TextMeasurer.measure 函数的新过载,它接受 String 作为文本。(I47b2db/242705342
  • TextStyle 中的 LineBreakHyphens API 已升级为稳定版。(Ic1e1d)

外部贡献

  • TextInputSessionTextInputService 中的 notifyFocusedRect 方法不会再次废弃。(I23a04b/262648050

版本 1.4.0-alpha04

2023 年 1 月 11 日

发布了 androidx.compose.ui:ui-*:1.4.0-alpha04版本 1.4.0-alpha04 中包含这些提交内容

新功能

  • 添加了新的 PinnableContainer API 以允许固定延迟列表项,这样它们在滚出边界时不会被处置。例如,Modifier.focusable() 使用此机制来固定当前聚焦的项。(Ib8881b/259274257b/195049010
  • 使用新的实验性 Modifier.Node API 重写了聚焦系统。(I7F4D7b/247708726b/255352203b/253043481b/247716483b/254529934b/251840112b/251859987b/257141589
  • 在 Surface 上添加了 IsContainer 语义属性。此属性将在稍后的更改中使用,它会根据 Surface 等元素的语义含义确定遍历顺序。(I63379)
  • 新增了无障碍功能角色 DropdownList。这可用于在聚焦 android.widget.Spinner 时复制 TalkBack's 行为。(I177e5b/236159001
  • 现在,您可通过使用 PlatformTextStyle(emojiSupportMatch) 酌情为单个段落停用表情符号支持处理。(Ia7100b/139326806
  • 现在,Android Compose 界面测试将在执行进入空闲状态的帧时(例如通过 waitForIdle)运行每一帧的布局传递。这可能会影响对各个布局动画帧进行的测试。(I8ea08b/222093277
  • TextStyle 添加了实验性 TextMotion,以将 Text 定义为 Static(default) 或 Animated。如果要通过动画缩放、平移或旋转文本,请使用 TextMotion.Animated。(I24dd7)

API 变更

  • drawText 中的 maxSize: IntSize 参数替换为 size: Size,以便内嵌于其他 DrawScope 函数。size 默认设为 Size.Unspecified,这应该不会更改之前的默认行为。(Icd27d
  • 移除了已废弃的实验性字体构造函数。(I8a724b/261435386
  • 界面工具数据类 Group 现在具有 isInline 字段,可指明群组是否用于调用内嵌可组合函数。如果 isInlinetrue,则会调用内嵌可组合函数。不过,如果调用对象是来自模块的内嵌可组合函数,而且相应模块是由不会生成内嵌函数信息的 Compose 编译器插件版本编译的,则该值可能是 false。(Idb846)
  • 将之前的一些实验性 API 升级到了稳定版
  • Rotary Scroll Event API 现已稳定(I42ad3b/261561229
  • FontVariation API 现已稳定(I8779fb/241016309
  • 所有 Font() 构造函数现在都是稳定版 API(I5948bb/261435386
  • DeviceFontFamilyName 现已稳定(I8b640b/261435386
  • 包含 variationSettingsAndroidFont 构造函数现在是稳定版 API,可用于创建新型字体描述符。(I5adccb/261565807
  • createFontFamilyResolver API 现已稳定。这可用于捕获异步字体加载期间未捕获到的异常。(Ibb481b/261435386
  • Font.loadingStrategy API 现已稳定。(I5937cb/261435386
  • GoogleFont API 现已稳定。(Ic90b0b/261435386
  • TextUnit(float, TextUnitType) 现在是稳定版 API。(I90c84b/261561612
  • pluralStringResource 现在是稳定版 API。(I09849b/261439703

版本 1.4.0-alpha03

2022 年 12 月 7 日

发布了 androidx.compose.ui:ui-*:1.4.0-alpha03版本 1.4.0-alpha03 中包含这些提交内容

API 变更

  • PointerIcon 中移除了 ExperimentalComposeUiApi (I23af8)
  • 引入了页面无障碍操作:PageUpPageDownPageLeftPageRight。请注意,只有 API 29 及更高级别才支持这些操作。(Ida4ab)
  • rememberNestedScrollConnection 参数视图从根视图更新为托管视图。(Ia5200)
  • 添加了 Modifier API,用于查询祖先实体滚动信息。(I2ba9db/203141462
  • 在手势可以变为滚动事件时,用于在 Clickable 中正确延迟按下互动。
  • 修复了在 Scrollable ViewGroup 内使用时 Clickables 无法正确延迟涟漪效果的问题。
  • 更新了抽屉式导航栏和表格,以便在手势可变为滚动事件时正确延迟按下操作。
  • CompositingStrategy.Always 重命名为了 Offscreen,以表明 graphicsLayer 将始终渲染到中间缓冲区 (I47dc1)
  • 具有多个内容槽时布局过载的问题现已稳定(I10566b/248294649
  • 在测试中添加了新的实验性 API PerfettoTrace.record {}PerfettoTraceRule,用于捕获 Perfetto 跟踪记录(也称为 System Tracing),以检查测试行为和性能。(I3ba16)
  • 在使用 Compose 规则的界面测试中,在所有帧回调运行完毕后,系统才会分派在 withFrameNanos 回调期间恢复的连续作业。这与在正常运行时 Compose 的行为一致。不过,依赖旧行为的测试可能会失败。这应该只会影响直接调用 withFrameNanoswithFrameMillis 的代码,并会将回调之外的逻辑传递给可能需要在回调内部移动的那些函数。如需查看相关示例,请参阅此 CL 中的动画测试变更。
  • TestMonotonicFrameClock 构造函数和工厂函数添加了可选的 onPerformTraversals: (Long) -> Unit 参数,以便在执行 withFrameNanos 回调之后、恢复调用方的协程之前运行代码。(Idb413b/254115946b/222093277b/255802670
  • 向 Compose 添加了 EmojiCompat(Ibf6f9b/139326806
  • @Preview 添加了新的壁纸参数,以支持动态配色 (I9f512)

bug 修复

  • 现在,系统会在 Recomposer 应用更改完成后发送快照应用通知。(Iad6c0b/222093277
  • captureToImage 中引入了更改,以允许捕获多窗口屏幕截图。这对于使用 Compose PopUp 的屏幕截图测试很有用。(I169c5)

依赖项更新

  • 现在,Compose UI 和 Compose Material 依赖于 Lifecycle 2.5.1。(I05ab0b/258038814

版本 1.4.0-alpha02

2022 年 11 月 9 日

发布了 androidx.compose.ui:ui-*:1.4.0-alpha02版本 1.4.0-alpha02 中包含这些提交内容

API 变更

  • 更新了 GraphicsLayerScope,以显示 graphicsLayer 的当前大小。这有助于计算 graphicsLayer 转换作为可组合项尺寸的函数。(If8c43b/181387080
  • 引入了 CompositingStrategy,以判断何时利用屏幕外合成层渲染 graphicsLayer 内容。如果应用了 alpha 或 RenderEffect/Overscroll,Auto 会保留在内部使用某个层的默认行为。Always 会始终引入一个屏幕外缓冲区,其中 ModulateAlpha 会避免使用屏幕外缓冲区,并改为逐一调节 graphicsLayer 中记录的绘图指令。使用 ModulateAlpha 时,系统仍会利用 RenderEffect/Overscroll 所用的屏幕外缓冲区(I25e82b/256382834
  • Modifier.Node 添加了 invalidateSubtree(),以允许使布局和绘图的整个层次结构失效。(I4bd90)
  • rememberNestedScrollInteropConnection 升级为稳定版。引入了将根视图传递给 rememberNestedScrollInteropConnection 的功能。这有助于自定义视图更好地响应滚动限制条件,尤其是在非标准视图(例如 ModalBottomSheetDialog)中。(I9e107)
  • 添加了 ObserverNode 接口,可供 Modifier.Node 实现用于在先前读取的值发生更改时接收通知(I5728Bb/247716483
  • Paint 添加了一个可接受原生 android.graphics.Paint 的构造函数。此外,还添加了一个扩展函数 toComposePaint(),可将现有的原生 Paint 对象转换为 Compose Paint。(Ica91b)
  • 添加了适用于 Android 的 FontFamily.Resolver.resolveAsTypeface。(I8950b)
  • 添加了 ToolingState,以允许工具更改可组合项的内部状态 (Ie6614)
  • 重构工具,以更好地支持新增的动画 (I8677b)
  • 在 Material 和 Material3 Text、TextFieldOutlinedTextField 中添加了 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()。(Iffc3fb/251260206
  • 废弃了 androidx 中对无障碍对象的回收。我们发现,即使在最早的受支持版本中,性能变化也微不足道。(I0a961)
  • TextStyleSpanStyle 添加了 DrawStyle 作为实验性属性,以支持绘制框状文本。(If24b8b/155421273
  • AnnotatedString.Builder 现在实现了 kotlin.text.Appendable。(I1a061b/231030444
  • AnnotatedString.Builder 现在提供了 append(AnnotatedString, start: Int, end: Int) 方法,用于附加 AnnotatedString 的子字符串和相交样式。
  • ParagraphMultiParagraph 绘制函数添加了 DrawStyle 参数,以支持绘制框状文本。(Ic8102b/155421273

外部贡献

  • 感谢 vighnesh 将 TV 设备添加到预览版 (Ie15cd)

版本 1.3

版本 1.3.3

2023 年 1 月 11 日

发布了 androidx.compose.ui:ui-*:1.3.3版本 1.3.3 中包含这些提交内容

bug 修复

  • 修复了以下问题:在 Android 9 上,当 Activity 保存 Compose View 状态时,系统间或会发生崩溃。(I0b755b/260322832

版本 1.3.2

2022 年 12 月 7 日

发布了 androidx.compose.ui:ui-*:1.3.2版本 1.3.2 中包含这些提交内容

bug 修复

  • 更新为了使用 Profobuf 3.21.8,这样可避免 protobuf-javalite:3.19.4 中出现安全提醒 (CVE-2022-3171) (b/255545055)

版本 1.3.1

2022 年 11 月 9 日

发布了 androidx.compose.ui:ui-*:1.3.1版本 1.3.1 中包含这些提交内容

版本 1.3.0

2022 年 10 月 24 日

发布了 androidx.compose.ui:ui-*:1.3.0版本 1.3.0 中包含这些提交内容

自 1.2.0 以来的重要变更

  • 新的实验性 API 套件 LookaheadLayout(实现了先前无法实现的动画行为)
  • 新的实验性 API 套件 Modifier.Node(以替代 Modifier.composed 的更高性能 API 套件)
  • 改进了窗口边衬区支持。
  • 为 LazyList 中的方向键和硬件键盘提供了焦点支持。
  • 对话框和弹出式窗口支持的最大高度已降低至 8dp(针对某些自定义设计系统的行为破坏性变更 – 理由请参阅 beta01 版本说明
  • 多项次要的、非破坏性 API 改进
  • 修复了许多 bug 并提升了性能

版本 1.3.0-rc01

2022 年 10 月 5 日

发布了 androidx.compose.ui:ui-*:1.3.0-rc01版本 1.3.0-rc01 中包含这些提交内容

API 变更

  • 新增了实验性 API Hyphens,以支持在文本中自动断字 (Iaa869)

bug 修复

  • 默认情况下,DeviceFontFamilyName 字体不会配置 wghtital 变体设置,而是为已加载的 Typeface 使用平台设置。(Ia7a6db/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 变更

  • 添加了用于自定义文本换行的选项。(I86907)
  • TextMeasurer.measure 方法中的 size:IntSize 参数更改为 constraints: Constraints,以符合最小宽度限制。(I37530b/242707525

bug 修复

  • 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.InFocusDirection.Out,取而代之的是 FocusDirection.EnterFocusDirection.Exit。(Ia4262b/183746982
  • 添加了两个新的焦点属性 enter 和 exit,用于为 FocusManager.moveFocus(Enter)FocusManager.moveFocus(Exit) 指定自定义行为。(I5f3f9b/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.Element 实例并协调其在 LayoutNodes 上的行为的层。实际上,这次重构不影响 Compose 中任何修饰符的公共 API,因此可以视为仅针对实现的变更。尽管如此,由于多方面原因,这仍是一次重大变更。(Ie4313)

更改摘要

添加的实验性 Modifier.Node API 提供了一个抽象,允许在布局节点的整个生命周期内保持的实例上保留状态,而且根据生成该抽象的 Modifier.Element 的布局节点和用途进行分配。

从广义上讲,这种抽象提供了一种生成有状态修饰符的替代方法,而无需依赖 Modifier.composed API 的机制。

风险

此变更与以前的版本严格保持二进制兼容,以便在可观察行为方面尽可能实用、合理地向后兼容。虽然如此,此次重构触及了绝大多数 Compose 子系统,而且有可能行为变更的方式不在测试范围内,因此没有被发现和修复。

请谨慎考虑是否升级到此版本。如果您认为这对您造成了不利影响,请告知我们。

实验性 API

添加了各种实验性 API,这些 API 都与“修饰符节点”的新概念相关。创建 Modifier.Node 的原因是:

  • fun modifierElementOf(…): Modifier
  • abstract class ModifierNodeElement
  • abstract class Modifier.Node
  • abstract class DelegatingNode
  • interface LayoutModifierNode
  • interface DrawModifierNode
  • interface SemanticsNode
  • interface PointerInputNode
  • interface ModifierLocalNode
  • interface ParentDataModifierNode
  • interface LayoutAwareModifierNode
  • interface GlobalPositionAwareModifierNode
  • interface IntermediateLayoutModifierNode

行为破坏性变更

对话框和弹出式窗口中支持的最大高度已降低至 8dp。

Compose 对话框和弹出式窗口支持的最大高度已从 30dp 降低至 8dp。此变更会影响 Material 和界面自定义对话框以及弹出式窗口。此变更是为了缓解低于 Android S 的版本中存在的无障碍功能 bug,以及确保这些窗口中的无障碍服务能够与对话框或弹出式窗口中的内容互动。

只有当您要创建的自定义对话框或弹出式窗口实现的高度设置为高于 8dp 的水平时,您才会受此变更的影响。请考虑降低对话框或弹出式窗口的高度。如果您需要选择停用此新行为,可以考虑使用所需的高度设置创建您自己的对话框或弹出式窗口分支。不建议这样做,因为无障碍功能可能会受到负面影响,并且开发者需要确保无障碍服务可以对相应对话框或弹出式窗口的底部进行互动和读取。

API 变更

  • 修复了配置更改时 painterResource 无法更新的问题(I58e73b/228862715
  • rememberTextMeasurer 不再接受 FontFamily.ResolverDensityLayoutDirection 参数。请使用 TextMeasurer 构造函数为这些参数提供自定义值。(Ia1da3)
  • 添加了 DialogProperties.decorFitsSystemWindows 属性,以允许 Dialog 支持 WindowInsets。(I57742b/229378542
  • 将字体构造函数移回原来的 Kotlin 文件,以保持二进制兼容性。与上一个稳定版相比没有变化。(Ieb2f3)
  • 从多个 equals 定义中移除了不必要的运算符 - 这不会产生任何影响。(I6c309)
  • FontVariation.Setting 是一个允许限制未来 API 取值的封装接口。(I11021b/143703328
  • SlotTree.kt 中添加了 CompositionGroup.findParameters。这允许工具无需解析整个槽表即可检索 CompositionGroup 的参数。(I124fe)

版本 1.3.0-alpha03

2022 年 8 月 10 日

发布了 androidx.compose.ui:ui-*:1.3.0-alpha03版本 1.3.0-alpha03 中包含这些提交内容

API 变更

  • LayoutCoordinates.findRootCoordinates() 现已公开(I7fa37b/204723384
  • 添加了实验性 API,用以在 PlacementScope 中获取 LayoutCoordinates。这可让开发者知道当前布局要相对于子项位置放置该子项的位置。(I5482bb/238632578
  • 添加了 LayoutCoordinates.transformFrom,用于获取从一个 LayoutCoordinates 到另一个 LayoutCoordinates 的矩阵变换。(Ic5ab1b/238632578
  • 废弃了 SemanticsModifier.id 并将语义 ID 移到了 LayoutInfo.semanticsId。(Iac808b/203559524
  • 资源字体现在支持设置字体变体设置(API 26 及以上级别)。(I900ddb/143703328
  • DeviceFontFamilyNameFont 中支持可变字体(Ic1279b/143703328
  • 字体构造函数现在接受 FontVariation.Setting 列表,用于在搭载 Android O 及更高版本的设备上配置可变字体。(I11a9db/143703328
  • 添加了用于定义和使用可变字体的 FontVariation API。(I3c40cb/143703328
  • LineHeightStyle.Alignment 构造函数现已公开(实验性)(I4bbbeb/235876330
  • Paragraph 现在是 expect|actual 并且针对 Android 和桌面设备进行了定义。(Id387eb/239962983
  • Paragraph 接口现在为密封的 Paragraph 接口。没有展示如何将段落子类化的用例,建议您进行咨询,了解此项变更是否会对您造成影响。(If5247b/239962983
  • PlatformTextStyleLineHeightStyle 中移除了实验性注解。(I64bef)
  • 废弃了 TextInputService.show|hideSoftwareKeyboard。请改为在应用代码中使用 SoftwareKeyboardController,并在 IME 管理代码中使用 TextInputSession。(I14e4cb/183448615
  • 为现有动画类型添加了新的 API (I26179)

bug 修复

  • 向在 SDK 33 及更高版本中需要授予 POST_NOTIFICATIONS 权限的 API 添加了 @RequiresPermission。(Ie542eb/238790278

版本 1.3.0-alpha02

2022 年 7 月 27 日

发布了 androidx.compose.ui:ui-*:1.3.0-alpha02版本 1.3.0-alpha02 中包含这些提交内容

API 变更

  • 添加了一个新属性 PointerInputChange#pressure,以检索压力。(I45a5eb/205164819
  • 添加了 rememberTextMeasurer,以便在组合中轻松创建并记住 TextMeasurer 实例。(I8d66e)
  • RectRoundRectMutableRect 现在支持使用 Kotlin in 语法调用 contains 函数。(Ie42b0b/238642990
  • KeyInjectionScope 中移除了不必要的函数,因为这些函数可通过 API 中较为简单的部分轻松实现。已移除的函数包括 pressKeyskeysDownkeysUp。(I81d77)
  • 重构了 KeyInjectionScope 中的常量和参数名称,以便在前述常量和参数的单位为毫秒时添加后缀“Millis”。(Iabef5)
  • EditCommand 中添加了 toStringForLog() 方法,以帮助排查文本编辑问题。(I53354b/228862731
  • DrawScope 中添加了 drawText 扩展函数,以便在 DrawScope 上运行的可组合项和修饰符(如 CanvasdrawBehind)中绘制多样式文本。(I16a62b/190787898
  • 引入了一个名为 TextMeasurer 的新实验性 API,该 API 可实现任意文本布局计算,从而创建与 BasicText 相同的结果(独立于 Compose 运行时)。(I17101)
  • SlotTree.kt 中添加了 mapTree。这样,工具就可以像 asTree 一样检查 SlotTree,而不需先制作内存副本。对于布局检查器而言,这会使性能提升约 10 倍。(I5e113)
  • Compose 预览改成了存储在二进制输出文件中,以允许开发者编写和重复使用来自库的 MultiPreview 注解。(I85699b/233511976

bug 修复

  • 在向 Velocity Tracker 添加 InputEventChange 事件时,我们将考虑增量而不使用位置,这将确保在所有情况下都能正确计算速度,即使目标元素移动也是如此(Icea9db/216582726b/223440806b/227709803
  • 修复了存在注解时因 AnnotatedString.toUpperCase 而导致的 NPE。(I0aca2b/210899140

版本 1.3.0-alpha01

2022 年 6 月 29 日

发布了 androidx.compose.ui:ui-*:1.3.0-alpha01版本 1.3.0-alpha01 中包含这些提交内容

API 变更

  • 新增了 LookaheadLayout,支持在实际测量/布局之前进行先行传递。这样,就可以在布局变化时预先计算布局,同时允许先行传递之后的测量/布局使用预计算的尺寸/位置为朝向目标移动的尺寸和位置添加动画效果。尚不支持 SubcomposeLayouts,不过会在未来版本中提供支持。(I477f5)
  • TextStyleSpanStyle 的 Brush 变种添加了可选 Alpha 参数,以修改整个 Text 的不透明度。(Ic2facb/234117635
  • 引入了 UrlAnnotation 注解类型及相关方法,以支持 AnnotatedString 中的 TalkBack 链接。(I1c754b/231495122
  • 将实用功能移至运行时 (I4f729)

bug 修复

外部贡献

  • 新增了一个 API WindowInfo.keyboardModifiers,用于在可组合函数中或通过 snapshotFlow 观察其状态 (Icdb8a)

版本 1.2

版本 1.2.1

2022 年 8 月 10 日

发布了 androidx.compose.ui:ui-*:1.2.1版本 1.2.1 中包含这些提交内容

bug 修复

  • 修复了检查器中的 nullpointer (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 列表的焦点驱动滚动可正常起作用
    • FocusOrderFocusProperties 中的新行为自定义 API
    • 改进了实体键盘或电视遥控器的相关行为
  • 添加了适用于以下项的新 API:

    • 窗口边衬区
    • 手势驱动型动画、无限动画和布局动画的核心基元
    • GraphicsLayer 功能,包括 RenderEffect
  • 修复了许多 bug 并提升了性能

版本 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 添加了高阶函数,用于在其他按键被按下或切换为开启状态时注入按键事件。这些函数包括 withKeysDownwithKeysToggled 等。此外,还添加了用于检查特定元键是否按下的属性,例如,isCtrlDown 可用于检查是否按下了任一控制键。如需查看有关每个函数的文档,请参阅 KeyInjectionScope。(I9f6cdb/229831515
  • 引入了实验性 OverscrollEffect,以允许实现自定义滚动效果,以及接受它的 Modifier.scrollable 过载。
  • 实验性 LocalOverScrollConfiguration 已从 foundation.gesture 移至 foundation 软件包,并重命名为 LocalOverscrollConfigurationIf19fbb/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 变更

  • KeyInjectionScope 添加了 pressKeyTimesisCapsLockOn 以及相关代码。此外,该 API 现在支持鼠标和键盘组合注入模式,例如在按下元键的同时点击鼠标按钮。(I4c8dab/229831515
  • 添加了对注入按键事件的实验性支持。在通过 performMultiModalInput 执行多模式输入手势时,使用 performKeyInput 发送按键事件,或通过 MultiModalInjectionScopekey 属性发送这些事件。如需查看相应 API 的文档,请参阅 KeyInjectionScope。(Ic5000b/229831515
  • 添加了新的 GoogleFont.Provider.AllFontsListUri,用于检索 Android 支持的 Google Fonts 的规范互联网源代码。
  • 改进了当在 Compose 中无法加载 GoogleFonts 时重新抛出的错误消息。(I0416c)

bug 修复

  • 在向 Velocity Tracker 添加 InputEventChange 事件时,我们将考虑增量而不使用位置,这将确保在所有情况下都能正确计算疾速,即使目标元素移动也是如此(I51ec3b/216582726b/223440806b/227709803
  • 现在,从“快捷设置”图块切换后,系统会立即对可组合项应用 Show Layout Bounds 设置,而无需离开并重新进入 activity。(I843d5b/225937688
  • 无障碍字符串查询不会触发字体加载。以前,它会尝试加载 StyleSpans 的字体,如果 FontFamily.Resolver 被覆盖,会导致崩溃。(I4609d)
  • 当光标位于文本字段末尾时,按向前删除键将不再崩溃。
  • DeleteSurroundingTextCommandDeleteSurroundingTextInCodePointsCommand 现在要求其构造函数参数为非负数。(Ica8e6b/199919707

版本 1.2.0-beta02

2022 年 5 月 18 日

发布了 androidx.compose.ui:ui-*:1.2.0-beta02版本 1.2.0-beta02 中包含这些提交内容

API 变更

  • 在其他预览类型中重用功能 (I19f39)

bug 修复

  • 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 的自定义实现在为超出可见边界的项布局时使用(Ifabfbb/184670295
  • 现在,Modifier.composed 的键控版本已改为稳定版 API(Ie65e4b/229988420
  • 简化了 rememberNestedScrollConnection API,以使用 CompositionLocal 获取当前视图信息 (I67ca7)
  • 现在可以使用 @file 前缀在文件范围内使用 @ComposableTarget 注解和标有 @ComposableTargetMarker 的注解。在文件范围内使用目标注解将使编译器假定文件中的所有可组合函数都要以关联的 Applier 为目标。例如,使用 @file:UiComposable 即会声明所有 @Composable 函数均以 Compose 界面 Applier 为目标。如果某个函数需要以其他 Applier 为目标,则必须为所需 Applier 明确提供目标标记注解。(I40804)
  • 引入了新的独立于平台的实验性测试 API(interface ComposeUiTestfun runComposeUiTest(block: ComposeUiTest.() -> Unit)),可用于运行 Compose 界面测试,而无需使用 TestRule。如需在没有 ComposeTestRule 的情况下运行测试,请将测试作为 lambda 传递到 runComposeUiTest,并使用接收器范围 ComposeUiTest 中的方法和成员(与 ComposeContentTestRule 中相同)。

    添加了 Android 专用的 interface AndroidComposeUiTestfun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit),以提供对底层 Activity 的访问权限,类似于 AndroidComposeTestRule。如需使用更多控制功能,您可以自行实例化 class AndroidComposeUiTestEnvironment

    桌面实现为 class DesktopComposeUiTest,但目前未提供桌面专用的运行函数。

    您可以按如下方式将测试从 ComposeTestRule 迁移到 ComposeUiTest(Android 示例)。From:

    @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()
        }
    }
    
  • 目前,ComposeContentTestRuleComposeTestRule 并非从 ComposeUiTest 扩展,这意味着 ComposeUiTest 中的扩展函数目前无法在 TestRule 接口上调用。当 ComposeUiTest 升级为稳定版 API 后,ComposeContentTestRuleComposeTestRule 将改为从 ComposeUiTest 扩展。(Ib4e90)

  • LineHeightBehavior 已重命名为 LineHeightStyle

  • LineVerticalAlignment 已重命名为 LineHeightStyle.Alignment

  • LineHeightTrim 已重命名为 LineHeightStyle.Trim

  • 移除了 LineHeightStyle 中的默认构造函数值(I582bfb/181155707

  • TextStyleSpanStyle 添加了 Brush,以提供使用渐变颜色绘制文本的方法。(I53869b/187839528

  • LineHeightBehaviortrimFirstLineToptrimLastLineBottom 属性已更改为单个枚举:LineHeightTrimLineHeightTrim 具有由 2 个布尔值定义的 4 个状态值:FirstLineTopLastLineBottom、Both 和 None(Ifc6a5b/181155707

  • TextStyleParagraphStyle 添加了 LineHeightBehaviorLineHeightBehavior 控制行高是应用于第一行的顶部还是最后一行的底部。它还定义了 TextStyle(lineHeight) 提供的空间中的行对齐方式。

    例如,产生的行为可能类似于 CSS 通过 LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false) 定义的行为。

  • 仅当 includeFontPadding 为 false 时,trimFirstLineToptrimLastLineBottom 配置才能正常运行。(I97332b/181155707

  • PlatformParagraphStyle.lerpPlatformSpanStyle.lerp 函数已更改为顶级函数 (I9a268)

bug 修复

  • 现在,PointerInputChange::copy 文档会正确声明自身为浅层副本。(I182f5)
  • 在高度有限且无法容纳所有文本行时支持省略号(Ie528cb/168720622
  • includeFontPadding 默认处于开启状态。您可以使用 TextStyle.platformTextStyle 属性关闭 includeFontPadding。不久之后,我们将更改默认行为,但在此之前,这样使我们能够更好地集成行高改进 (aosp/2058653) 并解决 TextField 的裁剪问题。(I01423b/171394808

外部贡献

  • 现在,如果我们垂直滚动,在 Android 上 MouseInjectionScope.scroll(delta = someDelta) 与之前相反(如果 someDelta 是正值,它将向下滚动)(Ifb697b/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 是空操作,但以后允许进行一些计算,例如根据高度进行省略。(I6afeeb/168720622
  • SubcomposeSlotReusePolicy.getSlotsToRetain() 现在接受类似 MutableSet 的自定义类,该类不允许在其中添加新项。(Icd314)
  • PointerIcon 现在是一个 @Stable 接口 (I9dafe)
  • PointerInputChange 中已废弃部分使用操作(down OR 位置)。您可以借助 consume() 完全使用此更改。您可以使用 isConsumed 来确定其他人之前是否使用过此更改。
  • PointerInputChange::copy() 现在始终会创建浅层副本。这意味着,在使用完其中一个副本后,将会使用 PointerInputChange 的副本。如需创建未绑定的 PointerInputChange,请改用构造函数。(Ie6be4b/225669674
  • 按 Compose > View 的方向启用 Compose 和 View 之间的嵌套滚动互操作功能。这样,Compose 父级将能够从嵌套滚动视图接收嵌套滚动增量。(If7949b/174348612
  • 新增了 SemanticsProperty testTagsAsResourceId,可用于让 Compose 符合为 View 系统设计的 UIAutomator 测试的要求。(I39c20)
  • 使用 FontFamily.SansSerif 时,会显示 Android 中所有可用的系统字体粗细选项。在 API 21-28 上,会在内部使用后备字体名称,例如 sans-serif-medium。这是一项行为变更,因为之前 API 21-28 仅支持粗细选项 400 和 700。(I380feb/156048036b/226441992
  • Paragraph 和 Multiparagraph 指令将位置参数重新排序为在可选参数前面。(Idafaa)
  • AndroidFont 现在将 typefaceLoader 作为构造函数参数。(I2c971)

版本 1.2.0-alpha07

2022 年 4 月 6 日

发布了 androidx.compose.ui:ui-*:1.2.0-alpha07版本 1.2.0-alpha07 中包含这些提交内容

API 变更

  • 添加了新函数 Snapshot.withoutReadObservation { ... }。用户可以通过该函数运行所传递的 lambda,而无需订阅在此块中读取的状态值的更改。如果您既想从基于快照的线程安全写入/读取中受益,又希望能够在不造成非必要重组或重新测量的情况下读取值,这会对您很有帮助。(I9f365b/214054486
  • ComposeViewconsumeWindowInsets 扩展属性可让开发者停用 Android WindowInsets。这样一来,层次结构中的各个 ComposeViews 可分别应用 WindowInsets,而不会彼此干扰。(I0ef08b/220943142
  • 添加了 KeyboardType.Decimal 作为 Keyboard.Number 的替代方案,以便在 IME 中明确包含十进制分隔符。(Iec4c8b/209835363
  • PointerEventType.ScrollPointerEvent.scrollDelta 现在是稳定版 API(I574c5b/225669674
  • 针对合作 View 类启用 View 和 Compose 之间的嵌套滚动互操作功能。这意味着 Compose 现在能够将滚动增量分派给(合作)View 父级。(I5d1acb/174348612
  • 更新了 FontFamily.Resolver,以集成系统级粗体文字无障碍设置 (I6c1e7)
  • Font(AssetManager, String, ...) 已废弃,取而代之的是 Font(String, AssetManager, ...)。这是一个实验性 API。(I1c7a4)
  • 新增了字体描述符 Font(DeviceFontFamilyName),可以选择在字体回退链执行期间查找系统安装的字体。(I30468b/219754572
  • 在 TextStyle/ParagraphStyle 中添加了 includeFontPadding 的临时兼容性配置。可通过 TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false)) 更改 includeFontPadding。这是一个用来实现迁移的临时配置选项,即将被移除。(If47beb/171394808
  • 添加了 GoogleFont.Provider.isAvailableOnDevice 扩展项以获得调试帮助。(I64e31)
  • 添加了 GoogleFont.Provider 构造函数,以便与 @ArrayRes 配合使用(Ic5ee1b/225984280
  • Compose GoogleFont 现在称为 Font(GoogleFont),在其他情况下 API 会保持稳定。(I125f2)

bug 修复

  • 向 Material/Scaffold 添加了 lint 检查,以确保使用了内部内边距 (Ifb111)

版本 1.2.0-alpha06

2022 年 3 月 23 日

发布了 androidx.compose.ui:ui-*:1.2.0-alpha06版本 1.2.0-alpha06 中包含这些提交内容

API 变更

  • 添加了 RequestFocus 语义操作,用于请求将焦点置于可聚焦的目标。(I17b71)
  • 更新了矢量可绘制对象解析,以支持自动镜像,从而在当前布局方向为 RTL 时翻转 VectorPainter 的内容。(I79cd9b/185760237
  • 将阴影/环境颜色更新为 Modifier.graphicsLayer 的尾随参数,以保证 API 兼容性(I3f864b/160665122

  • GraphicsLayerScope 上添加了阴影/环境颜色的默认实现,以确保非破坏性 API 更改

  • 在 RSB 事件中添加了事件时间 (Ief8ae)

  • FocusOrder 现已合并到 FocusPropertiesfocusProperties() 现已拥有 focusOrder() 的所有功能。FocusOrderfocusOrder() 已废弃。接受 focusRequesterfocusOrder() 应与 focusProperties() 一起替换为 focusRequester() 修饰符。这样一来,修饰符可以更好地分离关注点。(I601b7)

  • 现在,同时升级 RecyclerViewCompose 可以提升以 Compose 视图作为子级的 RecyclerView 的滚动性能。

  • 添加了 ViewCompositionStrategy.Default 作为检索内置默认策略的方法

  • 添加了 ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer,这是新的默认策略,可以正确处理池容器(例如 RecyclerView)。(If7282)

  • 添加了对使用 @Preview 为注解类添加注解的支持,这是添加 Multipreview 功能的第一步。此类注解可用于为可组合方法或其他注解类添加注解,这些类随后可能会被视为用给定 @Preview 间接注解。(I12eff)

  • 向 @Preview 的设备列表添加了参照设备 (I071c9)

bug 修复

  • 更新了矢量图形 API,以使用正确的可组合注解 @VectorComposable 而不是 @UiComposable (I942bc)
  • AnnotatedString.Builder.withStyle 中移除了 crossinline (If84d5)

外部贡献

  • compose-ui:将 ambientShadowColorspotShadowColor 属性添加到了 GraphicsLayerScopeI1ba1ab/160665122
  • 现通过 pluralStringResource 函数支持复数资源。(Ib2f23b/191375123

版本 1.2.0-alpha05

2022 年 3 月 9 日

发布了 androidx.compose.ui:ui-*:1.2.0-alpha05版本 1.2.0-alpha05 中包含这些提交内容

API 变更

  • TextToolbar 现在接受 lambda 参数,而非 ActionCallback。(Ib2eb9b/197950089
  • 更新了 core 和 appcompat 中的可为 null 性,以匹配 Tiramisu DP2 (I0cbb7)
  • 测量后的接口现在公开了 parentData 属性 (I3313f)
  • Modifier.onPlacedOnPlacedModifier 接口现已稳定。(Ib5482)
  • 太棒了!现在 Compose Animation 支持开发者选项中的“Animator 时长缩放”设置了。(I5a4fcb/161675988
  • 添加了一个 BeyondBoundsLayout local 修饰符(If8b51b/184670295
  • 文本:includeFontPadding 现在默认处于关闭状态。因 includeFontPadding=false 导致的字体裁剪问题已得到解决,应该不会发生高大型文字被裁剪的情况。(I31c84b/171394808

bug 修复

  • 现在,如果您尝试在已有内容的情况下设置内容,ComposeContentTestRule.setContent 将抛出一个 IllegalStateException。(I888a5b/199631334
  • 修复了在 Android 上从剪贴板读取内容时剪贴板内容导致的崩溃问题。(I06020b/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 变更

  • 添加了 ComposableTargetComposableTargetMarkerComposableOpenTarget,以便系统在编译时报告何时以预期使用范围外的 Applier 为目标而调用了某个可组合函数。

    在大多数情况下,注解可以由 Compose 编译器插件推断出来,因此直接使用这些注解的情况应该很少。无法推断的情况包括创建和使用自定义 applier、抽象可组合函数(例如接口方法)、可组合 lambda 性质的字段或全局变量(推断出局部变量和参数),或者使用 ComposeNode 或相关可组合函数的情况。

    对于自定义 Applier,调用 ComposeNodeReusableComposeNode 的可组合函数需要为该函数和任何可组合 lambda 的参数类型添加 ComposableTarget 注解。不过,建议您创建一个带有 ComposableTargetMarker 的注解,然后使用带标记的注解,而不是直接使用 ComposableTarget。标有 ComposableTargetMarker 的可组合注解等同于用属性类的完全限定名称作为 applier 参数的 ComposbleTarget。如需查看 ComposableTargetMarker 使用示例,请参阅 anroidx.compose.ui.UiComposable。(I38f11)

  • Font(resId, ...) 目前在稳定版 API 上可接受 loadingStrategy。(Ief3d2)

  • FontLoadingStrategy 现在是稳定版 API 了。(I1ee35b/174162090

  • 支持在文本中加载异步字体(I77057b/214587005

  • 添加了用于将自定义 Font.ResourceLoader 转换为 FontFamily.Resolver 的桥接 API。(Ia0060)

bug 修复

  • 提供的 FontFamily.Resolver 会传递给 Popup 等子组合。
  • 提供的 Font.ResourceLoader 会传递给 Popup 等子组合。(I48fa5

版本 1.2.0-alpha03

2022 年 2 月 9 日

发布了 androidx.compose.ui:ui-*:1.2.0-alpha03版本 1.2.0-alpha03 中包含这些提交内容

API 变更

  • TextInputSessionTextInputService 中的 notifyFocusedRect 方法现已废弃,系统将不会调用该方法。请改用 BringIntoViewRequester。(Ia4302b/192043120b/216842427b/178211874
  • RenderNode 桩类引入了 destroyDisplayListData 方法(I1e659b/216660268
  • 新增了一个 API,可用于预先衡量您预组合的 SubcomposeLayout 的子项。(I857ea)
  • 添加了 movableContentOf,用于将可组合的 lambda 转换另一种 lambda,它会将其状态及相应节点移至其被调用的任何新位置。当上一个调用退出组合时,相应状态会暂时保留,如果对 lambda 的新调用进入组合,状态和关联的节点会移至新调用的位置。如果没有新调用加入,系统会永久移除相应状态;请注意,观察器会收到通知。

    如果在同一个组合中多次调用 movableContentOf lambda,系统会为每个调用创建新的状态和节点,随着调用退出组合和新调用进入组合,系统会按调用顺序将相应状态从第一个退出的调用移至后续进入的调用。新调用未声明的所有状态都会永久移除。(Ib4850)

  • 现在可通过 LocalFontFamilyResolver.current 使用 FontFamilyResolver

  • 添加了 createFontFamilyResolver(context)createFontFamilyResolver(context, coroutineScope),以便在 Compose 使用情况之外创建新的 FontFamily 解析器。

  • Paragraph 和 MultiParagraph 现在接受 FontFamily.Resolver

  • TextLayoutResult.layoutInput.fontFamilyResolver 现在包含用于此布局的解析器,废弃了 TextLayoutResult.layoutInput.resourceLoader,因为系统已不再使用它。(Id5a45b/174162090

  • 支持异步和可选字体加载,且具有回退行为。此路径由 Text 和 TextField 使用,并通过 FontFamilyResolver 公开

  • 支持通过 FontFamilyResolver.preload 预加载字体

  • FontFamilyResolver.setAsyncLoadContext 允许设置用于加载异步字体的全局协程上下文。(I87fe8b/174162090

  • 添加了 AndroidFont,这是一种新的低级别 API,用于在 Android 上提供新类型的字体资源描述符。例如,从应用专用后端加载字体,选择性地定位到设备上的预安装字体,或者从当前字体工厂未提供的资源加载字体。

  • 扩展了 Font.ResourceLoaded API,以支持可选和异步字体加载。建议应用开发者不要直接使用此 API。如需添加新类型的字体,请参阅 AndroidFont

  • Font.AndroidResourceLoader 扩展函数允许在组合之外构建 Font.ResourceLoader

  • 为基于资源的字体添加了 loadingStrategy 参数,以便在资源字体引用可下载字体 XML 时允许异步加载。(Ie5aeab/174162090

  • 废弃了 Typeface(FontFamily) 构造函数。它之前用于预加载字体,最多可能需要 10 秒才能预加载可下载的字体。预加载可下载的字体时,此调用可能会阻塞 10 秒。请改用 FontFamilyResolver.preload

  • 废弃了 fontResource(FontFamily): Typeface。它之前用于预加载字体,最多可能需要 10 秒才能预加载可下载的字体。请改用 FontFamilyResolver.preloadIf8e7cb/174162090

  • 接受 maxSlotsToRetainForReuseSubcomposeLayoutState 构造函数现已废弃。取而代之的是一个接受 SubcomposeSlotReusePolicy 的新构造函数;这是一个新的接口,可用于更精细地控制应保留哪些槽以便将来重复使用。(I52c4d)

  • Color 中的 HSV 和 HSL 函数作为非实验性 API 公开。Oklab 颜色空间现在是公共 API。(I08fb6b/180731008

  • 废弃了 AndroidComposeTestRule.AndroidComposeStatement,它不应在公共 API 中,并且并未以任何方式为您执行任何操作。(Ibc46b)

  • 重命名内部生成的 kt 类(Ia0b9eb/174162090

  • 移除了 FontLoadingStrategy.valuesI42a9db/174162090

  • 全局字体加载器现在称为 FontFamilyResolver。(I4f773b/174162090

  • 对桌面设备使用新的字体加载系统。(I9ce5cb/174162090

  • FontFamily.Resolver.resolve 返回 State<Any>I4406cb/174162090

bug 修复

  • 现在,当软输入模式为 ADJUST_PAN 时,如果 TextField 获得焦点并且键盘处于显示状态,TextField 会一直位于键盘上方。(I8eaebb/190539358b/192043120
  • 桌面设备对 FontFamily.Resolver 使用本地组合
  • 废弃了桌面设备 FontLoader
  • 在桌面设备上新增了 createFontFamilyResolver 工厂(I6bbbbb/174162090
  • 在文本字段之间切换焦点时,软键盘输入类型不再闪烁。(I1bf50b/187746439)

版本 1.2.0-alpha02

2022 年 1 月 26 日

发布了 androidx.compose.ui:ui-*:1.2.0-alpha02版本 1.2.0-alpha02 中包含这些提交内容

API 变更

  • 为具有旋转侧面按钮的 Wear 设备添加了 Modifier.onRotaryScrollEvent()Modifier.onPreRotaryScrollEvent()I18bf5b/210748686
  • 添加了实验性 View.createLifecycleAwareRecomposer 扩展程序 (I0cde6)

外部贡献

  • 现在,在 Android 上 PointerEvent.scrollDelta.y 与之前相反(现在,如果将鼠标滚轮向右倾斜,该参数会返回 1,而不是 -1)(Ia9811)

版本 1.2.0-alpha01

2022 年 1 月 12 日

发布了 androidx.compose.ui:ui-*:1.2.0-alpha01版本 1.2.0-alpha01 中包含这些提交内容

API 变更

  • 废弃了 FontFamily.canLoadSynchronously。此属性没有语义含义。(Ica5ef)
  • CompositionData 中添加了 identity 字段,用于在布局检查器中生成不可变的 ID。(Ic116e)
  • 向”Preview devices”列表中添加了 Wear OS 设备 ID (I93232)

依赖项更新

  • 现在依赖于 Kotlin 1.6.10

版本 1.1

版本 1.1.1

2022 年 2 月 23 日

发布了 androidx.compose.ui:ui-*:1.1.1版本 1.1.1 中包含这些提交内容

bug 修复

  • 修复了 androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList 中的 NullPointerExceptionaosp/1947059b/206677462
  • 修复了在 Android 上从剪贴板读取内容时剪贴板内容导致的崩溃问题。(I06020b/197769306
  • 修复了 LazyVerticalGrid 中的 RTL(aosp/1931080b/207510535

版本 1.1.0

2022 年 2 月 9 日

发布了 androidx.compose.ui:ui-*:1.1.0版本 1.1.0 中包含这些提交内容

自 1.0.0 以来的重要变更

  • 对 Android 12 滚动效果提供稳定支持
  • 改进触摸目标大小调整
    • 请注意,对于 Compose 1.0,Material 组件将扩展其布局空间,以符合 Material 无障碍功能指南触摸目标尺寸的要求。例如,按钮触摸目标将扩展为至少 48x48dp 的尺寸,即使您将按钮尺寸设为更小也是如此。这会使 Compose Material 与 Material Design 组件的行为保持一致,以便在混合使用 View 和 Compose 时提供一致的行为。此变更还可确保在您使用 Compose Material 组件创建界面时,能够满足触摸目标无障碍功能的最低要求。
  • 导航栏提供稳定支持
  • 将之前的一些实验性 API 升级到了稳定版
  • 支持更高版本的 Kotlin

版本 1.1.0-rc03

2022 年 1 月 26 日

发布了 androidx.compose.ui:ui-*:1.1.0-rc03版本 1.1.0-rc03 中包含这些提交内容。

bug 修复

  • 已更新为支持 Compose Material 1.1.0-rc03

版本 1.1.0-rc01

2021 年 12 月 15 日

发布了 androidx.compose.ui:ui-*:1.1.0-rc01版本 1.1.0-rc01 中包含这些提交内容

bug 修复

  • 修复了导致无障碍滚动操作缺失的 bug (I7cbfb)
  • 现在,如果 HardwareRenderer.isDrawingEnabled()false,那么通过在调用期间对其进行启用,SemanticsNodeInteraction.captureToImage() 也可以正常运行 (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 中的可为 null 性(I7078ab/204917439
  • 添加了实验性 API,让用户可以将 PointerInputchange 作为一个整体使用,或检查是否已使用 PointerInputchange。(I2e59d)
  • 在界面层中添加了对鼠标滚轮事件的支持。(Ia14ebb/198214718
  • 添加了实验性 Modifier.composed 重载,可接受用于比较相等性以及符合跳过优化条件的键。(Ice799b/205851704
  • ComposeNotIdleException 现在可从 Exception 扩展,而不是直接从 Throwable 扩展。请注意,这意味着捕获 Exception 的 catch 子句现在可能会捕获 ComposeNotIdleException,而之前的 catch 子句并不会这样做。(I9c217)

bug 修复

  • 修复了 IME 可见性发生变化时文本手柄不移动的问题。(I25f2e)

版本 1.1.0-beta03

2021 年 11 月 17 日

发布了 androidx.compose.ui:ui-*:1.1.0-beta03版本 1.1.0-beta03 中包含这些提交内容

API 变更

  • 新添加了 Modifier.onPlaced 修饰符,允许观察展示位置更改。因此,可以根据观察到的展示位置变化对子修饰符的偏移量进行进一步更改。(I558fd)
  • 移除了 InjectionScope.flush()InjectionScope.dispose()。现在,系统会像以前一样在已调用的 perform*Input() 方法结束时刷新所有事件并对作用域进行处理。(I2bed8)
  • 移除了 MultiModalInjectionScope.TouchMultiModalInjectionScope.Mouse。要为多模态手势注入触摸和鼠标事件,现在可以使用 MultiModalInjectionScope.touch()MultiModalInjectionScope.mouse(),这两者都接受具有该模态的接收器作用域的 lambda。(Idde18)

bug 修复

  • 现在会计算 TouchInjectionScope.swipeWithVelocitydurationMillis 的默认值,以使滑动可行。(I19deb)

版本 1.1.0-beta02

2021 年 11 月 3 日

发布了 androidx.compose.ui:ui-*:1.1.0-beta02版本 1.1.0-beta02 中包含这些提交内容

API 变更

  • 添加了实验性 BringIntoView API,可让您向父级发送请求,以便父级可以滚动将项目呈现到视图中(Ib918db/195353459
  • 新增了用于支持工具的动画 API。具体而言,工具可以使用这些 API 检查 Transition 中的动画及其配置。(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,可让您向父级发送请求,以便父级可以滚动将项目呈现到视图中(Ib918db/195353459
  • 新增了用于支持工具的动画 API。具体而言,工具可以使用这些 API 检查 Transition 中的动画及其配置。(I4116e)

版本 1.1.0-alpha06

2021 年 10 月 13 日

发布了 androidx.compose.ui:ui-*:1.1.0-alpha06版本 1.1.0-alpha06 中包含这些提交内容

API 变更

  • ViewRootForInspectorLayoutInfo.ownerViewId 中移除了 ExperimentalComposeUiApi (I5c2e3)
  • 为布局添加了无子项过载,提高了效率 (Ib0d9a)
  • 从需要跨模块调用的 Composer 方法中移除了 InternalCompilerApi (I1aa0b)
  • SemanticsNodeInteraction.performSemanticsAction 现在会返回调用函数的 SemanticsNodeInteraction。(I9e5db)
  • 添加了 LocalInputModeManager CompositionLocal,以检测 TouchMode/NonTouchMode。(I6a83cb/175899786
  • LayoutInfo 添加了 viewConfiguration: ViewConfiguration,以便使用者获取长按超时等指标的正确值。(I76ca6)
    • InjectionScope 添加了 viewConfiguration: ViewConfiguration,以允许测试根据长按超时或触摸溢出等指标调整输入注入。
    • 针对触摸输入和鼠标输入,将长按和点按两次的默认时长更改为基于 InjectionScope.viewConfiguration 中的值。
  • 根据包含 TextField 和 DropdownMenu 的 ExposedDropdownMenuBox 实现了 ExposedDropdownMenu (If60b2)
  • 将 dismissOnOutsideClick 添加到了 PopupProperties 中,以取代已废弃的 dismissOnClickOutside。新属性会接收点击位置和锚点边界,从而更精细地控制是否应调用 onDismissRequest。例如,这有助于防止在轻触锚点时锚点关闭。
    • 将 updateAndroidWindowManagerFlags 添加到了 PopupProperties 中,从而提供对弹出式窗口传递给 Android WindowManager 的标志的低级控制。Lambda 的参数将是根据产生 WindowManager 标记的 PopupProperties 值计算出的标记:例如 focusable。Lambda 的结果将是最终传递给 Android WindowManager 的标志。默认情况下,updateAndroidWindowManagerFlags 会使根据参数计算出的标志保持不变。仅当弹出式窗口具有非常具体的行为要求时,才应谨慎使用此 API。(I6e9f9)
  • 废弃了 Recomposer.state,取而代之的是 Recomposer.currentState,以将其类型更改为 StateFlow(Ic2ab3b/197773820
  • flush()dispose() 添加到了 InjectionScope 中。当您想立即清空所有已加入队列的事件时,以及当您想处置作用域时,可以分别使用这两个函数。(Ifb73a)
  • 添加了 performScrollToNode(matcher: SemanticsMatcher),可将可滚动容器滚动到与给定匹配器所匹配的内容。(Ic1cb8)
  • InjectionScope 现在实现了 Density,让您在使用 performTouchInput 等方法时能够在 px 和 dp 之间轻松转换。(I8fe1f)

bug 修复

  • AndroidView 现在通过 ViewTreeLifecycleOwner 和 ViewTreeSavedStateRegistryOwner 将 LocalLifecycleOwner 和 LocalSavedStateRegistryOwner 传播到其视图中。(I38f96b/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 变更

  • 添加了对修饰符间通信的支持(Id5467b/198826874
  • 为 PointerEventChange 添加了实验性历史指针。(Ic1fd8b/197553056b/199921305
  • density: DensitylayoutDirection: LayoutDirection 添加到了 LayoutInfo 中。这样,LayoutInfo 的使用者就可以正确解析 LayoutInfo 中公开的尺寸和位置。(I002f1)
  • 添加了对注入鼠标事件的实验性支持。在通过 performMultiModalInput 执行多模式输入手势的过程中,使用 performMouseInput 开始发送鼠标事件,或通过 MultiModalInjectionScopeMouse 属性发送鼠标事件。如需查看可用 API 的文档,请参阅 MouseInjectionScope。(Iaa4a8b/190493367

bug 修复

  • 修复了可滚动组合项(无论是延迟还是非延迟)在滚动方面的可访问性支持 (I6cdb0)
  • 改进了 TouchInjectionScope.swipeWithVelocity。它现在接受更广泛的输入变量,并会在无法创建滑动时建议对输入进行更改(I40fbeb/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 拦截这些调用(I9eae3b/192479655
  • 废弃了 performGestureGestureScope,它们已被 performTouchInputTouchInjectionScope 取代。(Ia5f3fb/190493367
  • SemanticsNode 中添加了包含最小触摸目标尺寸的 touchBoundsInRoot,以便开发者能够确保触摸目标满足无障碍功能最低要求。(I2e14bb/197751214
  • 重新实现了 inspectable(I927bcb/191017532
  • 更改了 inspectable 的参数名称,以匹配组合项(I3a482b/191017532
  • 引入了 performTouchInputTouchInjectionScope 来替代 performTouchInputTouchInjectionScope,为其他模式(如鼠标)铺平了道路。

    TouchInjectionScope 的方法与 GestureScope 相同,但 movePointerTomovePointerBy 除外,它们已重命名为 updatePointerToupdatePointerBy。其他所有方法都相同。

    TouchInjectionScope 的行为与 GestureScope 的行为几乎相同,但有以下两个细小差异:

    1. 如果不发送移动事件就移动指针,然后发送按下事件(换言之,使用了 updatePointerTo(),但未使用 move(),然后调用 down()),以前的实现会使相应事件时间提前,并在发送按下事件之前发送移动事件。新的实现仍会发送移动事件,但在此具体情形下不会使该事件时间提前。
    2. 如果不发送移动事件就移动指针,然后发送释放事件(类似于上述操作),以前的实现会使相应事件时间提前,并在发送释放事件之前发送移动事件。新的实现不会执行这两种操作:指针的新位置只能通过释放事件来体现。

    最后,TouchInjectionScope 引入了新方法 currentPosition(pointerId: Int),以获取给定指针的当前位置。(If1191b/190493367

bug 修复

  • 在裁剪时允许将触摸目标边界扩展到裁剪区域之外,以适用最小的触摸目标。(I43e10b/171509422
  • 在 Android 12 设备上添加了对拉伸滚动的支持。(Iccf3cb/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,使其依赖于 Kotlin 1.5.30。(I74545)

API 变更

  • 添加了用于封装其他修饰符的 Modifier.inspectable。(I1909bb/191017532
  • 添加了 BlurredEdgeTreatment API,用以将模糊处理用例简化为更常用的“裁剪标志-TileMode”组合。大多数用例都包括:让经过模糊处理的内容在原始内容边界之外呈现,并使用透明黑色对这些边界之外的区域进行模糊处理,或者将内容裁剪到内容边界,以对超出内容边界的模糊内核的最近边缘进行采样。(I6b4b7b/166927547
  • 添加了对 Compose 桌面中 RenderEffect 的支持。引入了 OffsetEffect 和模糊处理修饰符,作为一种向部分组合层次结构引入模糊处理视觉效果的简单方法。(I0f6aab/166927547
  • 引入了 RenderEffect API,可以选择在 Modifier.graphicsLayer 上对其进行配置以更改层本身的内容。这可用于对组合层次结构中的可组合项和可组合子项的内容进行模糊处理。(I47c4db/166927547
  • AwaitPointerEventScope 现在具有 withTimeout() 和 withTimeoutOrNull()(I507f0b/179239764b/182397793
  • 向 ViewConfiguration 添加了最小触摸目标尺寸,用于在语义和指针输入中确保无障碍性。(Ie861c)
  • 添加了 TileMode.Decal 支持,用于为基于模糊处理的 RenderEffect 定义边缘行为。(I7e8edb/166927547
  • performScrollToIndexperformScrollToKeyhasScrollToIndexActionhasScrollToKeyAction 现在是稳定的 API(I142aeb/178483889
  • 添加了用于获取裁剪边界的测试方法。(I6b28e)

bug 修复

  • 从 BlurredEdgeTreatment 中移除了 isBounded 方法,从而明确检查形状参数是否为 null。(I85d68)

版本 1.1.0-alpha02

2021 年 8 月 18 日

发布了 androidx.compose.ui:ui-*:1.1.0-alpha02版本 1.1.0-alpha02 中包含这些提交内容

API 变更

  • PointerEvent 现在支持读取鼠标按钮状态和键盘修饰符状态。(I6310cb/180075467
  • 注入的手势现在使用 MainTestClock 的时间作为时间的可信来源。performGesture 中注入事件的当前时间将初始化为 MainTestClock 的当前时间。(Ifb364b/192064452
  • 添加了 DpRect(DpOffset, DpSize) 构造函数(I2cf16b/194219828
  • 添加了 DpSize 类(I7abb1b/194219828

bug 修复

  • 更新了矢量图形 XML 解析,以支持将 ColorStateList 用作 VectorDrawables 中的根颜色着色属性。(I86915b/195668138

版本 1.1.0-alpha01

2021 年 8 月 4 日

发布了 androidx.compose.ui:ui-*:1.1.0-alpha01版本 1.1.0-alpha01 中包含这些提交内容

API 变更

  • 现在,RelocationRequester.bringIntoView 可以接受矩形作为参数,这让我们可以将可组合项的一部分呈现在视图中。(Ice2c5b/194330245
  • AnimatedImageVector 和相关 API 现在位于新的 androidx.compose.animation:animation-graphics 模块中。(I60873)
  • 添加了实验性修饰符来处理重定位请求。(I65a97b/178211874
  • 引入了 BrushPainter API,以便支持在 Painter 中绘制任意 Brush(类似于 ColorPainter)。

    更新了 Brush API,以使其具有一个在 BrushPainter 中查询的固有尺寸参数(Ia2752b/189466433

  • 已将消耗来源和目标 rect 的 DrawScope#drawImage 方法更新为消耗可选的 FilterQuality 参数。对于想要在针对基于像素的艺术作品扩大时呈现像素化风格的像素艺术作品而言,此变更非常有用。已将 BitmapPainter + Image 可组合项更新为还可以消耗可选的 FilterQuality 参数(Ie4fb0b/180311607

  • 添加了 GestureScope.advanceEventTime 方法,以便更好地控制手势中的事件时间 (Ibf3e2)

bug 修复

  • 为了更好地支持链接绘制修饰符,请确保 Modifier.paint 实现会调用 drawsContent。以前,Modifier.paint 需要是修饰符链的叶节点,但是这样做会妨碍在可组合容器(如方框)上对其进行配置,或在其上添加其他装饰(如 Modifier.paint().border())。通过让 Modifier.paint 在绘制指定 Painter 的内容后调用 drawContent,我们可以在具有修饰符格式的行为中实现更好的行为一致性。(Ibb2a7b/178201337b/186213275
  • 对话框现在根据平台大小调整行为进行调整。将 usePlatformDefaultWidth 设为 false 可替换此行为。(Iffaedb/192682388
  • InfiniteAnimationPolicy 移到了 :compose:ui(I5eb09b/160602714
  • 现在,通过延迟列表和常规滚动组件的语义操作执行滚动已具有动画效果(Id9066b/190742024

版本 1.0

版本 1.0.5

2021 年 11 月 3 日

发布了 androidx.compose.ui:ui-*:1.0.5版本 1.0.5 中包含这些提交内容

bug 修复

  • 修复了跟踪 derivedStateOf 实例时出现的崩溃问题。(aosp/1792247)

版本 1.0.4

2021 年 10 月 13 日

发布了 androidx.compose.ui:ui-*:1.0.4版本 1.0.4 中包含这些提交内容

依赖项更新

  • 已更新为依赖于 Kotlin 1.5.31

版本 1.0.3

2021 年 9 月 29 日

发布了 androidx.compose.ui:ui-*:1.0.3版本 1.0.3 中包含这些提交内容

依赖项更新

  • 已更新为依赖于 Kotlin 1.5.30

版本 1.0.2

2021 年 9 月 1 日

发布了 androidx.compose.ui:ui-*:1.0.2版本 1.0.2 中包含这些提交内容

已更新,可支持 Compose 1.0.2 版本。Compose 1.0.2 仍与 Kotlin 1.5.21 兼容。

版本 1.0.1

2021 年 8 月 4 日

发布了 androidx.compose.ui:ui-*:1.0.1版本 1.0.1 中包含这些提交内容

依赖项更新

  • 已更新为依赖于 Kotlin 1.5.21

版本 1.0.0

2021 年 7 月 28 日

发布了 androidx.compose.ui:ui-*:1.0.0版本 1.0.0 中包含这些提交内容。

1.0.0 的主要功能

这是 Compose 的第一个稳定版本。如需了解详情,请参阅官方 Compose 版本发布博客

已知问题

  • 如果您使用的是 Android Studio Bumblebee Canary 4 或 AGP 7.1.0-alpha04/7.1.0-alpha05,可能会遇到以下崩溃问题:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    如需修复此崩溃问题,请暂时将 build.gradle 文件中的 minSdkVersion 提高到 24 及以上。此问题将在下一个版本的 Android Studio Bumblebee 和 AGP 7.1 中修复。(b/194289155)

版本 1.0.0-rc02

2021 年 7 月 14 日

发布了 androidx.compose.ui:ui-*:1.0.0-rc02版本 1.0.0-rc02 中包含这些提交内容

bug 修复

  • 对话框现在根据平台大小调整行为进行调整。将 usePlatformDefaultWidth 设为 false 可替换此行为。(Iffaedb/192682388

版本 1.0.0-rc01

2021 年 7 月 1 日

发布了 androidx.compose.ui:ui-*:1.0.0-rc01版本 1.0.0-rc01 中包含这些提交内容

新功能

  • 将 ui-tooling 模块拆分为 ui-toolingui-tooling-previewIefa28b/190649014

API 变更

  • 移除了已废弃的实验性 FocusManager#moveFocusInFocusManager#moveFocusOutI227d7b/170154986b/186567354b/168510304
  • Canvas 现在支持使用 contentDescription 参数来实现无障碍功能。(Ib547c)
  • PopupProperties 中的 useDefaultMaxWidth 已重命名为 usePlatformDefaultWidth。(I05710)
  • 对话框现在可以使用整个屏幕宽度。(I83929b/190810877)
  • 现在可以出于实验性目的使用 HSV 和 HSL 颜色表示法。(Id7cf8b/180731008

行为变更

  • Compose @Preview 现在提供了一个 LocalActivityResultRegistryOwner,可让您预览使用 rememberLauncherForActivityResult() 等 API(其依赖于该现有所有者)的可组合项。(Ib13d1b/185693006
  • Compose @Preview 现在提供了一个 LocalOnBackPressedDispatcherOwner,可让您预览使用 BackHandler 等 API(其依赖于该现有所有者)的可组合项。(Ia1c05b/185693006

bug 修复

  • InfiniteAnimationPolicy 移到了 androidx.compose.ui:uiI5eb09b/160602714
  • 为了更改模块结构,暂时移除了 AnimatedImageVector。(I41906b/160602714

版本 1.0.0-beta09

2021 年 6 月 16 日

发布了 androidx.compose.ui:ui-*:1.0.0-beta09版本 1.0.0-beta09 中包含这些提交内容

API 变更

  • 将枚举 Role 和 LiveRegionMode 更改为具有私有构造函数的内联类 (Id1890)
  • KeyboardCapitalization 已转换为内联类。(Id5a1c)
  • 将 HapticFeedbackType 更改为内联类。(I255ec)
  • Modifier.pointerInteropFilter 现为 @ExperimentalComposeUiApi。(Iede6c)
  • TextAlign、FontSynthesis 和 TextDirection 现已成为内联类。(I212fe)
  • TextOverflow 已更改为内联类。(I433af)
  • FontStyle 现已成为内联类。(I9e48b)

bug 修复

  • 目前,键常量为 @ExperimentalComposeUiApi。在稳定阶段之前,消耗型代码可声明私有常量。(Ia5d48)
  • 现在,Compose 测试可在 Robolectric 上运行。截至目前为止,已发现以下局限性:
    • 没有原生位图,因此 ImageBitmap() 会引发 NullPointerException。
    • 没有绘图操作,因此 captureToImage() 会无限期地等待下一次绘图传递(即发生死锁)。
    • 不会加载任何字体,因此无法正确测量任何文本。所有字符均具有 20 像素左右的固定高度和 1 像素的固定宽度。
    • 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>HSP 中的一个或多个字符,用于指示相应方法应标记为“Hot”“Startup”还是“Post Startup”。

  • <CLASS_DESCRIPTOR> 是目标方法所属类的描述符。例如,类 androidx.compose.runtime.SlotTable 的描述符为 Landroidx/compose/runtime/SlotTable;

  • <METHOD_SIGNATURE> 是方法的签名,其中包含方法的名称、参数类型和返回值类型。例如,LayoutNode 中的 fun isPlaced(): Boolean 方法具有签名 isPlaced()Z

  • 这些格式可以包含通配符(***?),以便让单个规则能够涵盖多个方法或类。

规则的作用是什么?

  • 如果某个方法具有 H 标志,则表示该方法为“hot”方法,应提前进行编译。

  • 如果某个方法具有 S 标志,则表示系统会在启动时调用该方法,应提前进行编译,以避免在启动时耗费资源进行编译以及解析该方法。

  • 如果某个方法具有 P 标志,则表示系统会在启动后调用该方法。

  • 如果某个类出现在此文件中,则表示系统会在启动过程中使用该类,应在堆中预先分配该类,以避免耗费资源来加载它。

运作方式

  • 库可以定义要打包到 AAR 制品中的那些规则。如果事后构建了某个应用,并且其中包含这些制品,系统会将这些规则合并在一起,并使用合并后的规则来构建特定于该应用的紧凑二进制 ART 配置文件。然后,当设备安装该应用后,ART 就可以利用此配置文件来预先编译应用的特定部分,从而提升应用性能,特别是首次运行时的性能。请注意,这对可调试应用没有任何影响。

版本 1.0.0-beta08

2021 年 6 月 2 日

发布了 androidx.compose.ui:ui-*:1.0.0-beta08版本 1.0.0-beta08 中包含这些提交内容

API 变更

  • NestedScrollSource 枚举已替换为内联类。(Ie321bb/187055290
  • FocusManager.clearFocus(forcedClear = true) 重命名为 FocusManager.clearFocus(force = true) (Ia0c41)
  • 将一些枚举使用情况重构成了内联类,以免在添加新枚举值时 when 语句出现穷举语问题。(I2b5eb)
  • PopupProperties 中移除了 @ExperimentalComposeUiApi。(I01fa6)
  • PointerType 已从枚举更改为内联类 (If5058)
  • ContentDescription 和 Text 语义属性不再是单个值,而是列表。这样一来,它们便可原样合并而无需串联。还提供了更好的测试 API 来支持这些更改(Ica6bfb/184825850
  • 废弃了 Modifier.focusModifier(),由 Modifier.focusTarget() 取代 (I6c860)
  • Modifier.onSizeChanged()Modifier.onGloballyPositioned() 不再是内联函数(I727f6b/186109675
  • KeyboardType 枚举已替换为内联类。(I73045b/187055290
  • FocusState 枚举替换成了 FocusState 接口(Iccc1ab/187055290
  • 将 ImeAction 枚举替换成了内联类。(I18be5b/187055290
  • PlaceholderVerticalAlign 已转换为内联类。(If6290)
  • TextUnitType 现在为内联类。(I4cba9)
  • AnnotatedString.withAnnotation 函数现为 ExperimentalTextApi,而非 ExperimentalComposeApi。(I0cd0a)
    • 包含 TextUnitType 的 TextUnit 构造函数现为 ExperimentalTextApi,而非 ExperimentalComposeApi。

bug 修复

  • 我们已修复 beta07 中的 bug,即滚动浏览后 LazyColumn/Row 项显示不完整(I8c9acb/188566058
  • 现在,detectDragGesuresdetectVerticalGesturesdetectHorizontalGestures 将自动执行位置更改,无需在 onDrag 回调中调用 change.consumePositionChange(I42fc4b/185096350b/187320697
  • LayoutModifiers 的对齐行问题已经修复。更改子级的对齐行时,父级不会重新测量的 bug 已得到修复。(I4401fb/174315652
  • 更改了 Modifier.onGloballyPositioned();更改后,系统会报告此修饰符在修饰符链中的坐标,而不会报告在应用所有修饰符后的布局坐标。这意味着,修饰符的顺序现在会影响系统报告什么坐标。(Ieb67db/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 枚举已替换为内联类。(Id670ab/187055290
  • FocusDirection 枚举已替换为内联类。(Ib6d03b/187055290b/184086802
  • 引入了提升 SubcomposeLayout 状态的功能,让您可以将内容预先合成为需要的 slotId,这将加快下一次度量遍历的速度,因为下次我们尝试使用给定 slotId 进行子合成时,将无需进行合成。(I42580b/184940225
  • 添加了裁剪选择手柄(Iff80db/183408447
  • 移除了与 LayoutInspector 支持相关的未使用 API。(I2ac78)

bug 修复

  • LazyColumn/Row 现在最多会使 2 个之前可见的项保持活跃状态(不予处置),即使它们已滚动出边界也是如此。这样一来,当我们需要合成新项时,该组件便可重复使用活跃的子组合,从而改善滚动性能。(Ie5555)
  • 将按给定方式应用 AnnotatedString 上的 TextGeomerticTransformTextDecoration。(I61900b/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,用于针对无障碍服务标记集合及其项(Id54efb/180479017
  • 添加了 SemanticsActions.ScrollToIndex,用于将包含已编入索引的项的列表滚动到包含具有特定索引的项;还添加了 SemanticsProperties.IndexForKey,用于获取包含键控项的列表中的某个项的索引。这两项操作都通过 LazyList 实现。
    • 添加了 SemanticsNodeInteraction.performScrollToIndex,用于将列表滚动到指定的索引;还添加了 SemanticsNodeInteraction.performScrollToKey,用于将列表滚动到具有指定键的项。(I4fe63b/178483889b/161584524
  • 向 GraphicLayerInfo 添加了 ownerViewId (I19f62)
  • 添加了 Font() 过载,以便从资源、File 和 FileDescriptor 加载字体 (I5d382)
  • 添加了无障碍功能 API error,用于标记包含无效输入的节点(I12997b/180584804b/182142737
  • 添加了 Font() 过载,用于从资源、File 和 FileDescriptor 加载字体 (I43007)
  • 支持向 TextFieldValue.Saver 保存 AnnotatedString。向 AnnotatedString.Builder 添加了 addTtsAnnotation 和 withAnnotation 实用函数(I8cbdcb/178446304
  • 添加了 TextUnit 构造函数 TextUnit(value: Float, type: TextUnitType)I7ecceb/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)Ic5534b/183746743
  • 添加了实验性 performTextInputSelection API(I2dcbbb/178510628
  • 公开了 InputEventCallback 接口。任何公共 API 中均无法使用该接口;并且,在代码中也用不到该接口。(I34a02b/184003208
  • 废弃了 TextLayoutResult/createTextLayoutResult 函数。这是一个未使用的公共函数,添加此函数只是为了测试使用,对 Compose 文本 API 而言毫无用处。该函数现已废弃,日后将被移除。(I80413)

bug 修复

  • 修复了 ACTION_SCROLL_FORWARDACTION_SCROLL_BACKWARDaccessibilityActionScrollLeftaccessibilityActionScrollUpaccessibilityActionScrollRightaccessibilityActionScrollDown 无障碍滚动操作。现在,系统会在一个接一个的屏幕上沿指定方向滚动,而不是滚动到可滚动范围的末尾。(Ieccb0)
  • ui-test-manifest 和 ui-tooling-data 中的 AndroidManifest 文件现在与 Android 12 兼容(I6f9deb/184718994

版本 1.0.0-beta04

2021 年 4 月 7 日

发布了 androidx.compose.ui:ui-*:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

API 变更

  • SoftwareKeyboardController 上的 hideSoftwareKeyboardshowSoftwareKeyboard 分别重命名为了 hide()show()
    • 为 LocalSoftwareKeyboardController 提供了完整的 CompositionLocal 接口,以便对其进行设置(这在测试中尤其有用)(I579a6)
  • 添加了 LiveRegion 无障碍 API。 如果节点被标记为动态区域,无障碍服务将自动通知用户相应变更(Idcf6fb/172590946
  • 引入了 TextOverflow.Visible。(Ic8f89)

bug 修复

  • 修复了边缘上的 LazyColumn/LazyRow 项在快速滑动后位置不正确的问题(Ie4d13b/183877420
  • 现在,从 Compose 层次结构中移除 AndroidViewBinding 后,AndroidViewBinding 可以正确移除通过 FragmentContainerView 膨胀的 fragment。(Ib0248b/179915946
  • 现在,当您的 ComposeView 位于 Fragment 内时,AndroidViewBinding 会正确嵌套通过 FragmentContainerView 膨胀的 fragment,从而修复了保存并恢复这些 fragment 的状态时出现的问题。(I70eb0b/179915946
  • Compose ViewBinding 现在依赖于 Fragment 1.3.2,在配置更改后能够保持一致地显示通过 FragmentContainerView 膨胀的 fragment。(I0743db/179915946

版本 1.0.0-beta03

2021 年 3 月 24 日

发布了 androidx.compose.ui:ui-*:1.0.0-beta03版本 1.0.0-beta03 中包含这些提交内容

API 变更

  • 延迟检查 ComposeView 的 ViewTree 依赖项(I8dbbfb/182466548
  • GestureScope 中的 swipeUp/swipeDown/swipeLeft/swipeRight 函数中添加了 startX/endXstartY/endY 参数。(I49e2db/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 接口。(I5951eb/168778053
  • 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I84472b/168778053
  • 移除了以下 SemanticsMatcher
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (If16bd)
  • 将以下 SemanticsMatchers 标记为 @ExperimentalTestApi:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (Ia600c)
  • 添加了以下 SemanticsMatcher
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (I2f502)

bug 修复

  • 对实验性 API 的公开使用施加了限制(I6aa29b/174531520
  • androidx.compose.ui:ui 不再依赖于 AppCompat 或 fragment。如果您在应用中使用 ComposeView,并且使用 Fragment 和/或 AppCompat,请确保您使用的是 AppCompat 1.3+/Fragment 1.3+。必须使用这些版本才能正确设置 ComposeView 所需的生命周期和已保存状态所有者。(I1d6fab/161814404
  • 修复了 rememberSaveable { mutableStateOf(0) } 在 navigation-compose 的目标内使用时损坏的问题。(I1312bb/180042685b/180701630
  • 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I658b6b/168778053
  • 修复了 ComposeRootRegistrytearDownRegistry() 中很罕见的 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 变更

  • detectDragGestures 添加了 onStart 回调(I67269b/179995594
  • 用于调整为固有尺寸的修饰符不再处于实验阶段。(I15744)
  • MeasureBlocks 已重命名为 MeasurePolicy,并成为一个函数接口。更新/简化了 Layout API,以便使用 MeasurePolicy。(Icab48b/167662468b/156751158
  • InteractionState 已替换为 [Mutable]InteractionSource
    • 接口负责发出/收集 Interaction 事件。
    • 应使用 interactionSource = remember { MutableInteractionSource() },而不是将 interactionState = remember { InteractionState() } 传递给 ButtonModifier.clickable() 等组件。
    • 应改用 InteractionSource 的扩展函数,比如 InteractionSource.collectIsPressedAsState(),而不是使用 Interaction.Pressed in interactionState
    • 对于复杂用例,您可以使用 InteractionSource.interactions 来观察互动流。如需了解详细信息,请参阅 InteractionSource 文档和示例。
    • I85965b/152525426b/171913923b/171710801b/174852378
  • 在 CompositionLocals 中添加了 AccessibilityMananger 接口和 LocalAccessibilityMananger (I53520)
  • 移除了已废弃的 LayoutCoordinates 方法,使用函数代替 positionInParent 和 boundsInParent 的属性(I580edb/169874631b/175142755
  • 已使用基础类型替换类型别名:
    • ColorStop 现在为 Pair<Float, Color>
    • SpanStyleRange 现在为 `AnnotatedString.Range
    • ParagraphStyleRange 现在为 AnnotatedString.Range<ParagraphStyle>
    • StringAnnotation 现在为 AnnotatedString.Range<String>
    • (I8dd1a)
  • 为低级别文本组件(例如 CoreTextField)的输入会话创建了新的 TextInputSession。(I8817fb/177662148
  • Placeable 现在公开了 measuredSize,表示实际测量的子布局的大小。该大小可能不遵循测量约束。(Ib2729b/172560206b/172338608
  • 添加了 selectionGroup 修饰符,允许为提供无障碍功能而标记 Tab 或 RadioButton 的集合 (Ie5c29)
  • compositionLocalOfstaticCompositionLocalOfdefaultFactory 现在是必需项,而非可选项。

    这项变更消除了不可为 null 的类型(不提供默认出厂设置)可能存在的类型错误。之前,此操作会为不可为 null 的类型提供 null 引用值。

    对于可为 null 的类型,请考虑提供 { null } 作为默认出厂设置。

    除非可提供合理的默认设置,否则我们不建议使用具有不可为 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(...) }。(I266edb/175294473

  • 已从指针输入系统中移除了部分消耗。协调部分消耗的推荐方法是使用 Modifier.nestedScroll。(Ie9c9b)

  • Orientation 已移至 foundation 软件包。VelocirtTracker 已从 ui.gesture 移至 ui.input.pointer。(Iff4a8b/175294473

  • imageResource 和 vectorResource 现在分别是 ImageBitmap 和 ImageVector 伴生函数的扩展函数。已删除 load{Image,Vector,Font}Resource 函数。(I89130)

  • 已移除 AnimationClockObservable 和子类。已移除 AnimatedFloat。(Icde52b/177457083

  • 已将 Provider 重命名为 CompositionLocalProvider

    • Composition 构造函数不再接受键参数,并已废弃。
    • currentCompositeKeyHash 已变为可组合的顶级属性,而不是可组合的顶级函数。
    • CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空间
    • ComposableLambda 已成为接口,而不再是具体的类,也不再包含类型参数。
    • ComposableLambdaN 已成为接口,而不再是具体的类,也不再包含类型参数。
    • snapshotFlow 函数已移至 androidx.compose.runtime 命名空间
    • SnapshotMutationPolicy 的合并方法不再是实验性方法
    • 移除了 @TestOnly 顶级 clearRoots 函数。不再需要此函数。
    • 移除了 keySourceInfoOf 和 resetSourceInfo 函数。不再需要这些方法。
    • 移除了 Composer.collectKeySourceInformation。不再需要此函数。
    • 移除了 isJoinedKey、joinedKeyLeft 和 joinedKeyRight 方法。不再需要这些方法。
    • 各种顶级 API 均已移至不同的文件中并进行了重新整理。由于 Kotlin 的文件类语义,这会破坏二进制文件兼容性,但不会破坏源代码兼容性,因此对大多数用户来说这不会成为一个问题。
    • I99b7db/177245490
  • 从 compose:ui 中移除了 ComponentActivity.setContent()。请使用 androidx.activity:activity-compose:1.3.0-alpha01 中的相应函数。从 compose:ui 中移除了 viewModel()LocalViewModelStoreOwner。请使用 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 中的相应函数 (I6f36b)

  • 重新设计了 Modifier.scrollable。现在它使用 Scrollable 接口,而不是 ScrollableController 类(I4f5a5b/174485541b/175294473

  • 现在 PointerInputModifier 不再支持 CustomEvens(I02707b/175294473

  • SnapshotStateObserver 不再处于实验阶段 (Id2e6a)

  • 删除了一些先前已废弃的 API(Ice5dab/178633932

  • 移除了 longPressGestureFilter 和 doubleClickGestureFilter。将 Modifier.pointerInput 与辅助函数(例如,detectTapGestures)配合使用(I2fedfb/175294473

  • 移除了各种 toString 方法中 String.format API 重构的用例,以便不在内部利用 String.format。(Id1290)

  • 移除了 dp 断言 (I798d2)

  • 移除了 androidx.compose.runtime:runtime-dispatch (I55feb)

  • 文本操作现在会自动检查焦点(I13777b/179648629

  • 移除了 runBlockingWithManualClockI15cdcb/179664814

  • Modifier.verticalScroll()/horizontalScroll() 中的滚动位置现在通过 Int 表示 (I81298)

  • FlingConfig 已重命名为 FlingBehavior,现在允许自定义挂起动画,而不是预定义 Decay。(I02b86b/175294473

  • 添加了一个辅助函数,有助于为所有 ImeAction 回调设置相同的操作(I63447b/179226323

  • 从所有文本字段中移除了 SoftwareKeyboardController 回调,很快将被新的 API 替代。(Iae869b/168778053

  • 不再使用并移除了 FontSpan 和 FontWeigthStyleSpan。(Ie5b56b/177423444

  • 进行了以下 Material API 方面的更改:

    • 向 Top/BottomAppBar 添加了 contentPadding 参数,以允许自定义默认内边距。
    • 对 BackdropScaffold 中的参数进行了重新排序,以便遵循 API 指南中关于将必需参数排在可选参数前面的要求。
    • 将 BottomNavigationItem 中的 icon 参数移到了 selectedonClick 后面。
    • 将 BottomNavigationItem 中的 alwaysShowLabels 参数重命名为了 alwaysShowLabel
    • 将几个组件中的 bodyContent 参数重命名为了 content
    • ButtonDefaults.buttonColors() 中的参数进行了重新排序。请注意,由于参数的类型并未更改,因此这不会导致您的代码出现错误。请确保您使用的是命名参数或手动更新相关排序,否则您的代码将无法像以前一样运行。
    • darkColors() 添加了 secondaryVariant 参数。此颜色通常与深色主题中的 secondary 相同,添加此参数是为了保持一致性和便于进行进一步的自定义。
    • 从公共 API Surface 中移除了 ElevationDefaults 和 animateElevation(),因为它们不常用/不实用。
    • Slider 中的 onValueChangeEnd 重命名为了 onValueChangeFinished,并使其可为 null。
    • Snackbar 中的 text 参数重命名为了 content 以确保一致性。
    • DropdownMenuItem 添加了 contentPadding 参数,以允许自定义默认内边距,并将 content 设为了 RowScope 上的扩展。
    • ModalDrawerLayout 重命名为了 ModalDrawer
    • BottomDrawerLayout 重命名为了 BottomDrawer
    • (I1cc66)

bug 修复

  • 添加了用于在 Compose 中使用 AnimatedVectorDrawable 资源的 API。使用 animatedVectorResource 将 <animated-vector> XML 作为 AnimatedImageVector 加载,并通过 painterFor 为其添加动画效果 (I8ea91)
  • 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以替换 TextField 上的旧 SoftwareKeyboardController 接口。(I658b6b/168778053

版本 1.0.0-alpha12

2021 年 2 月 10 日

发布了 androidx.compose.ui:ui-*:1.0.0-alpha12版本 1.0.0-alpha12 中包含这些提交内容

API 变更

  • 从 UiApplier 移除了对 ViewGroup 的支持。移除了废弃的 emitView 可组合项。(Ifb214)
  • Modifier.pointerInput 现在需要 remember 键来指示指针输入检测协程何时应重启以建立新的依赖项。(I849cd)
  • CompositionReference 已重命名为 CompositionContext (I53fcb)
  • Bounds 已重命名为 DpRect (I4b32a)
  • 测试更新:hasText() 将检查文本字段中的输入和标签/提示/占位符文本 (Iab803)
  • viewModel() 可组合项和 LocalViewModelStoreOwner 已移至 androidx.lifecycle.viewmodel.compose。现在,您需要添加一个独立依赖项 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 才能使用它。(I7a374)
  • 允许在 AccessibilityAction 中执行可为 null 的操作,并将 AccessibilityAction 和 CustomAccessibilityAction 中的操作标签从 CharSequence 更改为 String (I0dc82)
  • 为了更好地匹配 ImageBitmap 和 ImageVector 的命名惯例,ImagePainter 已重命名为 BitmapPainter,以并行使用 VectorPaperer。(Iba381b/174565889
  • 现在使用 substring 作为参数,改进了 substring 测试 API (Icbe78)
  • 添加了 Modifier.focusOrder(),它接受 FocusRequester,而无需为自定义焦点顺序指定 lambda。如果您只需要为可组合项指定引用,而无需为其指定自定义焦点顺序,这会非常有用(I4f52ab/179180978
  • ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(Icf416)
  • 解构声明和 copy() 方法在多个类中已很少用到,已将其从这些类中移除。(I26702b/178659281
  • 已将 Popup 移为平台专用。AndroidPopupProperties 已重命名为 PopupProperties,isFocusable 已移至 PopupProperties 中的 focusable 参数 (Ieeea5)
  • 已将 Dialog 移为平台专用。AndroidDialogProperties 已重命名为 DialogProperties。(I4ef69b/179138130
  • 已将 LayoutNode 变为内部类(I8a7b1b/175103944
  • Constraints.enforce 已替换为 Constraints.constrain。(I8b8ea)
  • 废弃了 loadFontResource,请改用 fontResource。废弃了 imageResource、loadImageResource、vectorResource 和 loadVectorResource,请改用 painterResource。(I6b809)
  • 出于性能方面的原因,ScrollAxisRange 语义现在接受返回浮点数的 lambda,而不是直接使用浮点值。(If4a35b/178657186
  • 添加了 EditableText 语义,用于标记文本字段的可修改输入文本,以提供无障碍服务,同时提供相应测试方法用于检查语义 (I8e07a)
  • 已将 OwnerLayer/OwnerScope/OwnerSnapshotObserver 变为内部函数(I4ffafb/175103944
  • toIntPx() 已重命名为 roundToPx()。(I9b7e4b/173502290
  • IntBounds 已重命名为 IntRect,相应 API 也得以改进。(I1f6ff)
  • 更新了 Snapshot API 以使其更加符合 API 指南,并在公共 API 中隐藏了内部实现类。(Id9e32)
  • 添加了展开和收起语义操作。在 ModalBottomSheetState 中添加了 expand 和 halfExpand (Ib5064)
  • 已废弃 Modifier.dragGestureFilter,请改用 Modifier.pointerInput { detectDragGestures (...)}。或者,针对单轴拖动使用 Modifier.draggable(I0ba93b/175294473
  • 已重命名 Ambient,以与 Ambient 重命名为 CompositionLocal 匹配。Ambient 过去被命名为 AmbientFoo,现在 CompositionLocal 被命名为 LocalFoo。(I2d55d)
  • 现已移除已废弃的 BaseTextField,请改用 BasicTextField。(I71368)
  • 将 Selection 移到了 foundation 中。(I7892b)
  • 现在提倡 remember { mutableStateOf(0) } 这样的用法,我们将移除 savedInstanceState { 0 } 可组合项,与之前移除 state { 0 } 可组合项的方式类似。您应改用 rememberSaveable { mutableStateOf(0) },如果 MutableState 中使用的类型可以存储在 Bundle 中,它将会自动保存和恢复。如果您以前传递的是自定义 Saver 对象,那么您现在需要使用 rememberSaveable 的新重载,该新重载具有 stateSaver 参数。用法将如下所示:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }Ib4c26b/177338004
  • 添加了密码语义,以提供无障碍服务 (I231ce)
  • 添加了 ProgressBarRangeInfo.Indeterminate,用于标记针对无障碍服务的不确定进度条 (I6fe05)
  • 已废弃 emptyContent()(@Composable () -> Unit).orEmpty() 实用程序,因为它们不再具有任何积极的性能影响或价值 (I0484d)
  • snapshotFlowwithMutableSnapshot 不再是实验性方法 (I6a45f)
  • 现在可以关闭 Recomposer。关闭的 Recomposer 会继续重组,直至组合子协程完成。Recomposer.shutDown 已重命名为 cancel,与 close 形成对比。(Ib6d76)
  • UiSavedStateRegistry 已重命名为 SaveableStateRegistry,AmbientUiSavedStateRegistry 已重命名为 AmbientSaveableStateRegistry,并且两者都已移至 androidx.compose.runtime.saveable 软件包。(I30224)
  • Artefact androidx:compose:runtime:runtime-saved-instance-state 已重命名为 androidx:compose:runtime:runtime-saveable (I6dcac)
  • 删除了 ui 软件包中很多长期废弃的 API。(I2f2dc)
  • 现已废弃 compose:runtime-dispatch 制品。现在,MonotonicFrameClock 位于 compose:runtime 中,AndroidUiDispatcher 位于 compose:ui 中。(Ib5c36)
  • Outline.* 类不再是数据类(I4879eb/178001427
  • 移除了 view.captureToImage(),且未提供任何替换项。(I7fcd2)
  • 引入了 ColorMatrix API,用于修改源内容的 RGB 值。将 ColorFilter API 重构为一个接口,并与 PathEffect 的实现匹配。(Ica1e8)
  • 已将 layoutDirection 参数添加到 Shape 的 createOutline 中。这样便可支持创建布局方向感知形状。(I57c20b/152756983
  • 已废弃 onImeActionPerformed,请改用 KeyboardActions(If0bbdb/179071523
  • 引入了将应用于无限动画的 InfiniteAnimationPolicy 协程上下文元素。默认情况下,除非使用 ComposeTestRule 运行测试,否则系统不会安装任何政策。(I50ec4b/151940543
  • canDrag 已从 Modifier.scrollable 中移除。(Id66e7b/175294473
  • 已将 LayoutCoordinates.parentCoordinates 重命名为 LayoutCoordinates.parentLayoutCoordinates,以允许使用新属性 parentCoordinates。parentCoordinates 属性现在提供父级修饰符的 LayoutCoordintes。这可以为 onSizeChanged() 和 onGloballyPositioned() 提供更完整的用例(Idfbfdb/177926591
  • 废弃了 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicationGestureFilter。改为将 Modifier.clickable 或 Modifier.pointerInput 与 detectTapGestures 函数一起使用。(I6baf9b/175294473
  • 已移除 SaveableStateRegistry 的 unregisterProvider。现在,registerProvider() 会改为返回 SaveableStateRegistry.Entry 对象,您可以使用该对象取消注册(Ic4274b/178583739
  • rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 软件包。(I1366eb/177338004
  • 从公共 API 中移除了 CoreText 和 CoreTextField
    • 移除了已废弃的 SelectionContainer 重载
    • (I99c19)
  • 在直接添加到 WindowManager 或直接从中移除的层次结构中使用 Compose 的测试现在更加稳定。(Ie81edb/175765614
  • 移除了 Recomposer.current()。[Abstract]ComposeView 现在默认设置为延迟创建的、作用域为窗口的 Recomposer(由窗口的 ViewTreeLifecycleOwner 驱动)。在主机生命周期结束时,系统会暂停重组和基于 withFrameNanos 的动画 tick 操作。(I38e11)
  • Recomposer.runningRecomposers 现在提供只读 RecomposerInfo 的一个全局 StateFlow,用于观察进程中正在进行的组合状态。请首选此 API 而不是 Recomposer.current(),后者现在已废弃。(If8ebe)
  • Saver、listSaver()、mapSaver()、autoSaver 已从 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6)
  • EditCommands 接受 AnnotatedString。但是,这是只针对 API 的更改,尚未实现多样式文本编辑。(I4c3ea)
  • 移除了 Uptime 和 Duration。(Ib9bf4b/177420019
  • 已将 CompositionData.asTree() 及相关 API 移至单独的 ui-tooling-data 模块,并标记为实验性 (Ic95b8)
  • RounderCornerShape、CutCornerShape 和 CornerBasedShape 中的参数已从 left/right 重命名为 start/end,以支持 Shape 在 RTL 方向的自动镜像。对于不需要自动镜像的情况,引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape。(I61040b/152756983
  • 已重构 Compose 编译器插件面向的 API,旨在使用接口而不是具体类。接口也不再使用类型参数。

    这种内部更改不会影响源代码兼容性,但这是一项重大的二进制文件更改。(I3b922b/169406779

  • 移除了无意中公开的 StringBuilder.deleteAt 函数 (Id6ed9)

bug 修复

  • 现在,放置在视图层次结构中的 ComposeView 是另一个组合项的子级,现在会托管其祖先的子级组合项 (I92883)
  • 更新了 Compose 的 imageFromResource API,以便在加载 ImageBitmap 对象时重复使用资源可绘制对象缓存。(If3627b/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。(I9420bb/173387208
  • 废弃了 Key.DPadUp,并改用 Key.DirectionUp。(Iab335b/177954892
  • 从现在起所有者界面仅供内部使用。(If8e35)
  • 添加了 FocusManager.moveFocus() API,用于通过编程方式移动焦点。(I045cbb/177681839
  • 将 PopupPositionProvider 更改为使用窗口相对坐标,而不是全局坐标。将 parentGlobalBounds 重命名为 anchorBounds,并将 windowGlobalBounds 更改为 windowSize:IntSize (I2994a)
  • Duration 和 Uptime 将替换为 Long 毫秒值,此步骤消除了指针输入对这些类的依赖。(Ia33b2b/175142755b/177420019
  • 添加了 AmbientSavedStateRegistryOwner,添加方式与现有的 AmbientLifecycleOwner 和 AmbientViewModelStoreOwner 类似(I9a3e8b/176756365
  • 更新了 Vector Graphics API,以支持解析对矢量图形根应用的色调调节。(Id9d53b/177210509
  • 向 PointerInputChange 添加了 toolType,以区分设备(Iac787b/175142755
  • 已将 AmbientWindowManager 重命名为 AmbientWindowInfo(I2686ab/177084714b/177084983
  • 废弃了全局坐标方法,并新增了基于窗口的坐标方法。(Iee284)
  • 添加了 Modifier.toolingGraphicsLayer,用于在开启检查时添加图形层修饰符。(I315df)
  • FocusRequester.createRefs 现在被标记为实验性,因为它可能会发生变化。(I2d898b/177000821
  • 已将 SemanticsPropertyReceiver.hidden 重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。已将 AccessibilityRangeInfo 重命名为 ProgressBarRangeInfo。已将 stateDescriptionRange 重命名为 progressBarRangeInfo。已将 AccessibilityScrollState 重命名为 ScrollAxisRange。已将 horizontalAccessibilityScrollState 重命名为 horizontalScrollAxisRange。已将 verticalAccessibilityScrollState 重命名为 verticalScrollAxisRange。(Id3148)
  • 移除了 PointerInputData 并修改了 PointerInputChange,以为其指定 PointerInputData 的所有字段。已将 PointerInputEvent 和 PointerInputEventData 变成内部类,因为它们不会在任何公共 API 中使用。(Ifff97b/175142755
  • 更新了 GraphicsLayerScope 实现密度,以支持将 dp 转换为原始像素。(Ied528b/176819695
  • 更新了 Matrix API,以遵循行主要排序,并提供索引常量,以帮助在不同的矩阵表示法之间转换,从而在内部匹配 SkMatrix 和 Matrix4 之间的框架转换逻辑。(I432e6)
  • 移除了实验性 monotonicFrameAnimationClockOf 方法(Ib753fb/170708374
  • 将 String.fintPrecedingBreak 和 String.fingFollowingBreak 移至 InternalTextApi。(I657c4)
  • 从公共 API 中移除了 androidx.compose.ui.util.isSurrogatePair。(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)

bug 修复

  • onCommit、onDispose 和 onActive 已废弃,取而代之的是 SideEffect API 和 DisposableEffect API (If760e)
  • 对 Font/FontFamily/Typeface 的工厂函数的更改

    • 添加了以大写字母开头的工厂函数
    • 废弃了以前使用小写字母开头的工厂函数
    • 新的工厂函数会返回 FontFamily,而非子类
    • 隐藏了子类的构造函数,以便只能通过工厂函数构造子类。
    • 已将 Font.asFontFamily 重命名为 Font.toFontFamily (I42aa7)
  • 引入了 ComposeContentTestRule,用于扩展 ComposeTestRule 并定义 setContent(已从 ComposeTestRule 中移除)。添加了工厂方法 createEmptyComposeRule()。该方法会返回 ComposeTestRule,且不会为您启动 activity。如果您想在测试期间启动您的 activity(例如使用 ActivityScenario.launch),请使用此方法(I9d782b/174472899

  • animateAsState 现为 animateFooAsState,其中 Foo 是添加动画效果的变量的类型。例如 Float、Dp、Offset 等 (Ie7e25)

  • 向 Image 和 Icon 添加了内容说明参数,用于提供对无障碍服务的说明 (I2ac4c)

  • 移除了 displaySize,以免使用此大小。通常,最好使用 onRoot() 的大小,或者至少使用窗口大小。(I62db4)

  • OnSizeChanged 之前报告布局内容的大小,现在则报告其在修饰符链中所在位置的大小。(I36b78b/177562900

  • emit() API 和所有重载均已废弃并重命名为 ComposeNode。这些 API 是一样的,只不过为了遵循 Compose 的命名惯例而采用了不同的名称 (I4137b)

  • TextFieldValue 接受 AnnotatedString。但是,这是只针对 API 的更改,尚未实现多样式文本编辑。

    • 从 EditingBuffer 构造函数参数中移除了 initial。(I326d5)
  • invalidate 和 compositionReference() 现已废弃,取而代之的分别是 currentRecomposeScope 和 rememberCompositionReference。(I583a8)

  • 更改了 AnnotatedString,以从 kotlin.CharSequence 进行扩展。因此,length 和 subSequence 现在是实例函数,并且已移除扩展函数。(Iaf429)

  • CompositionLifecycleObserver 现已废弃,取而代之的是 RememberObserver。

    RememberObserver 已替代 CompositionLifecycleObserver,且语义和方法名称也已改变。始终推荐的做法是,对那些只记住一次的对象,可以机械地更改为新的 API。不过,如果引用在组合中被记住不止一次,那么对于只调用 onRemembered 一次的每个引用,都会调用 onEnter。如果将 onEnter 用于 WithConstraintsScaffold 等子组合,则会多次调用该对象,从而打破单次调用 onEnter 的保证,而对于 RememberObserver 已将该对象移除。

    RememberObserver 添加了在以下情况下会被调用的 onAbandoned:如果从传递到 remember 的回调中返回 RememberObserver 实例,但该实例在组合状态下不被记住,并因此永远不会调用 onRemembered。当异常导致组合在完成前终止,或者组合因以下两种原因而遭到舍弃时就会发生上述情况:组合因不再是最新的而处于正在生成状态或者组合不再被需要。如果遵循上述单一引用建议的 RememberObserver 实例跟踪的是外部资源,那么 onForgottenonAbandoned 都会表示不再需要该资源。如果该对象跟踪的是 onRemembered 中已开始的工作或已分配的资源,则可以忽略 onAbandoned,因为如果调用 onRemembered,就不会调用 onAbandoned。(I02c36)

  • 废弃了 2 个或多个 TextUnit 之间的算术运算。废弃了 TextUnit.Sp 和 TextUnit.Em 函数,而优先使用 Int.sp 和 Int.em 等扩展函数。(I48369)

  • 如果库中没有明确声明的公开资源(例如,通过 public.xml 进行声明),那么库中的资源现在默认为私有资源。(Ia1dccb/170882230

  • 废弃了 ScrollableColumn/Row。当滚动内容较大时,使用 ScrollableColumn 的效率不如使用 LazyColumn 高,因为使用 LazyColumn 时,我们可以只组合/测量/绘制可见元素。为防止用户采用低效方式,我们决定废弃 ScrollableColumn 和 ScrollableRow,转而提倡使用 LazyColumn 和 LazyRow。用户仍可决定不需要 lazy 行为,而直接像这样使用修饰符:Column(Modifier.verticalScroll(rememberScrollState()))(Ib976bb/170468083

  • 为 LazyColumn/LazyRow/LazyVerticalGrid 的作用域新增了 items(count: Int) 工厂方法。items(items: List)itemsIndexed(items: List) 现在是扩展函数,因此您必须在使用时将其手动导入。为 Array 新增了扩展函数重载:items(items: Array)itemsIndexed(Array)I803fcb/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 和实验性 API 提供节点。通常可如下解决此问题:将具有此类依赖项的代码封装在 SideEffect 可组合项中,从而将代码的执行推迟到节点创建和初始化之后。(I018da)

API 变更

  • 添加了 Modifier.focusOrder(),用于指定自定义焦点遍历顺序(I90cf5b/175899543b/170155556b/170155429
  • 移除了已废弃的 FocusObserver,改为使用 onFocusChanged 或 onFocusEvent(I3ecb9b/175156387
  • EditOperations API 变更
    • EditOperation 已重命名为 EditCommand
    • 为 EditOperation 的具体实现添加了 Command 后缀
    • EditCommand 不再是数据类
    • EditOperation.process 函数已重命名为 applyTo
    • InputEventListener 已重命名为 InputEventCallback
    • (I0a366)
  • 移除了未使用的 PxSquared、PxCubed 和 PxInverse。 已将 Size.center() 变为属性。(I973f7)
  • ui-test 模块现在可以对被测界面的 Recomposer 创建进行配置 (Ibebd8)
  • 修改了 Velocity,现在包含分量部分和数学运算。(Ib0447)
  • @ExperimentalTesting 已重命名为 @ExperimentalTestApi,以便与类似的实验性 API 注解保持一致(Ia4502b/171464963
  • Color.useOrElse() 已重命名为 Color.takeOrElse() (Ifdcf5)
  • 移除了未使用的 DpInverse、DpSquared 和 DpCubed 类。(I4d62b)
  • Constraints#satisfiedBy 已重命名为 isSatisfiedBy。(I9cf5c)
  • 添加回调,以便在 LayoutNode 边界发生更改时通知 Owner。(I72fd1)
  • 针对具有未指定的常量的内联类添加了 isSpecified、isUnspecified 和 useOrElse。(I93f7bb/174310811
  • 扩展了 [Abstract]ComposeView API 以允许回收基于 Compose 的视图,处理其组合以便日后重新创建。添加了用于安装和发现作用域为窗口的 Recomposer 的 API 和用于创建子组合的 CompositionReference。

    添加了 ViewCompositionStrategy,用于配置 [Abstract]ComposeView 的组合处理策略;默认行为是在窗口分离时进行处理。(I860ab)

  • 移除了 Any.identityHashCode() 公共 API (I025d7)

  • 移除了 toStringAsFixed API,改为直接使用 String.format。(Iaba6b)

  • 向 Foundation Strings.kt 添加了 Toggle(I4a5b7b/172366489

  • 将 nativeClass 移到了 ui 模块并将其变为内部 API。 更新了 nativeClass 在 equals 实现中的用法,以便改用“is MyClass”。(I4f734)

  • 废弃了 Modifier.focus() 和 Modifier.focusRequester(),改为使用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48b/175160751b/175160532b/175077829

  • 引入了 SelectionRegistrar.notifySelectableChange,用于向 SelectionManager 通知 Selectable 更新。(I6ff30b/173215242

  • 引入了 Outline.bounds 属性,以获取用于各种 Outline 实现的边界矩形。(I16e74b/175093504

  • 废弃了 TestUiDispatcher,改为使用 Dispatchers.Main(Ic171fb/175385255

  • ImeOptions 和 KeyboardOptions 不再是数据类(I3c898b/168684531

  • VisualTransformation API 变更

    • OffsetMap 已重命名为 OffsetMapping
    • OffsetMapping.identityOffsetMap 已重命名为 OffsetMapping.Identity
    • PasswordTransformation 不再是数据类
    • OffsetMapping 已移至其自己的文件中
    • (I0bdf3)
  • Position 已重命名为 DpOffset,并移除了 getDistance() (Ib2dfd)

  • fun Dp.isFinite() 已更改为 val Dp.isFinite (I50e00)

bug 修复

  • Recomposer 现在提供其当前状态的 Flow,因此可监控其 activity 和相关效果的 activity。(Ifb2b9)
  • 现在可通过 keyEvent.nativeKeyEvent 访问原生 keyEvent(I87c57b/173086397
  • animate() 现已替换为 animateAsState(),后者会返回 State<T> 而不是 T。这样可以提高性能,因为失效范围可缩小到读取 State 值的位置。(Ib179e)
  • 添加了语义角色 API 并将 Role 作为参数添加到可点击、可选择和可切换的 SemanticsModifier。更改了 Modifier.progressSemantics,使其也可供 Slider 使用。(I216cd)
  • 新增了基于协程的 API Animatable,用于确保其动画间的互斥性。
    • 新增了 DecayAnimationSpec,用于支持多维衰减动画
    • I820f2b/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(Idbf1bb/175156384
  • 废弃了 Modifier.focusObserver,改为使用 Modifier.onFocusChanged 或 Modifier.onFocusEvent(I30f17b/168511863b/168511484
  • 针对挂起指针输入 API,已将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。(Idf0a1b/175142755
  • 现在,Autofill API 为实验性 API,需要选择启用 (I0a1ec)
  • 添加了解构声明,用于创建 FocuSRequester 实例(I35d84b/174817008
  • 已将 accessibilityLabel 重命名为 contentDescription。将 accessibilityValue 重命名为 stateDescription。(I250f2)
  • 从挂起指针输入 API 中移除了自定义事件(Ia54d5b/175142755
  • 在 SelectionRegistrar 中引入了多个新函数,并且已将 onPositionChange 重命名为 notifyPositionChange。(Ifbaf7)
  • 已将更多 LayoutNode 成员标记为内部函数 (I443c6)
  • 引入了 ToolsInfo 以供工具和测试使用 (I9b190)
  • 已将 AndroidOwner 变为内部函数(Ibcad0b/170296980
  • 移除了 ExperimentalPointerInput 注解 (Ia7a24)
  • 添加了嵌套滚动系统。如需了解详情,请参阅 Modifier.nestedScroll(I36e15b/162408885
  • 已将 subcomposeInto(LayoutNode) 变为内部函数 (Id724a)
  • 更改了 Applier 接口,简化了将树的构建方式从自上而下改为自下而上的过程。

    insert() 方法已重命名为 insertTopDown()

    添加了新方法 insertBottomUp()

    applier 可以使用 insertTopDown()insertBottomUp() 向正修改的树中插入节点,具体取决于哪个方法的效果更好。

    在构建某些树(例如 LayoutNodeView)时,自下而上构建会比自上而下构建效率更高。在做出此变更之前,若想实现自下而上构建,要进行很多插入操作,并需将插入内容复制到需借助自下而上的构建方式来提高性能的每个 applier。通过此变更,Applier 替换 insertBottomUp() 即可实现自下而上构建树,替换 insertTopDown() 即可实现自上而下构建树。(Icbdc2)

  • 向 AndroidDialogProperties 添加了 dismissionOnBackPress 和 dismissionOnClickOutside 属性。通过这些属性可以配置在何时调用对话框的 onDismissRequest lambda。(If5e17)

  • 添加了 painterResource API,以处理光栅化资源格式(例如 PNG)或 VectorDrawables 中的不透明加载 Painter 对象。使用方无需再预先确定资源类型,并可调用此方法来获取 Painter 对象,以便在 Image 可组合项或 Painter 修饰符中使用。(I2c703b/173818471

  • 添加了 Modifier.clearAndSetSemantics,用于清除后代的语义以及设置新语义。(I277ca)

  • 将 ContentDrawScope 移到了 ui-graphics 模块,以便与 DrawScope 位于同一模块内。(Iee043b/173832789

  • 引入了 PathEffect 图形 API,以便为已描边的形状提供不同的图案。 废弃了 NativePathEffect,取而代之的是 PathEffect 的 expect/actual 实现。(I5e976b/171072166

  • 向 Compose 添加了 IdlingResource 接口,作为 Compose 支持的 Espresso 空闲资源变体。此类接口可通过 ComposeTestRule 注册和取消注册 (I433f3)

  • 移除了对 ComposeIdlingResource 的全局注册(取消注册),以及到 ComposeIdlingResource 的时钟的全局注册(取消注册)(I32660)

bug 修复

  • 现在,offset 修饰符中的 lambda 会返回 IntOffset(而非 Float)。(Ic9ee5b/174137212b/174146755
  • 从公共 API 中移除了 SlotTable、SlotReader 和 SlotWriter。这些 API 以前被标记为 InternalComposeAPI,现已变成 Compose 模块的内部 API。

    添加了 CompositionData 和 CompositionGroup,用于替代 ui-tooling API 来提取组合信息。CompositionData 和 CompositionGroup 是公开的,但不能在 ui-tooling API 之外使用,因为它们会提供 ui-tooling API 解译的原生信息 (I31a9c)

  • 重构了 ShaderBrush,以便在绘制环境的大小信息可用时延迟创建着色器实例。如需定义在组合时可占满可组合项的整个绘制边界的渐变,而无需实现自定义 DrawModifier 实现,这非常有用。

    废弃了渐变函数构造函数 API,取而代之的是 Gradient 对象中的工厂方法。(I511fcb/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 文件以包含 typealiases/helper 方法,用于协助从已废弃的 API 迁移到当前所用的 API。(Id6044b/173834241
  • 已将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer。此外,还根据 API 反馈将相关类更新为了 GraphicsLayer。(I0bd29b/173834241
  • 添加了新方法 placeable.placeWithLayer() 和 placeable.placeRelativeWithLayer(),允许自定义布局和布局修饰符添加子级,以针对其绘制引入图形层。这样做的好处是:首先,我们可以优化重新绘制,因此当我们需要移动子级时,便无需重新绘制相应子级的内容;其次,我们可以针对子级应用绘制转换(Ibd8f6b/170296989b/171493718b/173030831
  • 从 SubcomposeLayout 声明中移除了 <T>。现在,您无需指定类型即可使用它。(Ib60c8)
  • 添加了 Modifier.scale/rotate API 以便 drawLayer 使用。
    • 已将 Modifier.drawOpacity 重命名为 Modifier.alpha
    • 已将 Modifier.drawShadow 重命名为 Modifier.shadowI264cab/173208140
  • 将 PointerInputData 的 uptime 字段和 position 字段设为了不可为 null。(Id468a)
  • 现在,MaterialTheme 可为选择句柄和选择背景设置正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColor 自定义对所选文字使用的颜色。(I1e6f4b/139320372b/139320907
  • 添加了用于检查托管窗口是否已获得焦点的 WindowManager.isWindowFocused,并且添加了提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2ab/170932874
  • 更新了 TransformOrigin API 以具备所需的解构语法,从而返回 pivotFractionXpivotFractionY 作为 component1component2If43c4b/173586560
  • 添加了针对可组合 lambda 参数命名和位置的 lint 检查,旨在检查其命名和位置是否符合 Compose 准则。此外,根据 lint 检查结果和指南,还将一些尾随 lambda 名为 children 的 API 迁移到了 content。(Iec48e)
  • 添加了 API,用于检查在调度 Keyevent 时 Alt、Ctrl、Meta 或 Shift 辅助键是否已按下。(I50ed9)
  • 添加了新的 Modifier.drawLayer() 重载。您需要在新的 GraphicsLayerScope 上添加 lambda 块,并在其中定义图层参数,定义方式应允许在状态变化发生时跳过重组和重新布局。现在,DrawLayerModifier 为内部函数,我们准备将其逻辑迁移到 LayoutModifier 的 placeable.placeWithLayer() 方法中(I15e9fb/173030831
  • 废弃了名称后缀为 Ambient 的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 Compose API 准则)。(I33440)
  • androidx.compose.ui.text.Typeface 移到了 androidx.compose.ui.text.font.Typeface (Ic2b81)
  • 已将语义参数 mergeAllDescendants 重命名为 mergeDescendants。(Ib6250)
  • 新增拖动手势检测器挂起指针输入 API,包括屏幕方向锁定。(Icef25)
  • 已将 VectorAsset 重命名为 ImageVector。根据 API 准则将 VectorAsset 移到了 Builder 并进行了重命名,使其成为 ImageVector 的内部类。添加了 VectorAssetBuilder 的类型别名,用于关联到 compat 的 ImageVector.Builder。(Icfdc8)
  • 已将 ImageAsset 及相关方法重命名为 ImageBitmap。(Ia2d99)
  • 为 PlacementScope 的 place() 添加了 zIndex 参数,因此 Modifier.zIndex() 现在可用作 LayoutModifier,并且任何自定义布局均可直接在放置位置块中为其子布局设置 zIndex(I711f7b/171493718
  • 将 foundation 语义属性移到了 ui (I6f05c)
  • 废弃了 place(Offset) 和 placeRelative(Offset),改为使用具有 int 偏移的重载 (I4c5e7)
  • 移除了之前废弃的 API:移除了 Modifier.onPositioned,改为使用 Modifier.onGloballyPositioned。移除了 Modifier.onDraw,改为使用 Modifier.onDrawBehind。移除了 Modifier.plus,改为使用 Modifier.then。移除了 Color.Unset,改为使用 Color.Unspecified。移除了 PxBounds 类,改为使用 Rect。(Ie9d02b/172562222
  • Alignment 接口经过了更新,可正常工作。(I46a07b/172311734
  • 使用新的挂起指针输入添加了针对点按、点按两次、长按和按下指示信号的手势检测器。此外,还添加了几个实用程序,让开发者可以更轻松地编写自己的手势检测器。(I00807)
  • 已针对 LayoutIdParentDataid 重命名为 layoutId。已将 Measurable.id 重命名为 Measurable.layoutId。(Iadbcbb/172449643
  • 添加了新的多点触控手势检测器,包括用于检测旋转、缩放和平移的辅助程序。(Ic459d)
  • 引入了 SweepGradientShader API 和 SweepGradientBrush API。(Ia22c1)
  • 现在,测试中的时间控件(TestAnimationClock 及其用例)处于实验阶段(I6ef86b/171378521
  • 添加了基于协程的滚动 API:

    添加了 LazyListState.snapToItem 和 LazyListState.smoothScrollBy,以及针对滚动控件的级别较低的 API。这些 API 可提供挂起接口;在返回前,此接口会一直等待,直到滚动完成为止。(Ie5642)

  • 在 foundation 中添加了 Modifier.focusable。可使用它向组件添加可聚焦的行为(具有正确的语义和无障碍功能)。(I41eb9b/152525426b/162865824

  • 在 AnimationClockTestRule 中提供可委托给其 clock 的方法和属性的默认实现(I7ea3db/173399709

  • 现在,AndroidComposeTestRule 可以接受自定义 activity 启动器(Ib8288b/153623653b/154135019

  • 废弃了 TextLayoutResult.getLineVisibleEnd。作为替代方案,TextLayoutResult.getLineEnd 现在具有新参数 visibleEnd。(I73282)

  • 更新了 TextFieldValue API

    • 将 TextFieldValue.composition 变为了只读
    • 消除了因选择范围无效而抛出的异常(I4a675b/172239032
  • 支持将 TtsAnnotation 用于文字转语音引擎。(I54cc6)

  • 添加了用于在协程中运行动画的新 API (Ied662)

bug 修复

  • 已将 Box 的 alignment 参数重命名为 contentAlignment。(I2c957)
  • 已将 offsetPx 修饰符重命名为 offset。现在,它们采用 lambda 参数(而非 State)。(Ic3021b/173594846
  • 向 TextInputService#onStateUpdated 添加了 resetInput 参数(I3e8f5b/172239032b/171860947
  • 针对可组合函数中的 Modifier 参数添加了 lint 检查。此 lint 检查会检查参数的名称、返回值类型、默认值和顺序是否符合 Compose 准则。(If493b)
  • 暂时添加了相应选项,让 TestAnimationClock 可由 MonotonicFrameClock 驱动(I1403bb/173402197
  • 添加了 Android Typeface 封装容器。您可以通过 typeface 函数(即 typeface(Typeface.DEFAULT))加载 Android Typeface。并且,typefaceFromFontFamily() 已重命名为 typeface() (I52ab7)
  • 添加了 lint 检查,用于检查 Modifier 工厂函数是否已定义为针对 Modifier 的扩展,以便其能够顺利地链接到一起。(I07981)
  • 移除了旧的 ui-test 模块及其桩 (I3a7cb)
  • Recomposer 不再接受 EmbeddingContext;系统会从 effectCoroutineContext 中获取所需的调度依赖项。废弃了 FrameManager;平台在进行集成时应初始化其自己的全局快照处理操作。(I02369)
  • 向无障碍功能节点传递样式信息。(If5e8d)
  • TextUnit.Inherit 已重命名为 TextUnit.Unspecified,以便其与其他单位保持一致。(Ifce19)

Compose UI 版本 1.0.0-alpha07

2020 年 11 月 11 日

发布了 androidx.compose.ui:ui-*:1.0.0-alpha07版本 1.0.0-alpha07 中包含这些提交内容

API 变更

  • 引入了 ScaleFactor 内联类来表示彼此独立的水平轴缩放比例和垂直轴缩放比例,以便支持非统一缩放用例。
    • 向 ContentScale 添加了 computeScaleFactor 方法
    • 添加了 ContentScale.FillBounds,用于执行非统一缩放,以便拉伸源边界来占满目标布局。
    • 添加了使用 Size 参数计算 ScaleFactor 参数的运算符方法。
    • Ic96a6b/172291582
  • 添加了用于创建 Alignment 的 BiasAlignment 和 BiasAbsoluteAlignment 工厂。(Iac836b/169406772
  • 允许开发者强制清除焦点。(I90372)
  • 修复了导致无法在 Compose 内为视图绘制高度的 bug。(If7782)
  • 在 ContentDrawScope 内创建了 onDrawBehind API,以与 Modifier.drawBehind 的命名惯例相符。(I4fc3ab/171955269
  • 添加了对相机距离的支持,用于补充 Layer API 中的 3D 转换 rotationX/rotationY。(I40213b/171492100
  • 添加了不含回调的 SelectionContainer (Ibfadb)
  • 移除了 ExperimentalSubcomposeLayoutApi 注解。现在,无需添加 @OptIn 即可使用 SubcomposeLayout (I708ad)
  • FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 软件包 (Ied2e7)
  • 从 drawShadow() 修饰符移除了 opacity。(I82c62b/171624638
  • 已将 MeasureResult 从 MeasureScope 中移出。(Ibf96db/171184002
  • 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98b/170475424
  • 移除了已废弃的 FocusState2(I686cbb/168686446
  • ZIndexModifier 现在为内部接口(I1808bb/171493718
  • 更新了 lerp 方法中 Size 参数的返回值类型,现在返回非 null Size,以免除进行不必要的装箱操作。(Ib0044)
  • 添加了 TestMonotonicFrameClock,用于通过 kotlinx-coroutines-test 的 runBlockingTest 来测试依赖于 Compose 的 MonoonicFrameClock 来等待组合帧事件的代码 (I4402f)
  • 移除了 GestureScope.localToGlobal(I15299b/171462785
  • 添加了 onAllNodesWithSubstring 查找器(I81dd7b/171462889
  • androidx.ui.test 模块已废弃。请迁移到 androidx.compose.ui.test 和 androidx.compose.ui.test.junit4 (I452e8)

bug 修复

  • captureToBitmap 已移至 captureToImage。(I86385)
  • 废弃了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
  • TextField 已更新为接受 KeyboardOptions (Ida7f3)
  • 已将 KeyboardOptions 重命名为 ImeOptions (I82f36)
  • KeyboardType 和 ImeAction 已移至 KeyboardOptions (I910ce)
  • 添加了 provideDefault,用作提供上下文环境的替代方案,可用于指定只会在尚未提供上下文环境值时设置的上下文环境值。(Id6635b/171024925
  • 废弃了 BaseTextField,请改用 BasicTextField。(I896eb)
  • 引入了 ui-test-junit4 模块 (Ib91f8)
  • relativePaddingFrom 已重命名为 paddingFrom。为方便指定从布局边界到文本基线的距离,添加了 paddingFromBaseline 修饰符。(I0440ab/170633813
  • LaunchedTask 已重命名为 LaunchedEffect,以与 SideEffect 和 DisposableEffect API 保持一致。为了鼓励采用最佳实践,不允许使用不含主题参数的 LaunchedEffect。(Ifd3d4)
  • 引入了可在更新配置时重组的 Resources 可组合项。(I6387cb/167352819
  • 现在,Recomposer 在构造时需要使用 CoroutineContext (Ic4610)
  • 应用多个 Modifier.zIndex() 时,对 zIndex 的值求和。以前是取第一个值。(Ic514cb/170623936
  • 对不应影响公共 API 的内部 SlotTable 实现进行了更改。(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 已成为接口。(I1a087b/170461665
  • 已隐藏 AlignmentLine 的 merge 函数。(I9da1ab/170612900b/170611568
  • 添加了在组合修饰符中指定检查器信息的功能(Idee08b/163494569
  • 在选项菜单中添加了 SelectAll 选项 (Ief02b)
  • DrawTransform.rotate 已更新为接受 center 的一个默认 pivot 参数,以与文档相符。
    • DrawScope.rotateRad 已更新为使用轴心点的 Offset,以与其他转换方法相符。
    • 对轴心的 x 坐标和 y 坐标使用浮点数的 DrawScope.rotateRad 重载已废弃。
    • Iffcbbb/170434992

bug 修复

  • 针对 androidx 启用了 MissingGetterMatchingBuilder 的 API lint 检查(I4bbeab/138602561
  • 添加了测试。(I6b8ae)
  • 在 ComposeTestRule 中启用了过渡;从 ComposeTestRule 中移除了用于启用闪烁光标的选项。(If0de3)
  • 添加了 KeyboardCapitalization IME 选项 (I8ac38)
  • 向 CoreTextField 添加了单行键盘选项 (I72e6d)
  • SimpleContainer 已移至 PopupTestUtils.kt 中 (I65c3e)
  • Radius API 已重命名为 CornerRadius,更清楚地表明它在整个 Compose 中的使用方式。更新了文档,指出负的圆角半径值被限制为零。(I130c7b/168762961
  • 如果子 Android 视图在调用 onTouchEvent 时对除 ACTION_DOWN 外的所有操作都返回 false,那么系统会继续向这些子视图发送 MotionEvent,这提高了 Android 互操作性(I94c5ab/170320973
  • Box 已成为内联函数。(Ibce0cb/155056091

外部贡献

  • AnnotatedString.capitalizeAnnotatedString.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。还添加了用于明确配置此行为的选项(I64966b/143778148b/143778149
  • 现在可更改使用情况数据。此外,对使用了更改的扩展函数的调用不会再返回新的 PointerInputChange,而是更改所提供的 PointerInputChange。

    使 PointerEvent 数据可更改以便用户代码无法修改其他指针数据的流程一共分为两步,这是第一步。第二步是从 PointerInputFilter.onPointerEvent(...) 中移除 List<PointerInputChange> 返回值类型。(Id067e)

  • 在 Text 和一个 Demo 中停用了 Selection。(Ie7e97)

  • 使 onGloballyPositioned 成为内联函数 (I15830)

  • 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8b/169083903

  • 向 Owner 添加了 hasPendingMeasureOrLayout 属性,以指明 Owner 是否有任何待处理的布局工作。(I3d9f8b/169038599

  • 添加了能够以编程方式清除焦点的 API(Ie1dc2b/161487952

  • 移除了 PointerInputFilter.onPointerInput(...)。应改为使用 PointerInputFilter.onPointerEvent(...)。(I6f04a)

  • Size 的变更

    • 移除了 Size.getFlipped
    • 移除了 Size.rem
    • 移除了 Size.truncDiv(Ief44db/169790720
  • 在对内联类的标记值进行标准化的过程中,将 Color.Unset 重命名为 Color.Unspecified,以与其他内联类保持一致(I97611b/169797763

  • 引入了 TextOverflow.None。当溢出为 None 时,Text 将不再处理溢出,而是向 LayoutNode 报告其实际大小。(I175c9b/158830170

  • AnnotatedString.Builder.addStringAnnotation 中的 scope 参数已重命名为 tag,以在各 API 间保持一致。(I7c8cb)

bug 修复

  • 通过减少每次滚动时 subcomposition 中的工作量,改善了 LazyColumn/Row 的滚动性能。为 Composition 类添加了新的 hasInvalidations() 方法。将 Recomposer 中的 hasPendingChanges() 方法重命名为 hasInvalidations()(Ib2f32b/168293643b/167972292b/165028371
  • 将 Size.Unspecified 的参数从 Float.POSITIVE_INFINITY 更新为 Float.NaN。更新了 Painter 实现,以针对 Size.Unspecified 以及是非有限大小进行检查。(I95a7e)
  • 自定义布局中 place() 调用的顺序现在可定义子级的绘制顺序 (Ibc9f6)
  • 支持将 AnnotatedString 转换为SpannableString,以确保可访问性。(Ief907)
  • 针对旧版平台上的 Android 类添加了桩,以尽可能避免使用反射。(Ia1790)
  • 修复了以下 bug:如果显示软件键盘会导致应用平移,那么指针输入坐标会变得不正确。(Ic4cecb/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(),分别用于在内容布局已经过重新测量和尺寸发生变化时接收回调。(I657cfb/154108792
  • 添加了长按语义操作(I6281bb/156468846
  • 已将 FocusManager 设为不公开。(I7872f)
  • 更新了实现,以创建专用的 DrawCacheModifier 实现,而不是在 DrawModifier 中添加可选属性。

    更新了各种方法的文档 (Ibd166)

  • 将 TextRange 变为内联类,以避免创建对象。(Id034b)

  • 无法再从自定义布局的放置位置块中读取 PlacementScope#parentWidth 和 PlacementScope#parentLayoutDirection。(Icc1aeb/168295623

  • 向语义属性添加了 AccessibilityScrollState。(Ifeda9)

  • 引入了 Modifier.drawWithCache,以支持创建相应绘制对象,使其根据大小/状态信息酌情重新创建依赖项 (I376dc)

  • 移除了 ParagraphConstraints。现在,Width 会直接传递给 Paragraph。(Ica712)

bug 修复

  • 更新了多个图形 API
    • 更新了缩放和旋转的转换 API,现在使用单个 Offset 参数来表示数据透视坐标,不再对 DrawScope 和 DrawTransform 中的 x/y 坐标使用单独的浮点数参数
    • 移除了 Rect.expandToInclude 和 Rect.join 方法
    • 更新了 Radius 文档,除了介绍 elliptical(椭圆形)之外,还介绍了 oval(卵形)
    • 添加了相关文档,指明不能直接调用内联 Radius 类的公共构造函数,而应通过对应的函数构造函数对 Radius 对象进行实例化
    • 移除了用于查询 topRight、bottomRight、bottomCenter 等的 RoundRect API
    • 废弃了 Rect.shift,取而代之的是 Rect.translate
    • 移除了 RoundRect.grow API 和 Rect.shrink API
    • RoundRect.outerRect 已重命名为 Rect.boundingRect
    • 移除了 RoundRect.middleRect/tallMiddleRect/wideMiddleRect 和 Rect.isStadium 方法
    • RoundRect.longestSide 已重命名为 RoundRect.maxDimension
    • RoundRect.shortestSide 已重命名为 RoundRect.minDimension
    • 将 RoundRect.center 从函数变更为了属性
    • 更新了 RoundRect 构造函数,现在使用 Radius 属性,不再使用针对 x/y 半径值的单独参数
    • 移除了假定对象是原点为 0,0 的 Rectangle 的 Size API
    • 在 Radius 中添加了一个销毁 API
    • 已改为将各种 RoundRect 扩展函数迁移为属性
    • I8f5c7b/168762961
  • 废弃了 foundation.Box。请改用 foundation.layout.Box。(Ie5950b/167680279
  • Stack 已重命名为 Box。将废弃之前存在的 Box,改为使用 compose.foundation.layout 中的新 Box。新的 Box 会在存在多个子元素时,在堆栈中将一个子元素放在另一个子元素之上,其行为不同于旧版 Box,后者的行为类似于 Column。(I94893b/167680279
  • 废弃了 Box 装饰参数。如果您想对框进行装饰/填充,请改为使用 Modifier(Modifier.background、Modifier.border、Modifier.padding)(Ibae92b/167680279
  • 更新了多个图形 API
    • DrawScope API 已更新为采用作用域转换方法,以指明仅在回调内应用转换,并在调用回调后移除该转换
    • clipPath 文档已更新为引用 Path,而非圆角矩形
    • 在文档中修复了 clipPath 中 right 参数的间距问题
    • DrawScope.drawCanvas 已重命名为 drawIntoCanvas,并移除了 size 参数
    • inset 方法中的 dx/dy 参数已重命名为 horizontal 和 vertical
    • 添加了边衬区重载,用于为所有 4 个边界提供相同的边衬区值
    • 在有关 inset 方法的文档中移除了指明边衬区值会应用于所有 4 个面的说明
    • 更新了 Rect 类的文档
    • 更新了对 Rect 参数的注释,以与 KDoc 样式保持一致
    • 移除了 Rect.join 和 Rect.expandToInclude
    • 为 Rect.translate(offset) 创建了重载,并废弃了 Rect.shift
    • If086ab/167737376
  • 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行了注解,使这些 API 变为内部 API 并隐藏其 KDoc(I554ebb/168308412
  • 从 Top 中移除了 SelectionContainer,以停用默认选择并避免出现意外行为。可改为专门使用 SelectionContainer 来封装需要设为可选择的内容。(I8dfe0b/158459594

版本 1.0.0-alpha03

2020 年 9 月 16 日

发布了 androidx.compose.ui:ui-*:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

API 变更

  • 移除了向前/向后滚动语义操作。在 AccessibilityRangeInfo 中添加了 steps。(Ia47b0)
  • Owner 中移除了 onInvalidate() - OwnedLayer 处理失效问题。(Ica72bb/162061312
  • 移除了 Size API 中使用 Offset 参数的运算符方法。这些运算结果不明确,且结果的类型与预期不符。例如,size - offset 所得的差值应返回偏移量还是大小?

    还移除了 Size 类中已废弃的方法。(Iec902b/166514214

bug 修复

  • 修复了 LazyColumn 的项有时会被错误绘制的问题,该问题在某些情况下还会导致出现崩溃问题。(Ibcf17b/163066980b/165921895
  • 已废弃 DpConstraints 以及使用它的 API。(I90cdbb/167389835
  • createAndroidComposeRuleAndroidInputDispatcherandroidx.ui.test.android 移动到了 androidx.ui.testIdef08b/164060572
  • gravity 在布局 API 中用到时被一致地重命名为 align 或 alignment。(I2421ab/164077038
  • 根据 ComposeTestRule 增加了 onNode 及其他全局方法,原因是当前的全局方法即将被废弃。(Ieae36)

版本 1.0.0-alpha02

2020 年 9 月 2 日

发布了 androidx.compose.ui:ui-*:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

API 变更

  • 移除回调,以便在 LayoutNode 边界发生更改时通知 Owner。(If654eb/166106882
  • 添加了对矢量图形路径上 filltype 参数的支持,以便根据 evenOdd 或 NonZero 路径填充规则为各种形状的刘海屏提供支持。(I43dd2)
  • Uptime 和 Velocity 现已成为内联类 (I48f4a)
  • Duration 现已成为内联类 (I565eb)
  • 添加回调,以便在 LayoutNode 边界发生更改时通知 Owner。(Ic40b3)
  • 修复了包含 Offset 和 radius 的 Rect 函数构造函数按照左、右、上、下(而非左、上、右、下)的顺序创建矩形的问题。

    移除了已废弃的 Rect 伴生构造函数方法,改为使用函数构造函数。

    添加了用于验证 Rect.kt 中方法的测试(I08460b/165822356

bug 修复

  • 添加了 MutableRect,这是一种可修改的矩形。(I71bd2b/160140398
  • Matrix4 已替换为 Matrix。移除了 vectormath 软件包中的所有其他部分。(Ibd665b/160140398
  • 可组合函数的调用规范发生了变化。这是一项重大的二进制文件更改。所有库都必须重新编译才能使用此版本的 Compose 编译器插件。

    这项更改不会在源代码级别产生重大变化,因为只有已更改的 API 属于明确选择启用的编译器 API。(I7afd2b/158123185

  • 修复了在以下情况下可能会发生崩溃的问题:到 PointerInputFilter 的调度可能会导致 PointerInputFilter 被同步移除。(I58f25)

版本 1.0.0-alpha01

2020 年 8 月 26 日

发布了 androidx.compose.ui:ui-*:1.0.0-alpha01版本 1.0.0-alpha01 中包含这些提交内容

版本 0.1.0-dev

版本 0.1.0-dev17

2020 年 8 月 19 日

发布了 androidx.compose.ui:ui-*:0.1.0-dev17版本 0.1.0-dev17 中包含这些提交内容

API 变更

  • 废弃了 emitView。请在可行的情况下改用 AndroidView 在 Compose 中发出 View。请注意,今后将不再支持直接对 View 和 ViewGroup 进行组合,除非二者是组合树的分支(在这种情况下,可通过 AndroidView 进行组合)。(I29b1eb/163871221
  • FocusState2 已废弃,取而代之的是 FocusStateIa8b79b/160822876b/160923332
  • 移除了已废弃的 AndroidView 重载。(I946b9b/163802393
  • 自定义 emit 现在可以做如下声明:可以跳过它的一个或多个 setter,并且可以独立于 emit 对 setter 进行重新组合。(Ibbd13)
  • 更改了 Vector 类使其不再是数据类,因为相同的对象实例也用于组合。

    为 VectorPainter 添加了 mutableStateOf 标记,以便在 vector 的内容更改时进行有条件的重新绘制。

    重构了 VectorComponent 实例,使其成为 VectorPainter 的一部分,因为它可以跨组合重复使用。

    更新了 GroupComponent 和 PathComponent,使其名称字段可变(Ieae45b/151378808

  • 移除了 onChildPositionedOnChildPositionedModifier。开发者应改为在子布局上使用 onPositionedOnPositionedModifier。(I4522eb/162109766

  • Offset 已成为内联类 (Iaec70)

  • 向 SelectionContainer 添加了修饰符参数(I4aadab/161487952

  • 移除了已废弃的 FocusModifier(I0b4bab/160922116b/160821157b/162441435b/160822875b/160921940

  • SemanticsPropertyKey 添加了 mergePolicy lambda。此 lambda 可用于为 mergeAllDescendants 语义合并定义自定义政策。默认政策为:如果已有父项值则使用父项值,否则使用子项值。(Iaf6c4b/161979921

  • Constraints 现已成为内联类 (I88736)

  • 添加了将通用焦点逻辑移出 AndroidComposeView 的 FocusManager(I528efb/161487952b/162206799

  • 为 Alpha 版更新了 PointerEventPass 名称。(Ifda6f)

  • IntOffset 现已成为内联类 (Iac0bf)

  • IntSize 现已成为内联类 (I2bf42)

  • PlacementScope.placeAbsolute() 已重命名为 PlacementScope.place(),以前的 PlacementScope.place() 已重命名为 PlacementScope.placeRelative()。因此,PlacementScope.place() 方法将不再自动在从右到左的上下文中镜像位置。如果需要执行此镜像,请改用 PlacementScope.placeRelative()。(I873acb/162916675

  • AlertDialog 现在将 FlowRow 用于按钮(I00ec1b/161809319b/143682374

  • 将一些测试实用程序设为非公开状态,因为尚未将它们放在其所属的位置。这些实用程序将来会公开。(I32ab1)

  • 重构了指针输入代码的组织方式。(Ie3f45)

  • 废弃了 PxBounds,取而代之的是 Rect。使用 PxBounds 的所有情况都更新为使用 Rect,并添加了适当的废弃/替换注解,以辅助迁移。(I37038b/162627058

  • 移除了已废弃的 KeyEvent2,改为使用 KeyEvent。(Ied2d0b/162097587

  • KeyEvent 具有 Unicode 属性,可用于获取由指定键和元键状态组合生成的 Unicode 字符 (If3afc)

  • 将 DelayUp 自定义事件和相关类设为可选 API,因其极有可能会发生更改。(I56d6f)

  • 移除了不再需要的 2 个 PointerEventPass。(I3dd9d)

  • 向 Paragraph.paint 添加了参数 color、shadow 和 TextDecoration。该函数对避免不必要地重新创建 Paragraph 非常有用。(I81689)

bug 修复

  • 从 TextField 中移除了 onFocusChanged 回调,请改为使用 Modifier.focusObserver。(I51089b/161297615
  • 废弃了 Modifier.drawBorder,请改为使用 Modifier.border。Border 数据类已替换为 BorderStroke(I4257db/158160576
  • 移除了已废弃的 FrameManager 调用。

    更改了内部 Compose API,从而降低了跟踪状态对象(如 mutableStateof())所需的开销 (I80ba6)

  • VerticalScroller 和 HorizontalScroller 已移除,请改为使用 ScrollableColumn/Row。Modifier.drawBackground 已移除,请使用 Modifier.background(I73b0db/163019183

  • 解决了在 for 循环内使用某些用于保存状态的方法时出现崩溃的问题。现已支持在 savedInstanceState() 中使用同一键,并已根据此新要求对 UiSavedStateRegistry 的 API 做出调整(I4ab76b/160042650b/156853976b/159026663b/154920561

  • 为清楚起见,现在废弃了 state { ... } 可组合项,改为对 remember { mutableStateOf(...) } 的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的 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。(I87f95b/162109766
  • 已废弃 setViewContent,请改用 setContent。(I7e497b/160335130
  • 添加了 AndroidViewBinding API,用于根据 ViewBinding 膨胀和组合布局资源。(I081c6)
  • KeyEvent2 已替换为 KeyEvent(I2d770b/162097585
  • 添加了对 Alt 硬件按键的支持 (I9036b)
  • 废弃了 FocusManager,改为使用 Modifier.focus()、Modifier.focusObserver() 和 Modifier.focusRequester()。(I74ae4b/162211322
  • loadVectorResource 支持 trimPath 属性 (I808fe)
  • 将 Dialog 移至 UI (I47fa6)
  • 移除了不再需要的 2 个 PointerEventPass。(I33ca7)
  • 实现了 PointerInteropModifier,用于提供接收 MotionEvent 并像 Android View 的实现一样与 Compose 交互的功能。(Ieb08c)
  • 移除了已废弃的 tag 修饰符。请改用 layoutId。(Idaa05b/162023919
  • 更新了 API 对从右到左布局的支持。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)
  • 支持在矢量图形中进行路径剪裁(Ie16c9b/158188351
  • 添加了 Modifier.layout(),可方便地用于创建自定义布局修饰符(I73b69b/161355194
  • 添加了一个新的 AndroidView API,并废弃了现有的 AndroidView API。(I5bcfd)
  • 废弃了 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的 Modifier.padding().background() + anotherModifierIedd58b/161529964
  • 添加了 [Abstract]ComposeView 子类,用于在视图层次结构中承载 Compose 内容。(I46357)
  • RowColumn 现在属于内联函数,其使用开销将显著降低。(I75c10)
  • 添加了 SubcomposeLayout。这是一个低级别基元,如果我们想要使用仅在衡量子树组合期间后期可用的一些值,就可以利用此基元在衡量期间组合子项。例如,WithConstraints 并非通过 SubcomposeLayout 实现。(I25cc8)
  • 添加了 SemanticsNode.positionInRoot,用于获取 SemanticsNode 相对于 Compose 层次结构的根的位置(Icdf26b/161336532
  • 将 MotionEvent 从 Android 一直传递到 Compose 再回到 Android。(I14be8b/158034713
  • 移除了 dropdownPopup。(I00430)
  • 修复了刘海屏上弹出式内容的位置问题。(Idd7dd)
  • 添加了用于获取 TextLayoutResult 的无障碍操作(I9d6e6
  • 添加了 RemeasurementModifier。用户可以通过它同步重新测量布局。一般而言,您永远也不需要它,因为重新测量/重新布局会自动发生,但是在 LazyColumnItems 内,滚动期间需要使用它。(I5f331b/160791058
  • 移除了 getLineEllipsisOffset/getLineEllipsisCount,改为使用 getLineVisibleEnd/getLineEnd/isLineEllipsized。(I85aa2)
  • 为遵循最佳实践,添加了一些标记/注解。(I66b20)
  • 在 TextLayoutResult 中公开了更多行 API。(I79bd2)
  • 现在可通过 Foo.VectorConverter 访问用于转换内置单位的内置矢量转换器。例如 Dp.VectorConverter、Color.VectorConverter、Float.VectorConverter 等 (I3e273)

bug 修复

  • 修复了大量 API 问题 (I077bc)
    1. 移除了未使用的 OffsetBase 接口
    2. 使 Offset 类与 IntOffset 类保持一致,以获得一致的 API Surface
    3. 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
    4. 从 Canvas 接口中移出了 nativeCanvas 方法,以支持使用者创建自己的 Canvas 实例
    5. 创建了 stub EmptyCanvas 类,用于将 DrawScope 重构为非 null 参数而不是 lateinit,并确保字段的不可为 null 性
    6. ClipOp 枚举已重命名为 Pascal 大小写形式
    7. FilterQuality 枚举已重命名为 Pascal 大小写形式
    8. StrokeJoin 枚举已重命名为 Pascal 大小写形式
    9. PointMode 枚举已重命名为 Pascal 大小写形式
    10. PaintingStyle 枚举已重命名为 Pascal 大小写形式
    11. PathFillType 枚举已重命名为 Pascal 大小写形式
    12. StrokeCap 枚举已重命名为 Pascal 大小写形式
    13. 更新了 DrawCache 实现,现在不再使用 lateinit 参数
    14. 更新了 DrawScope,不再将 lazy 委托用于 fillPaint 和 strokePaint 内部参数
    15. 更新了 Image 可组合项,以避免使用 Box,从而减少开销
    16. 更新了 Outline 类,在其中添加了 @Immutable 注解
    17. 更新了 PathNode,为每个路径指令添加了 @Immutable 注解
    18. 更新了 Vector 子组合以移除对是否相等所做的多余的条件检查,因为 Compose 已经处理了这些检查
    19. 废弃了 Rect 伴生构造函数方法,改为使用函数构造函数
    20. 使用 @Immutable 和 @Stable API 更新了 Brush 类和函数构造函数
    21. VertexMode 枚举已更新为 PascalCase 大小写形式
    22. 更新了 DrawScope selectPaint 方法,可以有条件地覆盖绘图时用到的各 stroke 参数(如果这类参数发生了更改)
    23. 更新了 Size,现在添加了解构 API,将 UnspecifiedSize 重命名为 Unspecified,并移除了未使用的方法
  • 更新了 Compose BlendMode API 的使用,以便在 Android 框架 BlendMode 和 PorterDuff 模式(根据 API 级别而定)之间正确进行映射。引入了 BlendMode#isSupported API 用于查询功能,以便在使用前确定设备是否支持 BlendMode。(I0ef42)
  • 为 Lazy 列表的 itemContent 参数添加了 LazyItemScope。它提供了用于填充父项最大尺寸的修饰符,解决了以下用例的问题:该项应该填充视口,但因为该项是使用无限约束测量的,致使常规的 Modifier.fillMaxSize() 不起作用。(Ibd3b2b/162248854
  • 移除了 SemanticsNodeInteraction.performPartialGesture。请改用 SemanticsNodeInteraction.performGesture。(Id9b62)
  • LazyColumnItems 已重命名为 LazyColumnForLazyRowItems 已重命名为 LazyRowFor (I84f84)
  • foundation.shape.corner 软件包已扁平化为 foundation.shareI46491b/161887429
  • AndroidComposeTestRule 已重命名为 createAndroidComposeRule。(I70aaf)
  • TextLayoutResult 添加了更多 API。(Id7e04)
  • 已将 FilledTextField 重命名为 TextField,将基础 TextField 重命名为 BaseTextField,以便轻松找到所需的最简单的 API 供您使用(Ia6242b/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(I46919b/160822875b/160922136
  • 添加了一个修饰符,用于观察焦点状态的变化。(I05866b/160924455b/160923326
  • 添加了一个修饰符,用于请求焦点更改(I8dd73b/161182057b/160924778
  • 调整了工具栏菜单,以正确显示复制、剪切和粘贴选项。(Id3955)
  • 单值语义属性现在使用调用样式。例如,“semantics { hidden = true }”现在写为:semantics { hidden() }。(Ic1afdb/145951226b/145955412
  • 添加了 Modifier.focus,以替换 FocusModifier。(Ib852ab/160924778
  • 为 TextField 选择添加了 FloatingToolbar。(Ie8b07)
  • 为与按键输入相关的 API 添加了一个实验性 API 注解 (I53c0a)
  • 为所有与焦点相关的 API 添加了一个实验性 API 注解(I53b24b/160903352
  • 添加了 FocusState2,以替换 FocusDetailedState(I0a3bab/160822595
  • 添加了 ExperimentalFocus,它是 Focus API 的 @OptIn 注解。(I1544bb/160820961
  • 添加了一个 IntBounds 单元类,它表示布局的整数像素边界。更新了 PopupPositionProvider 的 API 以供使用。(I0d8d0b/159596546
  • Applier 现在需要一种 clear() 方法来处理组合 (Ibe697)
  • 废弃了 KeyEvent,并由 KeyEvent2 替代 (I68730)
  • 添加了一种新的可选标记 useUnmergedTree,以测试查找程序。(I2ce48)
  • 将 LayoutNode 变成了实验性 API (I4f2e9)
  • 为各种内联类类型添加了复制方法,包括:

    • Offset
    • 尺寸
    • Radius
    • Motion
    • TransformOrigin

    • 废弃了 Size.copy 伴生对象方法,改为使用实例复制方法(Ife290b/159905651

  • 弹出式窗口、对话框和菜单现在继承了上下文 MaterialTheme(Ia3665b/156527485

  • TextDirection 已重命名为 ResolvedTextDirection (I3ff38)

  • 从 Layout() 函数的测量块中移除了布局方向参数。但是,可以通过测量范围对象在回调内提供布局方向 (Ic7d9d)

  • 重构了 SelectionHandles 以便重复使用。(I420e0)

  • 移除了 Clickable,改为使用 Modifier.clickable (I84bdf)

  • 删除了 TestTag 和 Semantics,改为使用 Modifier.testTag 和 Modifier.semantics(I15ff0b/158841414

  • 在此变更之前,如果存在 @Composable 函数,Compose 编译器插件会以非常复杂的方式拦截对该函数内构造函数的调用(I5205ab/158123804

  • Modifier.tag 已重命名为 Modifier.layoutId,以避免与 Modifier.testTag 混淆。(I995f0)

  • 从 Placeable#get(AlignmentLine) 返回的对齐行 Int 位置值现在为非 null 值。如果缺少查询后的对齐行,则会返回 AlignmentLine.Unspecified。(I896c5b/158134875

  • 为 AndroidView 可组合项添加了一个修饰符参数。(I48a88b/158746303

  • 废弃了 Semantics(),改为使用 Modifier.semantics()。(I72407b/158841414

  • 添加了 viewModel() 可组合项,让您可以创建 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。(If5110b/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 以实现密度界面并提供 LayoutDirection。删除了 ContentDrawScope 中的 DrawScope 子类。Painter 和 PainterModifier 已更新,不再由自身保留 RTL 属性,因为 DrawScope 已提供此信息,无需手动提供 (I1798e)

  • DoubleTapGestureFilter 现会在整个树中消除 SingleTapGestureFilter 的歧义。(If92b1)

  • 更新了 Alignment API 并添加了对绝对对齐的支持(不会在 Rtl 情境中自动镜像)(I38cd3)

  • DrawLayer Modifiers API 已更改:outlineShape 已重命名为 shape,具有 RectangleShape 默认值,并且现在不可为 null;clipToOutline 已重命名为 clip;移除了 clipToBounds,因为对于 RectangleShape 而言,它与 clip == true 相同(I7ef11b/155075735

  • 更新了公开画布的更高级别的 Compose API,改为公开 CanvasScope。这样一来,用户便无需再维护自己的渲染对象。对于仍需要访问画布的使用方,可以使用 drawCanvas 扩展程序方法,该方法提供回调以向底层画布发出绘制命令。(I80afd)

  • withConstraints 尾随 lambda API 已更改。现在,除了两个参数之外,它还具有接收器范围,除了约束和 LayoutDirection 之外,还可以在 Dp 中提供 minWidth、maxWidth、minHeight 和 maxHeight 属性(I91b9ab/149979702

  • LayoutModifier2 已重命名为 LayoutModifier。(Id29f3)

  • 移除了已废弃的 LayoutModifier 接口。(I2a9d6)

  • Layout 和 LayoutModifier2 中的固有特性测量函数现在设有 IntrinsicMeasureScope 接收器,它为隐式传播的布局方向提供固有特性查询 API。(Id9945)

  • Layout 和 LayoutModifier 子级可以使用其他布局方向进行测量。(Ibd731)

  • 添加了新的 Modifier.zIndex(),以控制同一父布局内子级的绘制顺序。DrawLayerModifier 的高度属性已重命名为 shadowElevation,并且不再控制绘制顺序。DrawShadow 的参数顺序已更改:现在第一个参数是 elevation,第二个参数是 shape,默认值为 RectangleShape。(I20150b/152417501

  • 移除了 Owner 中的 onSizeChange 和 onPositionChange。(I5c718)

  • 新增了 Constraints2,一个仅支持 Int 约束值而不是 IntPx 的 Constraints 的副本。IntPx 将被移除,并且所有整数约束都将被假定为类似于 Android 的像素。

    • 还添加了 IntSize,最终它将替换 IntPxSize。(I4b43a)
  • 允许使用任意值实现对齐实例化。添加了 1D 对齐。(Ia0c05)

  • alignToSiblings 现在接受 Measured,而非 Placeable。(I5788d)

  • I45f09b/152842521

    • ScaleFit 已重命名为 ContentScale
    • 将 ContentScale 从 ui-graphics 移到了 ui-core 模块,以与 Alignment API 位于同一模块内。
    • FillMaxDimension 已重命名为 Crop
    • FillMinDimension 已重命名为 Fit
    • Fit 已重命名为 Inside,以便实现更好地与
    • ImageView.ScaleType 等效项匹配
    • 添加了相关文档,指明将 Crop 和 Alignment.Center 一起使用可实现与 ImageView.ScaleType.CENTER_CROP 相同的结果,将 Fit 和 Alignment.Center 一起使用可实现与 ImageView.ScaleType.FIT_CENTER 相同的结果,将 Inside 和 Alignment.Center 一起使用可实现与 ImageView.ScaleType.CENTER_INSIDE 相同的结果。
  • 添加了对绘制修饰符的 RTL 支持。(I0aaf9)

  • 发布了 API,用于从 XML 膨胀 Android 视图。如需了解详情,请观看 ViewInCompose 演示。(I42916)

  • 改进了 DrawModifier API:

    • 确定了 draw() ContentDrawScope 的接收器范围
    • 移除了 draw() 上的所有参数
    • DrawScope 的接口与之前的 CanvasScope 接口相同
    • ContentDrawScope 具有 drawContent() 方法(Ibacedb/152919067
  • 为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。(Icacddb/152735784

  • DrawLayerModifier 和 drawLayer() 现在将 clipToBounds 和 clipToOutline 默认设置为 false。(I0eb8bb/152810850

  • LayoutResult 已重命名为 MeasureResult。(Id8c68)

  • 添加了 LayoutModifier2,一个用于定义布局修饰符的新 API;废弃了 LayoutModifier (If32ac)

  • 将修饰符以及运算符替换成了出厂扩展函数 (I225e4)

  • 添加了 translationX/Y 属性,以支持针对指定层偏移绘制命令显示列表。这对于移动内容以响应动画或触摸事件非常有用。(I8641c)

  • 为 Layer API 添加了 pivotX、pivotY 参数,以支持围绕某个层上的特定点旋转和缩放 (Icf7c3)

  • 添加了 OnPositionedModifier 和 OnChildPositionedModifier,以取代 OnPositioned 和 OnChildPositioned 可组合函数。(I2ec8f)

  • 添加了 LayerModifier,这是一种允许为布局添加 RenderNode 的修饰符。它允许设置剪裁、不透明度、旋转、缩放和阴影。它将取代 RepaintBoundary。(I7100db/150774014

  • 使布局方向可以从父布局节点传递到子布局。添加了布局方向修饰符。(I3d955)

  • Stack 组件支持从右向左的方向 (Ic9e00)

  • 对 Compose 布局中的 RTL 的初步支持 (Ia5519)

  • Density 和 DensityScope 合并到了一个接口中。现在,您可以使用 DensityAmbient.current 代替 ambientDensity()。只需 with(density) 便可代替 withDensity(density) (I11cb1)

  • 更改了 LayoutCoordinate,使 providedAlignmentLine 成为一个集合,而非映射,并使 LayoutCoordinate 实现了 get() 运算符,而非检索值。这样一来,修饰符可以更轻松地修改集合中的一个或多个值,而无需为每个修饰符创建新的集合。(I0245a)

  • LayoutCoordinate 不再有位置属性。在考虑 LayoutModifier、旋转或缩放时,位置属性没有意义。相反,开发者应使用 parentCoordinate 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个 LayoutCoordinate 的转换。

    LayoutCoordinate 会将 IntPxSize(而不是 PxSize)用于尺寸属性。Layout 将整数像素尺寸用于布局,因此所有布局尺寸都应使用整数,而非浮点值。(I9367b)

  • 改进了 Constraints 的 API Surface (I0fd15)

  • 创建了 CanvasScope API,用于封装 Canvas 对象以公开无状态的声明性绘图 API Surface。转换包含在自身的接收器范围内,大小信息也限定在相应的边衬区范围内。它不需要使用方维护自己的渲染状态对象来配置绘图操作。

    • 添加了 CanvasScopeSample 并更新了演示版应用,以包含声明性图形演示 (Ifd86d)
  • 移除了未使用的 MaskFilter API,因为它的用途有限,并且未在大多数用例中针对硬件加速进行优化 (I54f76)

  • RectangleShape 从 androidx.ui.foundation.shape.* 移到了 androidx.ui.graphics.* (Ia74d5b/154507984

  • 将 API 中使用的所有可为 null 的 Color 替换为非 null 值,并使用 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 Framework API 之间的对象转换的命名惯例。同时更新了这些 API 的相关文档 (I86337)

  • 添加了 VectorPainter API,以取代矢量图形的现有 subcomposition API。subcomposition 的结果是 VectorPainter 对象,而不是 DrawModifier。废弃了之前的 DrawVector 可组合项,改为使用 VectorPainter。

    Image(Painter) API 已重命名为 PaintBox(Painter)。创建了 Vector 可组合项,其行为类似于 Image 可组合项,只不过使用 VectorAsset,而不是 ImageAsset(I9af9ab/149030271

  • Image 已重命名为 ImageAsset,以更好地区分 Image 数据和即将推出、用于布置布局及绘制内容的 Image 可组合项。_Body:在 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)

  • 现在可以通过使用 onTextInputStarted 回调提供的 SoftwareKeyboardController 来隐藏/显示软件键盘(I8dc44b/151860051

  • 为委托给 merge() 函数的(文字/段落/跨度)样式添加了加号运算符。(Ia1add)

  • 不再对齐 FontWeight.lerp。它仍然是一个数据类。(I521c2)

  • FontWeight 构造函数现已公开,不再是数据类。(Id6b1f)

  • 向 TextLayoutResult 添加了 getLineStart、getLineEnd、getEllipsisOffset 和 getEllipsisCount (Ibc801)

  • ui-text 模块已重命名为 ui-text-core (I57dec)

  • 移除了未使用的 Size 类,因为正在使用的 ui-geometry 模块中有重复的 Size 类。(I1b602)

  • 添加了 AdapterList,这是一个滚动列表组件,仅用于编写和布局可见项。目前已知问题包括只能处于垂直方向,无法完全处理其子项的所有更改情况。(Ib351b)

  • 向 Box 添加了内边距、边框、形状和背景参数(I05027b/148147281

bug 修复

  • 文本字段中的 onFocusChange 回调已重命名为 onFocusChanged (Ida4a1)
  • 已废弃 VerticalScroller 和 HoriziontalScroller。请使用 ScrollableColumn 和 ScrollableRow 实现内置的 Column/Row 行为和参数体验,或者对您自己的元素使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同样,ScrollerPosition 也已废弃,取而代之的是 ScrollState(I400ceb/157225838b/149460415b/154105299
  • runOnIdleCompose 已重命名为 runOnIdle (I83607)
  • 多个测试 API 已重命名,变得更为直观。所有 findXYZ API 均已重命名为 onNodeXYZ。所有 doXYZ API 均已重命名为 performXYZ。(I7f164)
  • Compose UI 现在可以在 ViewGroups 内进行组合,无需新的组合。有关示例,请查看 ViewInteropDemo。(I9ab0bb/160455080
  • 向 MutableVector 添加了 sortWith 和 removeRange (Icccf7)
  • 实现了拖动选择手柄,用于更改 TextField 的选择。(I27032)
  • 移除了封装 NativeShader 预期类的 Shader 内联类。NativeShader 已重命名为 Shader。封装的 Shader 内联类未向 API Surface 添加任何有价值的东西,并且它是一个内联类,因此请直接使用 NativeShader 类。(I25e4d)
  • 已重构 PainterModifier,以不再基于给定约束和 ContentScale 参数提供缩放。Painter 的实现旨在根据进行绘制的 DrawScope 的给定大小,自行缩放其绘制内容。

    修复了 VectorPainter 的缓存位图调整为默认大小(而非进行绘制的给定大小)的问题。

    更新了 ImagePainter,使其可扩展自己的内容,而不是依赖于 PainterModifier 代表其完成该操作。(I6ba90)

  • 添加了顶级 onFrameNanos 函数用于动画定时 (Ie34c5)

  • 已废弃 @Untracked 注解,替换为 @ComposableContract(tracked=false) (Id211e)

  • 废弃了 androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue。还废弃了使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项。请改为使用 androidx.ui.input.TextFieldValue(I4066db/155211005

  • 解决了以下问题:如果在调度期间通过 subcomposition 移除了 PointerInputFilter,指针输入调度就会导致崩溃。该问题现已解决。(I1f48bb/157998762

  • 解决了以下问题:如果在调度期间通过 subcomposition 移除了 PointerInputFilter,指针输入调度就会导致崩溃。该问题现已解决。(Iab398b/157998762

  • 已将 Radius 类重构为内联类。移除了伴生创建方法,改为使用带有默认参数的函数构造函数,从而让沿 y 轴的半径与强制要求的 x 轴半径参数相匹配。

    更新了 DrawScope.drawRoundRect,以针对沿 x 和 y 轴的半径使用单个 Radius 参数,而不是 2 个单独的浮点数值 (I46d1b)

  • Recompose 可组合项已不再属于有效抽象。大多数重新组合都应由 MutableState 分配促成。在此之外,建议您使用 invalidate 函数来触发对当前范围的重新组合。(Ifc992)

  • 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Iede0b)

  • 更改了 Compose 的编译器的代码生成策略。在更改之前,Compose 编译器会转换对可组合函数的调用。进行此更改后,现在我们可以转换可组合函数的正文,并使调用位置保持不变(大多数情况下)。

    这意味着与 Compose 运行时进行通信的大多数逻辑发生在函数正文的开头,而不是在调用位置。

    这应该是针对所有 Compose 操作的源兼容性更改。大多数 Compose 用户都不需要在更改后更新任何代码。

    为了支持这项更改,所有可组合函数的 JVM 签名均已更改。将接受单个参数的可组合函数转换为接受 3 个参数的函数,其他参数为合成器,即“键”整数,一个用于通过调用传播元数据的位掩码整数。

    Compose 现在还会将默认参数转换为可组合函数。这项操作不会引入函数本身的额外合成默认过载,因此此更改会导致定义的函数变少。

    已知的有意行为更改是由于以下原因造成的:

    1. 有些调用会跳过之前不会跳过的位置
    2. 默认参数表达式中的可组合项表达式现已正确订阅并处理

    这项工作包括一些优化: 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,以包含其他编译时参数(I60756b/143464846

  • 移除了已废弃的 LayoutAlign 修饰符。(I10877)

  • 移除了 RepaintBoundary,改为使用 DrawLayerModifier (I00aa4)

  • Button、FloatingActionButton 和 Clickable 现在有各自的 enabled 参数。Button 上的某些参数已重命名或重新排序。(I54b5a)

  • 将 ButtonStyle 替换成了不同的函数,并移除了文本(字符串)过载。如需了解使用信息,请参阅更新后的示例。(If63abb/146478620b/146482131

  • Ambient API 重大更改。如需了解详情,请参阅日志和 Ambient<T> 文档(I4c7eeb/143769776

  • 将默认 TextDirection 的行为更改为由 LayoutDirection 决定。即,如果 LayoutDirection 为 RTL,则默认的 TextDirection 将为 RTL。以前为 TextDirection.ContentOrLtr/Rtl (I4e803)

  • bug 修复:在 AnnotatedString 上嵌套字体粗细和字体样式时,无法正确呈现文本。(I77a9d)

  • 向 Text() 添加了常用参数。如果您当前正在创建本地文本样式以传递少量此类参数(如 Text(style = TextStyle(textAlign = TextAlign.Center))),则现在可以直接提供参数:Text(textAlign = TextAlign.Center) (I82768)

  • ui-android-text 模块已重命名为 ui-text-android (I68cbe)