Google 致力于为黑人社区推动种族平等。查看具体举措

Compose UI

与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。
最近更新时间 当前稳定版 下一候选版本 Beta 版 Alpha 版
2021 年 3 月 24 日 - - 1.0.0-beta03 -

结构

Compose 由 androidx 中的 6 个 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.runtimeCompose 的编程模型和状态管理的基本构建块,以及 Compose 编译器插件针对的核心运行时。
compose.ui与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。

声明依赖项

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

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

dependencies {
    implementation "androidx.compose.ui:ui:1.0.0-beta03"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.31"
        kotlinCompilerExtensionVersion "1.0.0-beta03"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

反馈

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

创建新问题

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

版本 1.0.0

版本 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)

问题修复

  • 对实验性 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)

问题修复

  • 添加了用于在 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)

问题修复

  • 现在,放置在视图层次结构中的 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)

问题修复

  • 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)

问题修复

  • 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)

问题修复

  • 现在,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)

问题修复

  • 已将 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)

问题修复

  • 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

问题修复

  • 针对 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)

问题修复

  • 通过减少每次滚动时 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)

问题修复

  • 更新了多个图形 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

问题修复

  • 修复了 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

问题修复

  • 添加了 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)

问题修复

  • 从 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)

问题修复

  • 修复了大量 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

问题修复

  • 文本字段中的 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)