使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

Compose UI

与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。
最近更新时间 稳定版 候选版本 Beta 版 Alpha 版
2022 年 9 月 7 日 1.2.1 - 1.3.0-beta02 -

结构

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 界面。Material 3 中包括了更新后的主题和组件,以及动态配色等 Material You 个性化功能,旨在与新的 Android 12 视觉风格和系统界面相得益彰。
compose.runtimeCompose 编程模型和状态管理的基本构建块,以及 Compose Compiler 插件针对的核心运行时。
compose.ui与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。

声明依赖项

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

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

Groovy

dependencies {
    implementation "androidx.compose.ui:ui:1.3.0-beta02"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.3.0-beta02"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.3.0-beta02")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.3.0-beta02"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

反馈

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

创建新问题

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

版本 1.3

版本 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 示例)。迁移前:

    @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,而之前它们并非如此。(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
  • 新增了用于支持工具的 Animation 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 参数。对于在针对基于像素的 ART 进行放大时会像素化的像素 ART,这非常有用。已将 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 中的错误,即滚动浏览后 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 个之前可见的项保持活跃状态(不予处置),即使它们已滚动出边界也是如此。这样一来,当我们需要合成新项时,该组件便可重复使用活跃的 subcomposition,从而改善滚动性能。(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 和 pressIndicaitonGestureFilter。改为将 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
  • 现在,自动填充 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 的便捷 API。
    • 已将 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 内为视图绘制高程的错误。(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)
  • 修复了以下错误:如果显示软件键盘会导致应用进行翻译,那么指针输入坐标会变得不正确。(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 subcomposition 以移除对是否相等所做的多余的条件检查,因为 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
    • Size
    • 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)

  • 添加了未设置的 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 更改为函数 3 而非函数 1 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)

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

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

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