Compose Foundation

使用现成可用的构建块编写 Jetpack Compose 应用,还可扩展 Foundation 以构建您自己的设计系统元素。
最近更新时间 当前稳定版 下一候选版本 Beta 版 Alpha 版
2021 年 4 月 21 日 - - 1.0.0-beta05 -

结构

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.foundation:foundation:1.0.0-beta05"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.32"
        kotlinCompilerExtensionVersion "1.0.0-beta05"
    }
}

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

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

反馈

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

创建新问题

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

版本 1.0.0

版本 1.0.0-beta05

2021 年 4 月 21 日

发布了 androidx.compose.foundation:foundation:1.0.0-beta05androidx.compose.foundation:foundation-layout:1.0.0-beta05版本 1.0.0-beta05 中包含这些提交内容

API 变更

  • FlingBehavior 接口现在标记为 @Stable。所有实现均应遵循 @Stable 协定。(I93354b/184830577

问题修复

  • 修复了 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.foundation:foundation:1.0.0-beta04androidx.compose.foundation:foundation-layout:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

API 变更

  • 将 SoftwareKeyboardController 上的 hideSoftwareKeyboard 和 showSoftwareKeyboard 分别重命名为了 hide()show()
    • 为 LocalSoftwareKeyboardController 提供完整的 CompositionLocal 接口,以便对其进行设置(在测试中尤其有用)(I579a6)
  • 引入了 TextOverflow.Visible。(Ic8f89)
  • 移除了 RowScopeColumnScopeBoxScopeBoxWithConstraintsScope 的公共实例。(I4e83eb/181869067

问题修复

  • 修复了边缘上的 LazyColumn/LazyRow 项在快速滑动后位置不正确的问题(Ie4d13b/183877420
  • 在此变更之前,系统会根据参数跳过本地可组合函数。此更改生效后,系统不会再跳过任何本地可组合函数。之所以会有这项变更,是因为在通常且正常的情况下,本地函数会从父函数获取参数,而跳过本地函数是出现错误的常见原因。

    总之,请参考以下示例:

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button(onClick={ onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    在此变更之前,系统总是跳过 ShowCount 可组合函数,即使更新 count 参数,也是如此。这种情况不会再发生了。(I5648a)

版本 1.0.0-beta03

2021 年 3 月 24 日

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

API 变更

  • 弃用了 DefaultMonotonicFrameClock。现在,如果在不提供 MonotonicFrameClock 的情况下调用 withFrameNanosRecomposer.runRecomposeAndApplyChanges,将抛出 IllegalStateException。(I4eb0d)

问题修复

  • 现在,即使速度为 0,系统也会调用 FlingBehavior.performFling()I0b6e5b/181237123

版本 1.0.0-beta02

2021 年 3 月 10 日

发布了 androidx.compose.foundation:foundation:1.0.0-beta02androidx.compose.foundation:foundation-layout:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

API 变更

  • 添加了多项 LazyColumn 衡量逻辑方面的小优化 (Ic6889)
  • 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I5951eb/168778053
  • 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以取代 TextField 上的旧 SoftwareKeyboardController 接口。(I84472b/168778053

问题修复

版本 1.0.0-beta01

2021 年 2 月 24 日

发布了 androidx.compose.foundation:foundation:1.0.0-beta01androidx.compose.foundation:foundation-layout:1.0.0-beta01版本 1.0.0-beta01 中包含这些提交内容

这是 Compose 1.0.0 Beta 版的第一个版本。

API 变更

  • detectDragGestures 添加了 onStart 回调(I67269b/179995594
  • 用于调整为固有尺寸的修饰符不再处于实验阶段。(I15744)
  • 移除了 dp 断言 (I798d2)
  • 从所有文本字段中移除了 SoftwareKeyboardController 回调,很快将被新的 API 替代。(Iae869b/168778053
  • 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
  • 移除了已弃用的 LayoutCoordinates 方法,使用函数代替 positionInParent 和 boundsInParent 的属性(I580edb/169874631b/175142755
  • 为低级别文本组件(例如 CoreTextField)的输入会话创建了新的 TextInputSession。(I8817fb/177662148
  • Placeable 现在公开了 measuredSize,表示实际测量的子布局的大小。该大小可能不遵循测量约束。(Ib2729b/172560206b/172338608
  • 添加了 selectionGroup 修饰符,允许为提供无障碍功能而标记 Tab 或 RadioButton 的集合 (Ie5c29)
  • 添加了 LazyListState.animateScrollToItem

    此方法可顺畅地滚动到列表中的具体项。(I4bfd7)

  • ScrollableState.smoothScrollBy() 已重命名为 animateScrollBy()。LazyListState.snapToItemIndex() 已重命名为 scrollToItem()。ScrollState.smoothScrollTo() 已重命名为 animateScrollTo() (I35ded)

  • Modifier.zoomable 已替换为 Modifier.transformable。添加了 smoothPanBy、smoothRotationBy 作为一项功能。(Ifc32bb/175294473

  • compositionLocalOfstaticCompositionLocalOfdefaultFactory 现在是必需项,而非可选项。

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

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

    除非可提供合理的默认设置,否则我们不建议使用具有不可为 null 的类型的本地设置。如果不存在合理的默认设置,则 defaultFactory lambda 应抛出异常。不过,抛出异常意味着本地设置的使用者将隐式依赖于相关设置是以类型系统不强制执行该设置为前提的。(Ifbd2a)

  • 已将 Indication#createIndication() 改为了 Indication#rememberUpdatedIndication(InteractionState),并从 IndicationInstance#drawIndication() 中移除了 InteractionState 参数。IndicationInstance 应仅负责绘制视觉效果,而不能启动动画/写入状态以响应 InteractionState 的变化。这些动画和状态写入操作应在 rememberUpdatedIndication() 中进行。还将 Modifier.indication 中的 indication 参数改为了必需参数。(Ic1764b/152525426

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

  • 移除了 runBlockingWithManualClockI15cdcb/179664814

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

  • smoothScrollBy 和 scrollBy 方法的软件包已更改为 androidx.compose.foundation.gestures.*I3f7c1b/175294473

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

  • 对尺寸修饰符进行了重命名。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。(I5b414)

  • defaultMinSizeConstraints 已重命名为 defaultMinSize。(I4eaae)

  • 移除了 Modifier.tapGestureFilter。现改用 Modifier.pointerInput { detectTapGestures(...) }。(I266edb/175294473

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

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

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

  • drawerState.open() 和 drawerState.close() 现在是挂起函数。使用 rememberCoroutineScope() 获取 composition 的作用域,从而进行调用(I16f60b/17529473

  • Providers 已重命名为 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
  • 重新设计了 Modifier.scrollable。现在它使用 Scrollable 接口,而不是 ScrollableController 类(I4f5a5b/174485541b/175294473

  • Modifier.draggable 现在接受 DraggableState 而不是简单的 lambda。您可以通过 rememberDraggableState { delta -> } 创建状态,以获得与之前相同的行为(Ica70fb/175294473

  • 为调整为所需的固有尺寸,添加了 requiredWidth(IntrinsicSize) 和 requiredHeight(IntrinsicSize) 修饰符。(I0a6b4)

  • 移除了已弃用的 emptyContent()。已改用 {}。(Idb33fb/179432510

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

问题修复

  • 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以替换 TextField 上的旧 SoftwareKeyboardController 接口。(I658b6b/168778053

版本 1.0.0-alpha12

2021 年 2 月 10 日

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

API 变更

  • Modifier.pointerInput 现在需要 remember 键来指示指针输入检测协程何时应重启以建立新的依赖项。(I849cd)
  • 测试更新:hasText() 将检查文本字段中的输入和标签/提示/占位符文本 (Iab803)
  • 添加了 PaddingValues.Absolute,可在接受 PaddingValues 的 API 中使用。(Ia5f30)
  • 已弃用 onImeActionPerformed,请改用 KeyboardActions(If0bbdb/179071523
  • 为了更好地匹配 ImageBitmap 和 ImageVector 的命名惯例,ImagePainter 已重命名为 BitmapPainter,以并行使用 VectorPaperer。(Iba381b/174565889
  • 现在使用 substring 作为参数,改进了 substring 测试 API (Icbe78)
  • 引入了将应用于无限动画的 InfiniteAnimationPolicy 协程上下文元素。默认情况下,除非使用 ComposeTestRule 运行测试,否则系统不会安装任何政策。(I50ec4b/151940543
  • Animatable.snapTo 和 Animatable.stop 现在是挂起函数 (If4288)
  • ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(Icf416)
  • 解构声明和 copy() 方法在多个类中已很少用到,现已将其从这些类中移除。(I26702b/178659281
  • 添加了对 LazyColumn/LazyRow 的自定义键支持。这样我们可以更灵活地处理项的重新排序。因此,当您重新排列元素或从中间移除项时,您存储在 remember {} 代码块中的状态将随相应项一起移动。

    LazyColumn {
        items(users, key = { user -> user.id }) { ... }
    }
    
  • 已将 Indication#createInstance 更改为 @Composable,并将 LocalIndication 更改为包含一个 Indication,而非 () -> Indication。(I5eeeab/157150564

  • Constraints.enforce 已替换为 Constraints.constrain。(I8b8ea)

  • 已弃用 loadFontResource,请改用 fontResource。已弃用 imageResource、loadImageResource、vectorResource 和 loadVectorResource,请改用 painterResource。(I6b809)

  • 出于性能方面的原因,ScrollAxisRange 语义现在接受返回浮点数的 lambda,而不是直接使用浮点值。(If4a35b/178657186

  • 添加了 EditableText 语义,用于标记文本字段的可修改输入文本,以提供无障碍服务,同时提供相应测试方法用于检查语义 (I8e07a)

  • Modifier.clickable 现在不支持双击和长按。使用 Modifier.combinedClickable 可实现此功能。(Iafad1)

  • toIntPx() 已重命名为 roundToPx()。(I9b7e4b/173502290

  • IntBounds 已重命名为 IntRect,相应 API 也得以改进。(I1f6ff)

  • 已弃用 Modifier.dragGestureFilter,请改用 Modifier.pointerInput { detectDragGestures (...)}。或者,针对单轴拖动使用 Modifier.draggable(I0ba93b/175294473

  • 已重命名 Ambient,以与 Ambient 重命名为 CompositionLocal 匹配。Ambient 过去被命名为 AmbientFoo,现在 CompositionLocal 被命名为 LocalFoo。(I2d55d)

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

  • 动画中的播放时间已统一到纳秒级 (If776a)

  • 已弃用 @ComposableContract,改为使用三个更具体的注解。

    @ComposableContract(restartable = false) 已变为 @NonRestartableComposable@ComposableContract(readonly = true) 已变为 @ReadOnlyComposable@ComposableContract(preventCapture = true) 已变为 @DisallowComposableCalls@ComposableContract(tracked = true) 已被移除。(I60a9d)

  • 已弃用 emptyContent()(@Composable () -> Unit).orEmpty() 实用程序,因为它们不再具有任何积极的性能影响或价值 (I0484d)

  • 现在可以关闭 Recomposer 了。关闭的 Recomposer 会继续重组,直至组合子协程完成。Recomposer.shutDown 已重命名为 cancel,与 close 形成对比。(Ib6d76)

  • 已将与 LazyVerticalGrid 相关的 API 标记为实验性(Ia53e3b/178519862

  • rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 软件包。(I1366eb/177338004

  • RestorableStateHolder 已重命名为 SaveableStateHolder 并移至 androidx.compose.runtime.saveable package。内部方法 RestorableStateProvider 已重命名为 SaveableStateProvider。已移除通用类型,因此您可以直接将 Any 作为键传递。不再需要实验性注解。(I0902eb/174598702

  • Saver、listSaver()、mapSaver()、autoSaver 已从 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6)

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

  • RounderCornerShape、CutCornerShape 和 CornerBasedShape 中的参数已从 left/right 重命名为 start/end,以支持 Shape 在 RTL 方向的自动镜像。对于不需要自动镜像的情况,引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape。(I61040b/152756983

  • canDrag 已从 Modifier.scrollable 中移除。(Id66e7b/175294473

  • 已重构 Compose 编译器插件面向的 API,旨在使用接口而不是具体类。接口也不再使用类型参数。

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

  • 已移除 Modifier.scaleGestureFilter,请改用 Modifier.zoomable。或者,使用 Modifier.pointerInput { detectMultitouchGestures { ... }}Id5da1b/175294473

  • 现已弃用 AnimatedValue/Float,请改用 Animatable。(I71345b/177457083

    • 从公共 API 中移除了 CoreText 和 CoreTextField
    • 移除了已弃用的 SelectionContainer 重载 (I99c19)
  • 移除了已弃用的非挂起滚动函数,继续采用上一个版本的更改,非挂起滚动函数现已完全移除。请转为使用具有相同名称的挂起函数。您可以通过 rememberCoroutineScope() 获取协程范围。(I3d39cb/178169563

  • 已弃用 androidx.compose.foundation.layout.ConstraintLayout,改为使用 androidx.constraintlayout.compose.ConstraintLayout。您需要添加对 androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01 的依赖项。(I87adc)

  • 已弃用 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicationGestureFilter。改为将 Modifier.clickable 或 Modifier.pointerInput 与 detectTapGestures 函数一起使用。(I6baf9b/175294473

  • 移除了 Recomposer.current()。[Abstract]ComposeView 现在默认设置为延迟创建的、作用域为窗口的 Recomposer(由窗口的 ViewTreeLifecycleOwner 驱动)。在主机生命周期结束时,系统会暂停重组和基于 withFrameNanos 的动画 tick 操作。(I38e11)

  • Recomposer.runningRecomposers 现在提供只读 RecomposerInfo 的一个全局 StateFlow,用于观察进程中正在进行的合成状态。请首选此 API 而不是 Recomposer.current(),后者现在已弃用。(If8ebe)

版本 1.0.0-alpha11

2021 年 1 月 28 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha11androidx.compose.foundation:foundation-layout:1.0.0-alpha11版本 1.0.0-alpha11 中包含这些提交内容

API 变更

  • 弃用了非挂起函数 scrollBy,移除了非挂起函数 scrollTo

    现在,我们建议使用挂起函数来控制滚动并等待滚动完成。在此过渡期间,我们将弃用和/或移除这些函数的非挂起版本。(Ie9ced)

  • 弃用了非挂起函数 smoothScrollBy。现在,我们建议使用挂起函数来控制滚动并等待滚动完成。在此过渡期间,我们将弃用这些函数的非挂起版本。(I12880)

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

  • BasicTextField 收到了一个名为“decorationBox”的新参数。使用此参数,可以向文本字段添加图标、占位符、标签等装饰项,并增大其触摸目标区域。(I16996)

  • 从 Modifier.draggable 中移除了 canDrag 参数(Ic4becb/175294473

  • 移除了接受 FlingConfig 的 AnimatedFloat.fling,请改用挂起函数 Animatable.animateDecay。(I4659bb/177457083

  • 从以下类中移除了 data class

    • InlineTextContent
    • LocaleList
    • (I605c7)
  • 现在可以在组合之外创建可点击项、可切换项和可选择项(I0a130b/172938345b/175294473

  • 弃用了 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

  • 移除了已弃用的 AbsoluteAmalationment。(Iffa96b/177641870

  • 已将 propliantMinConstraints 参数添加到 Box,用于指定是否应将传入的最小约束传递给 Box 的内容。默认值为 false。(I0125bb/152613457

问题修复

  • onCommit、onDispose 和 onActive 已弃用,取而代之的是 SideEffect API 和 DisposableEffect API (If760e)
  • 已将 WithConstraints 重新设计为 BoxWithConstraints 并移至 foundation.layout。(I9420bb/173387208
  • 对 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)

  • Density 现在为 Arrangement 接口的接收器范围。(I18aad)

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

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

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

  • Duration 和 Uptime 将替换为 Long 毫秒值,此步骤消除了指针输入对这些类的依赖。(Ia33b2b/175142755b/177420019

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

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

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

  • 已将 TransformedText.transformedText 重命名为 TransformedText.text

    • TransformedText 不再是数据类 (Ie672a)
  • 以下类不再是数据类:

    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99)
  • 移除了实验性 monotonicFrameAnimationClockOf 方法(Ib753fb/170708374

  • 弃用了全局坐标方法,并新增了基于窗口的坐标方法。(Iee284)

  • 请使用 ImeAction.None 来代替 ImeAction.NoAction

    • 请使用 ImeAction.Default 来代替 ImeAction.Unspecified (Ie1bcc)
  • FocusRequester.createRefs 现在被标记为实验性,因为它可能会发生变化。(I2d898b/177000821

  • 已将 SemanticsPropertyReceiver.hidden 重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。已将 AccessibilityRangeInfo 重命名为 ProgressBarRangeInfo。已将 stateDescriptionRange 重命名为 progressBarRangeInfo。已将 AccessibilityScrollState 重命名为 ScrollAxisRange。已将 horizontalAccessibilityScrollState 重命名为 horizontalScrollAxisRange。已将 verticalAccessibilityScrollState 重命名为 verticalScrollAxisRange。(Id3148)

  • 已将 VisualTransformation 变为功能接口 (I3bba4)

  • 在测试中使用 TestCoroutineDispatcher (I532b6)

  • 移除了 PointerInputData 并修改了 PointerInputChange,以为其指定 PointerInputData 的所有字段。已将 PointerInputEvent 和 PointerInputEventData 变成内部类,因为它们不会在任何公共 API 中使用。(Ifff97b/175142755

  • 已将 TextInputService.onStateUpdated 重命名为 updateState (Id4853)

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

版本 1.0.0-alpha10

2021 年 1 月 13 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha10androidx.compose.foundation:foundation-layout:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

API 变更

  • ImeOptions 和 KeyboardOptions 不再是数据类(I3c898b/168684531
  • VisualTransformation API 变更
    • OffsetMap 已重命名为 OffsetMapping
    • OffsetMapping.identityOffsetMap 已重命名为 OffsetMapping.Identity
    • PasswordTransformation 不再是数据类
    • OffsetMapping 已移至其自己的文件中
    • (I0bdf3)
  • EditOperations API 变更
    • EditOperation 已重命名为 EditCommand
    • 为 EditOperation 的具体实现添加了 Command 后缀
    • EditCommand 不再是数据类
    • EditOperation.process 函数已重命名为 applyTo
    • InputEventListener 已重命名为 InputEventCallback
    • (I0a366)
  • 修改了 Velocity,现在包含分量部分和数学运算。(Ib0447)
  • @ExperimentalTesting 已重命名为 @ExperimentalTestApi,以与类似的实验性 API 注解保持一致(Ia4502b/171464963
  • 针对 LaazyColumn/LazyRow 添加了实验性 stickyHeader 方法 (I0a81d)
  • Color.useOrElse() 已重命名为 Color.takeOrElse() (Ifdcf5)
  • 弃用了 TestUiDispatcher,改为使用 Dispatchers.Main(Ic171fb/175385255
  • 向 Foundation Strings.kt 添加了 Toggle(I4a5b7b/172366489
  • 将 nativeClass 移到了 ui 模块并将其变为内部 API。 更新了 nativeClass 在 equals 实现中的用法,以便改用“is MyClass”。(I4f734)
  • FlowRow 和 FlowColumn 已弃用,请改用自定义布局。(I09027)
  • 弃用了 Modifier.focus() 和 Modifier.focusRequester(),改为使用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48b/175160751b/175160532b/175077829
  • 引入了 SelectionRegistrar.notifySelectableChange,用于向 SelectionManager 通知 Selectable 更新。(I6ff30b/173215242
  • fun Dp.isFinite() 已改为 val Dp.isFinite (I50e00)
  • Constraints#satisfiedBy 已重命名为 isSatisfiedBy。(I9cf5c)
  • 针对具有未指定的常量的内联类添加了 isSpecified、isUnspecified 和 useOrElse。(I93f7bb/174310811

问题修复

  • 新增了基于协程的 API Animatable,用于确保其动画间的互斥性。新增了 DecayAnimationSpec,用于支持多维衰减动画(I820f2b/168014930
  • 添加了对已停用和只读文本字段的支持(I35279b/171040474b/166478534
  • animate() 现已替换为 animateAsState(),后者会返回 State<T> 而不是 T。这样可以提高性能,因为失效范围可缩小到读取 State 值的位置。(Ib179e)
  • 添加了语义角色 API 并将 Role 作为参数添加到可点击、可选择和可切换的 SemanticsModifier。更改了 Modifier.progressSemantics,使其也可供 Slider 使用。(I216cd)
  • 现在可通过 keyEvent.nativeKeyEvent 访问原生 keyEvent(I87c57b/173086397

版本 1.0.0-alpha09

2020 年 12 月 16 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha09androidx.compose.foundation:foundation-layout:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

API 变更

  • 添加了 Scrollable 接口

    如此一来,就可以将 ScrollState 和 LazyListState 视为通用类型,从而跨这两种类型实现自定义滚动。

    此变更还将 smoothScrollBy 移至 Scrollable 上的扩展函数,充分利用了此功能。(I2153b)

  • 添加了 LazyVerticalGrid。(I17267b/162213211

  • 弃用了 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed,改为使用 LazyColumn 和 LazyRow (I5b48c)

  • 针对挂起指针输入 API,已将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。(Idf0a1b/175142755

  • 添加了 LazyListState.layoutInfo,用于提供当前可见项目的尺寸和偏移量列表(If8678b/170472532

  • 移除了 ExperimentalPointerInput 注解 (Ia7a24)

  • 添加了对 TextField 的 InteractionState 支持。(I61d91)

  • 为 LazyColumn/Row 添加了 reverseLayout 参数,适用于 true 项目要从底部向顶部组成并且 LazyListState.firstVisibleItemIndex == 0 表示第一个项目位于底部的情况。(I552aeb/166589935

  • 为 LazyColumn 添加了 verticalArrangement 参数。为 LaazyRow 添加了 horizontalArrangement 参数。我们可以使用 Arrangement 在项目之间添加间距,并在没有足够项目来填满最小尺寸时指定项目的排列方式。(Icf79ab/170394300

  • detectMultitouchGestures 现在只使用一个回调,其中包含合并的形心、平移、缩放和旋转参数。(Ie6e1c)

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

问题修复

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

  • 弃用了 Modifier.focusObserver,改为使用 Modifier.onFocusChanged 或 Modifier.onFocusEvent(I30f17b/168511863b/168511484

  • 现在,自动填充 API 为实验性 API,需要选择启用 (I0a1ec)

  • 添加了解构声明,用于创建 FocusRequester 实例(I35d84b/174817008

  • 已将 accessibilityLabel 重命名为 contentDescription。将 accessibilityValue 重命名为 stateDescription。(I250f2)

  • 在 SelectionRegistrar 中引入了多个新函数,并且已将 onPositionChange 重命名为 notifyPositionChange。(Ifbaf7)

  • 将 AndroidOwner 变为内部函数(Ibcad0b/170296980

  • 新增了用于创建 InfiniteRepeatableSpec 的 infiniteRepeatable 函数 (I668e5)

  • 更改了 Applier 接口,简化了将树的构建方式从自上而下改为自下而上的过程。

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

    添加了新方法 insertBottomUp()

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

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

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

  • 添加了 buildAnnotatedString 工厂函数,以便构建 AnnotatedString。弃用了 annotatedString 构建器函数。(Idfe0b)

版本 1.0.0-alpha08

2020 年 12 月 2 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha08androidx.compose.foundation:foundation-layout:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

API 变更

  • CoreTextField 中移除了 maxLines 参数。如果您要按行数限制文本字段的高度,请改用 BasicTextField。(Iec002)
  • await*TouchSlop() 方法改为不检测指针按下状态,并将其重命名为 *OrCancellation。此外,不再需要 orientationLock 参数。(Ie96e1)
  • 增加了针对可组合 lambda 参数命名和位置的 lint 检查,旨在检查其命名和位置是否符合 Compose 准则。此外,根据 lint 检查结果和指南,还将一些尾随 lambda 名为 children 的 API 迁移到了 content。(Iec48e)
  • foundation:foundation-text API 已移至 foundation:foundation。软件包结构保持不变 (Id3eb2)
  • 新增多点触控手势检测器,包括用于检测旋转、缩放和平移的辅助程序。(Ic459d)
  • 新增拖动手势检测器挂起指针输入 API,包括屏幕方向锁定。(Icef25)
  • 已将 VectorAsset 重命名为 ImageVector。根据 API 委员会准则将 VectorAsset 移到了 Builder 并进行了重命名,使其成为 ImageVector 的内部类。添加了类型别名 VectorAssetBuilder,以关联到 ImageVector.Builder 来确保兼容性。(Icfdc8)
  • 已将 ImageAsset 及相关方法重命名为 ImageBitmap。(Ia2d99)
  • 将 foundation 语义属性移到了 ui (I6f05c)
  • 添加了基于协程的滚动 API:

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

  • 已将 singeLine 参数添加到 BasicTextField、TextField 和 OutlinedTextField 中。将此参数设为 true 会使文本字段成为可水平滚动的单行。(I57004b/168187755

  • 使用新的挂起指针输入添加了针对点按、点按两次、长按和按下指示信号的手势检测器。此外,还添加了几个实用程序,让开发者可以更轻松地编写自己的手势检测器。(I00807)

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

  • 移除了之前弃用的 API:移除了 Border,改为使用 BorderStroke。移除了 Modifier.drawBorder,改为使用 Modifier.border。移除了 Modifier.gravity,改为使用 Modifier.align。移除了 Stack,改为使用 Box(I32c2bb/172470874

  • AbsoluteArrangement 已重命名为 Arrangement.Absolute。(If26f2)

问题修复

  • 将 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
  • 从 SubcomposeLayout 声明中移除了 <T>。现在,您无需指定类型即可使用它。(Ib60c8)
  • 将 PointerInputData 的 uptime 字段和 position 字段设为了不可为 null。(Id468a)
  • 现在,MaterialTheme 可为选择句柄和选择背景设置正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColor 自定义对所选文字使用的颜色。(I1e6f4b/139320372b/139320907
  • 已将 Box 的 alignment 参数重命名为 contentAlignment。(I2c957)
  • 已将 offsetPx 修饰符重命名为 offset。现在,它们采用 lambda 参数(而非 State)。(Ic3021b/173594846
  • 添加了用于检查托管窗口是否已获得焦点的 WindowManager.isWindowFocused,并且添加了提供 onWindowFocusChanged 回调的 WindowFocusObserver。(I53b2ab/170932874
  • 向 TextInputService#onStateUpdated 添加了 resetInput 参数(I3e8f5b/172239032b/171860947
  • 更新了 TextFieldValue API
    • 将 TextFieldValue.composition 变为了只读
    • 消除了因选择范围无效而抛出的异常(I4a675b/172239032
  • 弃用了名称后缀为 Ambient 的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 Compose API 准则)。(I33440)
  • 添加了 Android Typeface 封装容器。您可以通过 typeface 函数(即 typeface(Typeface.DEFAULT))加载 Android Typeface。并且,typefaceFromFontFamily() 已重命名为 typeface() (I52ab7)
  • 添加了 lint 检查,用于检查 Modifier 工厂函数是否在其内使用 androidx.compose.ui.composed {},而不是标记为 @Composable。(I3c4bc)
  • 添加了 lint 检查,用于检查 Modifier 工厂函数是否已定义为针对 Modifier 的扩展,以便其能够顺利地链接到一起。(I07981)
  • 已将语义参数 mergeAllDescendants 重命名为 mergeDescendants。(Ib6250)
  • 现在,测试中的时间控件(TestAnimationClock 及其用例)处于实验阶段(I6ef86b/171378521
  • 移除了旧的 ui-test 模块及其桩 (I3a7cb)
  • TextUnit.Inherit 已重命名为 TextUnit.Unspecified,以与其他单位保持一致。(Ifce19)
  • Alignment 接口经过了更新,可正常工作。(I46a07b/172311734
  • foundation:foundation-text 模块已合并到 foundation:foundation 中 (Idac0f)
  • 弃用了 place(Offset) 和 placeRelative(Offset),改为使用具有 int 偏移的重载 (I4c5e7)
  • 已针对 LayoutIdParentDataid 重命名为 layoutId。已将 Measurable.id 重命名为 Measurable.layoutId。(Iadbcbb/172449643

版本 1.0.0-alpha07

2020 年 11 月 11 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha07androidx.compose.foundation:foundation-layout:1.0.0-alpha07androidx.compose.foundation:foundation-text:1.0.0-alpha07版本 1.0.0-alpha07 中包含这些提交内容

API 变更

  • 与对 Modifier.fillMaxSize[Width|Height] 的处理方式类似,我们现在支持在 LazyColumn/Row 的作用域内的 Modifier.fillParentMaxSize[Width|Height] 中使用分数(I797e2b/166586426
  • 从公共 API 中移除了 KeyboardOptions.toImeOptions。(Ic2e45)
  • 弃用了 Foundation AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor,请改为使用 Material 库中提供的新版本。对于非 Material 应用,您应改为创建自己的设计系统专属主题上下文环境,以便在您自己的组件中使用。(I74accb/172067770
  • 弃用了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
  • 向 TextField 添加了 maxLines (Ib2a5b)
  • TextField 已更新为接受 KeyboardOptions (Ida7f3)
  • 添加了可在 TextField 中使用的 KeyboardOptions (I9ca32)
  • 添加了 BasicText,并将其作为在设计上不预设立场的文本 API,可与 BasicTextField 并行运行。(I28268)
  • 移除了 ExperimentalLazyDsl 注解。现在,无需添加 @OptIn 即可使用 LazyColumn/LazyRow(Idab7ab/166584730
  • 弃用了 BaseTextField,请改用 BasicTextField。(I896eb)
  • 添加了 BasicTextField,用于替代 CoreTextField 和 BaseTextField (Id4cea)
  • 移除了已弃用的 LazyColumnItems/LazyRowItems (I1d8a8)
  • 移除了已弃用的用于将尺寸调整到固有测量值的可组合项。(I18537b/171811496
  • relativePaddingFrom 已重命名为 paddingFrom。为方便指定从布局边界到文本基线的距离,添加了 paddingFromBaseline 修饰符。(I0440ab/170633813
  • 向 aspectRatio 修饰符添加了 matchHeightConstraintsFirst 参数,可用于将修饰符指定为根据高度限制调整尺寸,然后再试着调整相应宽度。(Ie7c43b/155290593
  • 移除了弃用的 DpConstraints。(I87884b/171702471

问题修复

  • 引入了 ScaleFactor 内联类来表示彼此独立的水平轴缩放比例和垂直轴缩放比例,以便支持非统一缩放用例。
    • 向 ContentScale 添加了 computeScaleFactor 方法
    • 添加了 ContentScale.FillBounds,用于执行非统一缩放,以便拉伸源边界来占满目标布局。
    • 添加了使用 Size 参数计算 ScaleFactor 参数的运算符方法。
    • Ic96a6b/172291582
  • captureToBitmap 已移至 captureToImage。(I86385)
  • 已将 CoreText 标记为 @InternalTextApi。请改用 BasicText。(I6aaeb)
  • 已将 KeyboardOptions 重命名为 ImeOptions (I82f36)
  • KeyboardType 和 ImeAction 已移至 KeyboardOptions (I910ce)
  • 已将 CoreTextField 标记为 @InternalTextApi,请改用 BasicTextField (Ie2469)
  • 移除了 ExperimentalSubcomposeLayoutApi 注解。现在,无需添加 @OptIn 即可使用 SubcomposeLayout (I708ad)
  • 引入了 ui-test-junit4 模块 (Ib91f8)
  • 更新了 Icon API,以采用 Color.Unspecified 作为可能的着色颜色,从而在没有 ColorFilter 的情况下绘制提供的资源或 Painter。之前,如果系统尝试使用 Color.Unspecified 忽略着色,则会使用透明颜色进行着色,最终不会渲染到任何内容。(I049e2b/171624632
  • 已将 MeasureResult 从 MeasureScope 中移出。(Ibf96db/171184002
  • 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98b/170475424
  • androidx.ui.test 已移至 androidx.compose.ui.test (I9ffdb)
  • FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 软件包 (Ied2e7)
  • 添加了不含回调的 SelectionContainer (Ibfadb)
  • 在 SelectionContainer 中添加了对 SelectionHandle 的位置的测试。(Ie93db)
  • 添加了键盘自动更正 IME 选项 (I57b8d)

版本 1.0.0-alpha06

2020 年 10 月 28 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha06androidx.compose.foundation:foundation-layout:1.0.0-alpha06androidx.compose.foundation:foundation-text:1.0.0-alpha06版本 1.0.0-alpha06 中包含这些提交内容

API 变更

  • 已将 androidx.compose.foundation.Icon 移至 androidx.compose.material.Icon。如果您不想使用 Material 库,还可以将 Image 组件/Modifier.paint() 与 Painter 搭配使用。(I9f622)
  • 向 Modifier.scrollable、ScrollableColumn 和 LazyColumnFor 添加了 interactionState(I81566b/169509805
  • 已将 alignByBaseline 添加至 RowScope,且已将 alignWithSiblings 重命名为 alignBy(I06503b/170628732
  • Box 已成为内联函数。(Ibce0cb/155056091
  • 向 CoreTextField 添加了 maxLines(Ibee58b/143687793
  • 向 CoreTextField 添加了 softwrap。(I21a4b)

问题修复

  • 弃用了 VectorPainter,转为使用 rememberVectorPainter,现在更明确地表明可组合项 API 可在内部利用“remember”跨组合保留数据。(Ifda43)
  • 在 ComposeTestRule 中启用了过渡;从 ComposeTestRule 中移除了用于启用闪烁光标的选项。(If0de3)
  • 向 CoreTextField 添加了单行键盘选项 (I72e6d)
  • Radius API 已重命名为 CornerRadius,更清楚地表明它在整个 Compose 中的使用方式。更新了文档,指出负的圆角半径值被限制为零。(I130c7b/168762961
  • 添加了在组合修饰符中指定检查器信息的功能(Idee08b/163494569
  • 添加了 KeyboardCapitalization IME 选项 (I8ac38)
  • 修复了 Rtl 布局中的句柄位置。(I6e1e0)
  • 重大变更:考虑到指针事件中能够更改的值只能是使用情况数据,我们移除了来自 PointerInputFilter.onPointerEvent(...) 的返回值。现在,您只需改变传入的 PointerEvents 的使用情况数据即可,无需从 PointerInputFilter.onPointerEvent(...) 返回数据。(I6acd0)
  • 在选项菜单中添加了 SelectAll 选项 (Ief02b)

版本 1.0.0-alpha05

2020 年 10 月 14 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha05androidx.compose.foundation:foundation-layout:1.0.0-alpha05androidx.compose.foundation:foundation-text:1.0.0-alpha05版本 1.0.0-alpha05 中包含这些提交内容。

API 变更

  • CoreTextField 现在支持光标功能 (Id23aa)
  • 弃用了 contentColor() 和 currentTextStyle() API,并分别用 AmbientContentColor 和 AmbientTextStyle Ambient 替换。与其他任何 Ambient 一样,您可以通过在 Ambient 属性中使用 .current 来访问当前值。进行此项变更是为了确保一致性,并避免可以通过多种方式来实现同一目的。此外,还重命名了一些 Ambient 属性,以更准确地描述它们的用途,如下所示:

    • ContentColorAmbient -> AmbientContentColor
    • TextStyleAmbient -> AmbientTextStyle
    • IndicationAmbient -> AmbientIndication
    • EmphasisAmbient -> AmbientEmphasisLevels
    • RippleThemeAmbient -> AmbientRippleTheme (I37b6d)

问题修复

  • 在对内联类的标记值进行标准化的过程中,将 Color.Unset 重命名为 Color.Unspecified,以与其他内联类保持一致(I97611b/169797763
  • 添加了复制/粘贴/剪切无障碍操作 (I6db4f)
  • 引入了 TextOverflow.None。当溢出为 None 时,Text 将不再处理溢出,而是向 LayoutNode 报告其实际大小。(I175c9b/158830170
  • 将 Size.Unspecified 的参数从 Float.POSITIVE_INFINITY 更新为 Float.NaN。更新了 Painter 实现,以针对 Size.Unspecified 以及是非有限大小进行检查。(I95a7e)
  • 添加了 Paging Compose 模块和分页集成 (Ib85da)
  • 将 LazyListScope 修改为接收可为 null 的值 (I1765b)
  • 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8b/169083903
  • 添加了 LazyColumn/Row 的示例 (Idc16d)
  • 修复了 items 和 itemsIndexed 方法,以允许 emptyList (I06647)
  • 添加了一个用于指定检查器信息的 DSL (Ic9a22)
  • 将 LongPress 移至 Text。(Iff2bc)
  • 在 Text 和一个 Demo 中停用了 Selection。(Ie7e97)
  • 支持将 AnnotatedString 转换为SpannableString,以确保可访问性。(Ief907)
  • 移除了 PointerInputFilter.onPointerInput(...)。应改为使用 PointerInputFilter.onPointerEvent(...)。(I6f04a)

版本 1.0.0-alpha04

2020 年 10 月 1 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha04androidx.compose.foundation:foundation-layout:1.0.0-alpha04androidx.compose.foundation:foundation-text:1.0.0-alpha04版本 1.0.0-alpha04 中包含这些提交内容

API 变更

  • Stack 已重命名为 Box。将弃用之前存在的 foundation.Box,改为使用 compose.foundation.layout 中的新 Box。新的 Box 会在存在多个子元素时,在堆栈中将一个子元素放在另一个子元素之上,其行为不同于旧版 Box,后者的行为类似于 Column。(I94893b/167680279
  • 弃用了 Box 装饰参数。如果您想对框进行装饰/填充,请改为使用 Modifier(Modifier.background、Modifier.border、Modifier.padding)(Ibae92b/167680279
  • 添加了新的 LazyListState 类。 该类可用于观察和控制 LazyRow 和 LazyColumn 组件的滚动位置。您可以使用 rememberLazyListState() 创建实例,然后将其传递给组件的 state 参数。目前,可在该初始版本中观察第一个可见项和偏移量。(Ic7cb7b/159307669
  • 现在会在重新创建 Activity 的过程中保存并恢复延迟列表位置和滚动偏移量(Ie045fb/166589058
  • 添加了长按语义操作(I6281bb/156468846
  • 添加了 MutatorMutex 实用程序,用于在一段时间内保持单个更改器的共享状态,以及按优先级取消存在冲突的更改器 (I3f975)
  • 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行了注解,使这些 API 变为内部 API 并隐藏其 KDoc(I554ebb/168308412
  • 从含有 String 输入的 Text 中移除了 inlineContent 参数。该参数用不到,因为 inlineContent 必须与 AnnotatedString 配合使用。(Ief403)
  • 移除了已弃用的自定义 Arrangement API。(Ic576db/168297922b/168297923
  • 在 wrapContentSize 修饰符中添加了 unbounded 参数,该参数支持测量最大约束为无穷大的布局元素。(I77951b/158559319
  • 我们已阻止静态导入布局作用域的内容(例如:RowScope 中的 alignWithSiblings),请改用显式作用域替代项:with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }。(I216beb/166760797

问题修复

  • 更新了多个图形 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
  • 优化了 LazyColumnFor/LazyRowFor 滚动的性能,所做调整为不会在每次滚动时进行不必要的重组(I64f65b/168293643b/167972292b/165028371
  • 修复了在滚动并更改项目后 LazyColumnFor/LazyRowFor 中出现崩溃的问题;并实现了在移除上一个可见项目后自动向上滚动的操作,这样就不会再在最后显示空白间隙(I220abb/161480164b/167855468
  • 不再允许在同一方向的容器(如 ScrollableContainer 和 LazyColumnFor)中嵌套可滚动容器。这种做法从未受到过支持,且破坏了快滑和以及构成 LazyColumnFor 项目的所有延迟 (I6e101)
  • 更新了多个图形 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
  • 向语义属性添加了 AccessibilityScrollState。(Ifeda9)
  • 将 TextRange 变为内联类,以避免创建对象。(Id034b)
  • 移除了 ParagraphConstraints。现在,Width 会直接传递给 Paragraph。(Ica712)

版本 1.0.0-alpha03

2020 年 9 月 16 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha03androidx.compose.foundation:foundation-layout:1.0.0-alpha03androidx.compose.foundation:foundation-text:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

API 变更

  • InnerPadding 已重命名为 PaddingValues。(I195f1b/167389171
  • gravity 在布局 API 中用到时被一致地重命名为 align 或 alignment。(I2421ab/164077038
  • 向 Stack 添加了一个 alignment 参数,该参数允许为所有 Stack 子级指定默认对齐方式。(Ie80cab/164085265

问题修复

  • 已弃用 DpConstraints 以及使用它的 API。(I90cdbb/167389835
  • widthInminWidthmaxWidth 参数已重命名为 minmax。对 preferredWidthInheightInpreferredHeightIn 也进行了类似的重命名。(I0e5e1b/167389544
  • 根据 ComposeTestRule 增加了 onNode 及其他全局方法,原因是当前的全局方法即将被弃用。(Ieae36)
  • 修复了 GestureScope 中大小和位置的计算问题,该问题会导致生成无效的滑动手势(Iaf358b/166589947
  • createAndroidComposeRuleAndroidInputDispatcherandroidx.ui.test.android 移动到了 androidx.ui.testIdef08b/164060572

版本 1.0.0-alpha02

2020 年 9 月 2 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha02androidx.compose.foundation:foundation-layout:1.0.0-alpha02androidx.compose.foundation:foundation-text:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

问题修复

  • TestUiDispatcher 已标记为实验性(Iae99db/161247083
  • 添加了 ManualFrameClock.hasAwaiters,用于检查是否有任何内容在等待来自相应时钟的帧;在运行需要 ManualFrameClock 的测试时,runWithManualClock 可用于替代 runBlockingTestUiDispatcher.Main 可让您轻松访问测试中的主界面调度程序。

    例如:

    @Test
    fun myTest() = runWithManualClock { clock ->
        // set some compose content
        withContext(TestUiDispatcher.Main) {
            clock.advanceClock(1000L)
        }
        if (clock.hasAwaiters) {
            println("The clock has awaiters")
        } else {
            println("The clock has no more awaiters")
        }
    }
    

    I0a85bb/161247083

版本 1.0.0-alpha01

2020 年 8 月 26 日

发布了 androidx.compose.foundation:foundation:1.0.0-alpha01androidx.compose.foundation:foundation-layout:1.0.0-alpha01androidx.compose.foundation:foundation-text:1.0.0-alpha01版本 1.0.0-alpha01 中包含这些提交内容

版本 0.1.0-dev

版本 0.1.0-dev17

2020 年 8 月 19 日

发布了 androidx.compose.foundation:foundation:0.1.0-dev17androidx.compose.foundation:foundation-layout:0.1.0-dev17androidx.compose.foundation:foundation-text:0.1.0-dev17版本 0.1.0-dev17 中包含这些提交内容

API 变更

  • 为行和列添加了 spacedBy Arrangement,以支持以固定间距排列布局子项。还添加了对齐 Arrangement,以支持根据 Arrangement 方法在 Row/Column 中连续对齐排列布局子项。以前的 Arrangement.Vertical#arrange 和 Arrangement.Horizontal#arrange 方法已弃用,且未来将不支持写入自定义 Arrangement。(I6733db/161985975
  • Offset 已成为内联类 (Iaec70)
  • 从 TextField 中移除了 onFocusChanged 回调,请改为使用 Modifier.focusObserver。(I51089b/161297615
  • 已弃用 Modifier.drawBorder,请改为使用 Modifier.border。Border 数据类已替换为 BorderStroke(I4257db/158160576
  • VerticalScroller 和 HorizontalScroller 已移除,请改为使用 ScrollableColumn/Row。Modifier.drawBackground 已移除,请使用 Modifier.background(I73b0db/163019183
  • 从 LazyItemScope 中移除了标记为已弃用的 fillMax* 修饰符,因为它们增加了为并非 LazyColumnFor 直接子项的项正确添加此类修饰符的难度 (Ifa78d)
  • 添加了 LazyColumn/LazyRow 实现作为 DSL (I93cc6)
  • Constraints 现已成为内联类 (I88736)
  • 添加了使用 fillMaxWidth、fillMaxHeight 和 fillMaxSize 修饰符调整布局尺寸以使其占满一小部分可用空间的功能。(I945bbb/161562591

问题修复

  • 向 SelectionContainer 添加了修饰符参数(I4aadab/161487952
  • 向 SemanticsPropertyKey 添加了 mergePolicy lambda。此 lambda 可用于为 mergeAllDescendants 语义合并定义自定义政策。默认政策为:如果已有父项值则使用父项值,否则使用子项值。(Iaf6c4b/161979921
  • PlacementScope.placeAbsolute() 已重命名为 PlacementScope.place(),以前的 PlacementScope.place() 已重命名为 PlacementScope.placeRelative()。因此,PlacementScope.place() 方法将不再自动在从右到左的上下文中镜像位置。如果需要执行此镜像,请改用 PlacementScope.placeRelative()。(I873acb/162916675
  • 移除了已弃用的 FilledTextField 组件。请改用 TextField 获取已填充文本字段的 Material Design 实现。(I5e889)
  • 为 LinearProgressIndicator 添加了 backgroundColor 参数,并从 CircularProgressIndicator 中移除了内部内边距。新增了 ProgressIndicatorConstants.DefaultProgressAnimationSpec,在值之间添加进度动画时,可将其用作默认的 AnimationSpec(If38b5b/161809914b/161804677
  • 为清楚起见,现在弃用了 state { ... } 可组合项,改为对 remember { mutableStateOf(...) } 的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的 by mutableStateOf() 模式相一致。(Ia5727)
  • 将 RRect 重命名为 RoundRect,以使其更适合 Compose 命名模式。创建了与 RRect 类似的函数构造函数,并弃用了 RRect 函数构造函数 (I5d325)
  • 移除了 onChildPositioned 和 OnChildPositionedModifier。开发者应改为在子布局上使用 onPositioned 和 OnPositionedModifier。(I4522eb/162109766
  • IntSize 现已成为内联类 (I2bf42)
  • 长按空白区域可进行编辑。(Ib1e5b)
  • 点按文本后将隐藏 FloatingToolbar。(If4525)
  • 更新所选内容时将隐藏 FloatingToolbar。(I8444c)
  • 进行模糊处理时取消选择。(I781a2)

版本 0.1.0-dev16

2020 年 8 月 5 日

发布了 androidx.compose.foundation:foundation:0.1.0-dev16androidx.compose.foundation:foundation-layout:0.1.0-dev16androidx.compose.foundation:foundation-text:0.1.0-dev16版本 0.1.0-dev16 中包含这些提交内容

API 变更

  • 为 Lazy 列表的 itemContent 参数添加了 LazyItemScope。它提供了用于填充父项最大尺寸的修饰符,解决了以下用例的问题:该项应该填充视口,但因为该项是使用无限约束测量的,致使常规的 Modifier.fillMaxSize() 不起作用。(Ibd3b2b/162248854
  • 将 Dialog 移至 UI (I47fa6)
  • 添加了 LazyColumnForIndexed/LazyRowForIndexed - LazyColumnFor/LazyRowFor 的版本,用于在 itemCallback 中同时提供索引和项。这在您除了当前项之外还需要了解当前索引时非常有用。(I65ff3)
  • Modifier.deternimateProgress 已重命名为 Modifier.progressSemantics (I9c0b4)
  • LazyColumnItems 已重命名为 LazyColumnFor。LazyRowItems 已重命名为 LazyRowFor (I84f84)
  • 为遵循最佳做法,添加了一些标记/注解。(I66b20)
  • foundation.shape.corner 软件包已扁平化为 foundation.share(I46491b/161887429
  • 为 LazyRowItems/LazyColumnItems 添加了 сrossaxis gravity 参数。LazyRowItems/LazyColumnItems 现在支持封装内容行为。(Ib39fc)
  • ZoomableState 已重命名为 ZoomableController。已为 smoothScale 添加自定义曲线支持。已添加 enabledonZoomStarted 功能 (If8b8f)
  • Material FilledTextField 已重命名为 TextField,且基础 TextField 已重命名为 BaseTextField,您可轻松寻找并使用所需的最简单的 API(Ia6242b/155482676
  • 移除了之前已弃用的 AdapterList,请改为使用 LazyColumnItems (I12b9b)
  • Modifier.drawBackground 已重命名为 Modifier.background (I13677)
  • 移除了旧的 ConstraintLayout DSL。ConstraintSet2 已重命名为 ConstraintSet。(If58d1b/162450908
  • 添加了 Modifier.absoluteOffset() 和 Modifier.absoluteOffsetPx()。与偏移修饰符不同,绝对偏移修饰符不会在从右到左的上下文中自动镜像。(I3aa21
  • RowColumn 现在属于内联函数,其使用开销将显著降低。(I75c10)

问题修复

  • 修复了大量 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,并移除了未使用的方法
  • 添加了 MonotonicFrameAnimationClock,您可将 MonotonicFrameClock 用作 AnimationClockObservable,以消除基于协程的新时钟与仍使用基于旧回调的时钟的 API 之间的差异。

    现在,ManualAnimationClock 的 MonotonicFrameClock 等效项是 ManualFrameClock。(I111c7b/161247083

  • 移除了 SemanticsNodeInteraction.performPartialGesture。请改用 SemanticsNodeInteraction.performGesture。(Id9b62)

  • SemanticsNodeInteraction.getBoundsInRoot() 已重命名为 SemanticsNodeInteraction.getUnclippedBoundsInRoot()Icafdfb/161336532

  • 更新了 API 对从右到左布局的支持。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)

  • 已弃用 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的 Modifier.padding().background() + anotherModifierIedd58b/161529964

  • 添加了 isFocused()isNotFocused() SemanticsMatcher。(I0b760)

  • 添加了 RemeasurementModifier。用户可以通过它同步重新测量布局。一般而言,您永远也不需要它,因为重新测量/重新布局会自动发生,但是在 LazyColumnItems 内,滚动期间需要使用它。(I5f331b/160791058

  • 按照最新准则,isSystemInDarkTheme 现在会始终考虑系统级深色主题设置,并会忽略 Android Q 之前版本中的省电状态。(I0c10c)

  • 已弃用 OnChildPositioned,改为在子布局上使用 OnPositioned。(I87f95b/162109766

  • AndroidComposeTestRule 已重命名为 createAndroidComposeRule。(I70aaf)

  • 添加了用于获取 TextLayoutResult 的无障碍操作(I9d6e6

版本 0.1.0-dev15

2020 年 7 月 22 日

发布了 androidx.compose.foundation:foundation:0.1.0-dev15androidx.compose.foundation:foundation-layout:0.1.0-dev15androidx.compose.foundation:foundation-text:0.1.0-dev15版本 0.1.0-dev15 中包含这些提交内容

如需使用 Compose 的 0.1.0-dev15 版本,您需要完成以下操作:

依赖项

  • 如需使用 Compose 的 0.1.0-dev15 版本,您需要根据上面的声明依赖项部分给出的新代码段来更新依赖项。

API 变更

  • 与 ScrollableColumn/ScrollableRow 中的新参数类似,LazyColumnItems/LazyRowItems 现在也添加了新的参数 contentPadding,用于为裁剪后的内容添加内边距,这项操作只通过修饰符参数是无法完成的。此外,该新参数还可以仅在第一项内容之前/最后一项内容之后添加空格。(Ibc24e)
  • 文本字段中的 onFocusChange 回调已重命名为 onFocusChanged (Ida4a1)
  • 已弃用 VerticalScroller 和 HoriziontalScroller。请使用 ScrollableColumn 和 ScrollableRow 实现内置的 Column/Row 行为和参数体验,或者对您自己的元素使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同样,ScrollerPosition 也已弃用,取而代之的是 ScrollState(I400ceb/157225838b/149460415b/154105299
  • 重新设计了 Modifier.draggable 和 Modifier.scrollable API。移除了 DragDirection,改为使用 Orientation。可滚动项必需的 State 已简化。ScrollableState 已重命名为 ScrollableController(Iab63cb/149460415
  • 单值语义属性现在使用调用样式。例如,“semantics { hidden = true }”现在写为:semantics { hidden() }。(Ic1afdb/145951226b/145955412
  • 现在,RoundedCornershape 和 CutCornerShape 使用的角尺寸可以大于 50%(Id2340b/160400213
  • 将 Image 可组合项的默认 ContentScale 参数从 Inside 改为了 Fit。这样做是为了在布局尺寸大于 Painter 的固有尺寸时让底层 Painter 随着行为放大,同时保持宽高比不变。如果只使用固有尺寸来计算可组合项的大小,那么此方法更符合在不影响默认行为的情况下为 Image 提供固定尺寸的预期。(I40ae3b/159838006
  • 在顶级 API 中使用 AnimationSpec 来阐明静态动画规范的概念而不使用 AnimationBuilder;- 改进了过渡 DSL:创建补间动画、弹性动画等 AnimationSpec 时无需再指定 lambda 要求,而是直接接受构造函数参数;- 提高了 AnimationSpec 的整体易用性:开放构造函数,而不是依赖于构建器;- 将关键帧和补间动画的时长和延迟时间改为了 Int 类型的值。这样就能消除不必要的类型转换和方法重载(同时支持 Long 和 Int 两种数据类型)。(Ica0b4)
  • 移除了 Clickable,改为使用 Modifier.clickable (I84bdf)
  • 添加了 LazyRowItems,即 LazyColumnItems 的水平滚动模拟 (Ibbcf7)
  • 引入了低级别无状态动画 API。这些 API (I63bf7)
  • 弃用了 androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue。还弃用了使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项。请改为使用 androidx.ui.input.TextFieldValue(I4066db/155211005
  • 将使用的 IntPx 替换为了 Int。将 IntPxPosition 替换为了 IntOffset。将 IntPxSize 替换为了 IntSize。(Ib7b44)
  • 移除了 androidx.ui.foundation.shape.RectangleShape;请改用 androidx.ui.graphics.RectangleShape(I94939b/154507984
  • 为了整合用于表示大小信息的类的数量,我们对 Size 类(而非 PxSize)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的宽度和高度。(Ic0191)
  • 为了整合用于表示位置信息的类的数量,我们对 Offset 类(而非 PxPosition)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的 x 轴和 y 轴偏移量。(I3ad98)
  • 添加了 Modifier.zoomable 以实现“双指张合即可缩放”功能 (Id5d63)
  • 已弃用 Toggleable 组件,现改用 Modifier.toggleable(I35220b/157642842
  • 已弃用 MutuallyExclusiveSetItem,请改为使用 Modifier.selectable。(I02b47b/157642842
  • TestTag 现已弃用,请改为使用 Modifier.testTag。(If5110b/157173105
  • 向 Text 添加了 fontWeight 参数,之前因意外未添加该参数 (I56937)
  • 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I19d02)
  • VerticalScroller 现在提供开箱即用型 Column。HorizontalScroller 现在提供开箱即用型 Row。(Ieca5db/157020670
  • 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Iede0b)
  • Modifier.indication 已添加到基础软件包中,可用于在自定义可交互元素上显示按压/拖动/其他指示元素(I8425fb/155287131
  • 如果在 ScrollerPosition 上设置了 isReversed,VerticalScroller 和 HorizontalScroller 现在支持反向滚动 (I953bd)
  • 支持向文本布局中添加可组合项。(I1373c)
  • 整合了 CanvasScope 实现,因此现在只有 DrawScope 和 ContentDrawScope。CanvasScope 已重命名为 DrawScope。更新了 DrawScope 以实现密度界面并提供 LayoutDirection。删除了 ContentDrawScope 中的 DrawScope 子类。Painter 和 PainterModifier 已更新,不再由自身保留 RTL 属性,因为 DrawScope 已提供此信息,无需手动提供 (I1798e)
  • 移除了已弃用的 DrawBackground API,改为在修饰符上使用 drawBackground 扩展 API。重构了颜色、笔刷和涂料 drawBackground 实现,以减少代码路径,并且不再要求在组合过程中创建修饰符。(I0343a)
  • 更新了公开画布的更高级别的 Compose API,改为公开 CanvasScope。这样一来,用户便无需再维护自己的渲染对象。对于仍需要访问画布的使用方,可以使用 drawCanvas 扩展程序方法,该方法提供回调以向底层画布发出绘制命令。(I80afd)
  • HorizontalScroller 和 VerticalScroller 现在使用保存的实例状态恢复其滚动位置。(Ia0faeb/155075048
  • 移除了 FocusManagerAmbient。请使用 FocusModifier.requestFocus 来获取焦点。(Ic4826)
  • 我们暂时移除了表格布局,之后将通过更新的 API 重新提供。(Id88a7)
  • 创建了 CanvasScope API,用于封装 Canvas 对象以公开无状态的声明性绘图 API Surface。转换包含在其自己的接收器范围内,大小信息也限定在相应的边衬区范围内。它不需要使用方维护自己的渲染状态对象来配置绘图操作。

    添加了 CanvasScopeSample 并更新了演示版应用,以包含声明性图形演示 (Ifd86d)

  • ColoredRect 已移除,改用 Box 与 drawBackground 修饰符(I983c7b/152753731

  • 将光标颜色自定义项添加到 TextField (I6e33f)

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

  • 按照以下方式使用时,与 TextField 配合使用的 TextFieldValue 现在可以在重新创建 Activity 后继续保留:var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }I5c3ceb/155075724

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

  • 已将 CoreTextField/TextField focusIdentifier 参数替换为 FocusNode,以便与聚焦子系统集成。(I7ea48)

  • TTextField 更新 - 在水平维度上,它会占用授予它的所有可用空间(Ib08dfb/154638552

  • 添加了 InteractionState 和 Interaction,可让您更轻松地构建能够响应界面状态变化的组件(例如,按压和拖动)(Icfe25b/152525426

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

  • 将 API 中使用的所有可为 null 的 Color 替换为非 null 值,并使用 Color.Unset 代替 null (Iabaa7)

  • TextField API 更新 - onFocus 和 onBlur 回调已合并到带参数的单个 onFocusChange(Boolean) 回调中 (I66cd3)

  • 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 相同的结果(I45f09b/152842521

  • 移除了 ProvideContentColor,改为直接将 ContentColorAmbient 与 Providers 一起使用 (Iee942)

  • 为文本添加了颜色参数,允许替换文本样式的颜色,而无需手动合并主题中提供的样式。(I41a66)

  • 改进了 DrawModifier API:

    • 确定了 draw() ContentDrawScope 的接收器范围
    • 移除了 draw() 上的所有参数
    • DrawScope 的接口与之前的 CanvasScope 接口相同
    • ContentDrawScope 具有 drawContent() 方法(Ibacedb/152919067
  • 已弃用 ColoredRect,现改用 Box(Modifier.preferredSize(width, height).drawBackground(color))。(I499fab/152753731

  • 形状主题背景系统根据 Material Design 规范进行了更新。现在,您可以提供大多数组件使用的小型、中型和大型形状 (Ifb4d1)

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

  • 将 Draggable 移到了修饰符(Id9b16b/151959544

  • Text 从 androidx.ui.core 移到了 androidx.ui.foundation 软件包。(I87ce5)

  • 为 Checkbox、Switch 和 Toggleable 添加了 enabled 参数 (I41c16)

  • Ripple 现在是修饰符。在 Clickable 还未转换时,建议使用 Clickable(onClick = { ... }, modifier = ripple())Ie5200b/151331852b/150060763

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

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

  • 创建了 Image 可组合项,除了在屏幕上绘制指定 ImageAsset 之外,还可用于处理尺寸调整/布局。这一可组合项还支持绘制采用固有尺寸的任何一种任意 Painter 实例,另外还支持指定的固定尺寸或最小尺寸 (Ibcc8f)

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

  • Image 已重命名为 ImageAsset,以更好地区分 Image 数据和即将推出、用于布置布局及绘制内容的 Image 可组合项。

    在 android.graphics.Bitmap、Bitmap.asImageAsset() 的基础上创建了扩展程序方法,该方法可用于创建 ImageAsset 实例,帮助将传统 Android 应用开发与 Compose 框架结合起来。(Id5bbd)

  • 移除了 DrawImage 可组合项。请使用 ImagePainter 在现有布局上绘制图像,或使用 SimpleImage 引入占用空间的 Image(I595e1b/149827027

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

  • 添加了 Icon、IconButton 和 IconToggleButton,移除了 AppBarIcon。 您可以直接使用 IconButton 替换目前使用的 AppBarIcon,它们现在将有正确的触摸目标。查看示例了解使用信息,并查看“图标”了解可直接与这些组件一起使用的所提供 Material 图标。(I96849)

  • 移除了 DrawShape 可组合项,请改为使用 DrawBackground 修饰符。(I7ceb2)

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

  • 已添加 Scrollable 组件,可用于创建自定义滚动条/列表 (I5fd37)

  • 已将 background 重命名为 DrawBackground 并设置为默认记住 (Ia0bd3)

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

  • 添加了 Canvas 组件。这一可组合项需占用一定大小(由用户提供),并且您可以使用 CanvasScope 对其进行绘制 (I0d622)

  • Border 修饰符重命名为 DrawBorder (I8ffcc)

  • 添加了用于组合布局和绘图常用功能的 Box 组件。(I6e2a7)

  • 滚动条现在展示原生 Android 滑动动作行为。(I922afb/147493715

  • 用边框修饰符取代了 DrawBorder (Id335a)

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

  • 创建 ConstraintLayout 准则时的 percent 参数已重命名为 fraction。(Ida2db)

  • 新增了对 ConstraintLayout 屏障外边距的支持。(I47ffe)

  • 修复了 ConstraintLayout 中的 RTL 支持。添加了 RTL 不感知 API。(I3b1c7)

  • 添加了针对 ConstraintLayout 的新 DSL。如需了解详情,请参阅相关示例。(Icaa9a)

  • 添加了 @ExperimentalLayout 注解。ConstraintLayout、FlowRow 和 FlowColumn 现在带有该标记,用于表明其 API 即将更改。(I412a8)

  • 添加了 Modifier.padding(InnerPadding)I94985b/157133803

  • 移除了行和列中已弃用的行对齐和列对齐。(If60d4b/155858731

  • 移除了已弃用的 LayoutTag(),请改用 Modifier.tag()。移除了已弃用的 Modifier.matchParent(),请改用 Modifier.matchParentSize()。(If8044)

  • 添加了 offsetPx 布局修饰符,可用于以像素为单位定义(动态)偏移。(I5af57)

  • 已弃用 LinementLineOffset 可组合项,请改用 relativePaddingFrom() 修饰符。移除了 CenterAlignmentLine 可组合项。(I60107)

  • 新增了 defaultMinSizeConstraints 布局修饰符,该修饰符仅在未指定传入的相应约束时才将尺寸约束设置为封装的布局(最小约束为 0,最大约束为无穷大)。(I311eab/150460257

  • 已移除 Container,现改用 Box(Ibbc2bb/151407926

  • 移除了已弃用的 LayoutWidth/Height/Size 修饰符。(Ib0bc1)

  • 新增了偏移修饰符的默认参数值。(I37f06)

  • 新增了对称内边距修饰符。(I39840)

  • 移除了已弃用的 LayoutAspectRatio 修饰符。(I65a74)

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

  • 修复了宽度和高度修饰符中导致封装布局在没有相反轴约束的情况下被测量的错误。(I210b8b/154797971

  • 分别向 Row 和 Column 添加了 verticalGravity 和 horizontalGravity 参数。(I7dc5a)

  • 更新了 wrapContentWidth 和 wrapContentHeight,预计会显示垂直或水平 Alignment,而不是任意 Alignment。Gravity 修饰符已更新为接受垂直或水平 Alignment。更新了 Row、Column 和 Stack,以支持自定义的连续 Alignment。(Ib0728)

  • 允许使用任意值实现对齐实例化。添加了 1D 对齐。(Ia0c05)

  • EdgeInsets 已重命名为 InnerPadding。Material 按钮的 innerPadding 参数已重命名为 paddding。(I66165)

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

  • 为固有测量添加了尺寸调整修饰符,并弃用了用于此用途的组件。(I8295d)

  • 添加了对自定义 ConstraintLayout 子项尺寸的支持 (Idb1a5)

  • 移除了已弃用的 Wrap 和 Center 可组合项。(I29e23)

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

  • 现在可以在 Row 和 Column 之外访问 RowScope 和 ColumnScope 成员。(I3a641)

  • 已弃用 Container,现改用 Box。(I675ceb/151407926

  • 添加了用于偏移布局位置的 LayoutOffset 修饰符 (I0b8a3)

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

  • 更新了 LayoutAlign,使其不再填充可用空间 (I2b14f)

  • 移除了 AspectRatio 可组合项,改为使用修饰符。删除了过时的 FlexColumn、FlexRow 可组合项和间距修饰符 (Iec8a7)

  • 移除了行和列的 LayoutInflexible 修饰符 (I0d820)

  • 实现了拖动选择手柄,用于更改 TextField 的选择。(I27032)

  • 为 TextField 选择实现了 LongPressAndDrag。(I17919)

问题修复

  • 弃用了 FocusModifier,改为使用 Modifier.focus、Modifier.focusRequester、Modifier.focusObserver。弃用了 FocusState 和 FocusDetailedState,改为使用 FocusState2(I46919b/160822875b/160922136
  • runOnIdleCompose 已重命名为 runOnIdle (I83607)
  • 多个测试 API 已重命名,变得更为直观。所有 findXYZ API 均已重命名为 onNodeXYZ。所有 doXYZ API 均已重命名为 performXYZ。(I7f164)
  • 移除了之前已弃用的 Modifier.ripple。现在,可点击项使用涟漪作为默认指示元素(如果您的应用中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用可点击项即可免费获取涟漪指示元素。如果您需要自定义涟漪的颜色/大小/边界参数,您可以手动创建一个 RippleIndication,并将其作为指示参数传递给可点击项。(I663b2b/155375067
  • 移除了过时的尺寸测试 API。(Iba0a0)
  • 将 LayoutNode 变成了实验性 API (I4f2e9)
  • 在整个 Compose 中实现了滚动方向锁定功能的版本 1。(I1ce7ab/150289741
  • 弹出式窗口、对话框和菜单现在继承了上下文 MaterialTheme(Ia3665b/156527485
  • 从 Layout() 函数的测量块中移除了布局方向参数。但是,可以通过测量范围对象在回调内提供布局方向 (Ic7d9d)
  • 添加了 AbsoluteArrangement - 支持在 Row 内排列子项,而无需在 RTL 中自动镜像 (I3a1df)
  • 已弃用 @Untracked 注解,替换为 @ComposableContract(tracked=false) (Id211e)
  • 在此变更之前,如果存在 @Composable 函数,Compose 编译器插件会以非常复杂的方式拦截对该函数内构造函数的调用(I5205ab/158123804
  • 添加了 viewModel() 可组合项,让您可以创建 ViewModel 或获取已创建的 ViewModel,具体与其在 Activity 或 Fragment 中的工作原理类似 (I5fdd1)
  • 已将 Radius 类重构为内联类。移除了伴生创建方法,代之以使用默认参数的函数构造函数,从而让沿 y 轴的半径与强制要求的 x 轴半径参数相匹配。

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

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

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

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

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

  • TextField 的光标具有闪烁的动画效果 (Id10a7)

  • 部分手势不再需要传递 GestureToken (Id7ae5)

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

  • Modifier.semantics 已取消弃用,以允许在高层级组件中使用。(I4cfdc)

  • 将 AnnotatedString.Builder.addAnnotationString 重命名为 addStringAnnotation。(I5059e)

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

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

  • 向 ImagePainter 引入额外的可选 Rect 参数,以支持绘制底层 ImageAsset 的子部分 (I0ea9e)

  • 修复了删除项目时 AdapterList 中出现崩溃的问题(Ic64b0b/153195921

  • 我们更改了测量您在 setContent { } 块内放置的第一个布局的方式。之前,该布局必须填满整个 Activity 屏幕,现在它的行为方式就像您将自己的布局放在堆栈中一样:它可以比屏幕小,并将放置在屏幕左侧顶部。如果您希望采用原来的行为方式,可以为您的布局应用 Modifier.fillMaxSize()。(Ie88a7b/153453714

  • ui-text-compose 模块已重命名为 ui-text。ui-text 现在包含 CoreText 和 CoreTextField 可组合项 (Ib7d47)

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

  • 将 ui-framework/CoreText、CoreTextField 可组合项移到了 ui-text-compose 下。您可能需要在项目中添加 ui-text-compose。(I32042)

  • runOnIdleComposerunOnUiThread 现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)

  • [Mutable]State 属性委托运算符移到了扩展程序,以支持 Kotlin 1.4 属性委托优化。调用方必须添加 import 才能继续使用 by state { ... }by mutableStateOf(...)。(I5312c)

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

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

  • 弃用了 Center 可组合项。应使用 LayoutSize.Fill + LayoutAlign.Center 修饰符或应用了适当修饰符的某个 Box 或 Stack 可组合项替换 (Idf5e0)

  • LayoutFlexible 已重命名为 LayoutWeight。“tight”参数已重命名为“fill”。(If4738)

  • 已将 DrawVector 从常规可组合函数更改成返回修饰符 drawVector(),该修饰符将绘制用作布局背景的矢量。(I7b8e0)

  • 将可组合函数 Clip 替换成了修饰符 drawClip()。当您仅需使用矩形裁剪层边界时,DrawClipToBounds 修饰符方便易用。(If28eb)

  • 将 DrawShadow 可组合函数替换成了 drawShadow() 修饰符。现在,阴影是作为 LayerModifier 的一部分绘制的。(I0317a)

  • androidx.compose.ViewComposer 移到了 androidx.ui.node.UiComposer。移除了 androidx.compose.Emittable,它与 ComponentNode 重复。移除了 androidx.compose.ViewAdapters,它们不再是受支持的用例。已弃用 Compose.composeInto,请改为使用 setContentsetViewContent。已弃用 Compose.disposeComposition,改用 setContent 返回的 Compositiondispose 方法。androidx.compose.Compose.subcomposeInto 已移到 androidx.ui.core.subcomposeInto。ComponentNode#emitInsertAt 已重命名为 ComponentNode#insertAt。ComponentNode#emitRemoveAt 已重命名为 ComponentNode#removeAt。ComponentNode#emitMode 已重命名为 ComponentNode#move (Idef00)

  • 弃用了 Wrap 可组合项。它可以替换为 LayoutAlign 修饰符或堆栈可组合项 (Ib237f)

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

  • Painter.toModifier 已重命名为 Painter.asModifier,因为新创建的修饰符会参考可在多个修饰符实例之间共享的原始 Painter (I7195b)

  • 已弃用:Draw 可组合项是出现错误的常见原因(I78392b/149827027

  • 支持 LayoutPadding 修饰符中从右向左的方向 (I9e8da)

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

  • 移除了 ValueHolder 类。重构了 AnimatedValue 和 AnimatedFloat 类,使动画值字段抽象化,以便子类可以发现值更新。

    • 为 AnimatedValue、AnimatedFloat 等添加了模型类。
    • 添加了一组新的轻量级 @Composable API,用于在值之间添加动画。
    • (I79530)
  • Ambient API 重大更改。如需了解详情,请参阅日志和 Ambient<T> 文档(I4c7eeb/143769776

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

  • 修复了在重新组合时导致崩溃的 ConstraintLayout 错误。(Ibee5ab/158164341

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

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

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

  • 弃用了 LayoutDirectionAmbient。如需读取由区域定义的布局方向,请使用 ConfigurationAmbient 上的 localeLayoutDirection (I851b1)

  • 为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。(Icacddb/152735784

  • 弃用了 ParentData 可组合项。如果您只需标记布局子项,以便在测量块内识别它们,那么您应该创建可实现 ParentDataModifier 接口的修饰符,或使用 LayoutTag 修饰符。(I51368b/150953183

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

  • 禁止在 LayoutPadding 中使用负内边距。对于反向位置偏移,应改用 LayoutOffset。(Ifb5b1)

  • WithConstraints 获取了 LayoutDirection 参数 (I6d6f7)

  • 已将 ComposeFlags.COMPOSER_PARAM 标记更新为 true,这将改变 Compose 插件的代码生成策略。大体而言,这会导致 @Composable 函数通过其他合成参数生成,该参数会传递到后续 @Composable 调用,以便运行时正确管理执行。这是一项重大的二进制文件更改,但应当在所有获得许可的 Compose 使用情况中保留源代码级别的兼容性。(I7971c)

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

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

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

  • 改进了 Constraints 的 API Surface (I0fd15)

  • 添加了 TextDirection.Content (I48f36)

  • 调整了工具栏菜单,以正确显示复制、剪切和粘贴选项。(Id3955)

  • 为 TextField 选择添加了 FloatingToolbar。(Ie8b07)

  • TextDirectionAlgorithm 已重命名为 TextDirection (I75ce8)

  • TextDirection 已重命名为 ResolvedTextDirection (I3ff38)

  • 为 TextField 选择添加了 HapticFeedback。(I58050)

  • 为 TextField 选择添加了 Copy、Cut 和 Paste 方法。(Idb70b)

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

  • 将 Locale 和 LocaleList 的软件包名称从 androidx.ui.text 更改为 androidx.ui.intl (I8132c)

  • API 更改:AnnotatedString(builder: Builder) 已重命名为 annotatedString(builder: Builder)。(Ia6377)

  • API 更改:AnnotatedString.Item 已重命名为 AnnotatedString.Range。(I2d44d)

  • 为文本相关操作添加了 Toolbar。(I49d53)

  • 新版 LifecycleOwnerAmbient 现已发布。现在,与 Compose UI 一起使用的 Activity 应该可以扩展 androidx.activity.ComponentActivity(或 AppCompatActivity)。android.app.Activity 上的 setContent 现已弃用(Idb25ab/153141084

  • ui-android-text 软件包名称 (androidx.text) 已替换为 androidx.ui.text.platform,以便与 androidx 政策相符。(I42711)