Compose Material
最近更新时间 | 当前稳定版 | 下一候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2021 年 4 月 7 日 | - | - | 1.0.0-beta04 | - |
结构
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.runtime | Compose 的编程模型和状态管理的基本构建块,以及 Compose 编译器插件针对的核心运行时。 |
compose.ui | 与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。 |
声明依赖项
如需添加 Compose 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
dependencies { implementation "androidx.compose.material:material:1.0.0-beta04" } android { buildFeatures { compose true } composeOptions { kotlinCompilerVersion "1.4.32" kotlinCompilerExtensionVersion "1.0.0-beta04" } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = "1.8" } }
如需详细了解依赖项,请参阅添加构建依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对库的改进有某些建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.0.0
版本 1.0.0-beta04
2021 年 4 月 7 日
发布了 androidx.compose.material:material-*:1.0.0-beta04
。版本 1.0.0-beta04 中包含这些提交内容。
API 变更
- API 变更:
DrawerState
状态将不再扩展实验性 SwipeableState。- API 变更:现已将
BottomDrawerState
标记为实验性,以便与之前已标记为实验性的 BottomDrawer 组件保持一致(I81114、b/181656094)
- API 变更:现已将
- 将
SoftwareKeyboardController
上的hideSoftwareKeyboard
和showSoftwareKeyboard
分别重命名为了hide()
和show()
。- 为 LocalSoftwareKeyboardController 提供完整的 CompositionLocal 接口,以便对其进行设置(在测试中尤其有用)(I579a6)
- 添加了 LiveRegion 无障碍 API。 如果节点被标记为动态区域,无障碍服务将自动通知用户相应变更(Idcf6f、b/172590946)
问题修复
- 向现有模块添加了 Compose Material 目录实现。目前缺少:组件图块图像、主题选择器(将在后续变更中添加)。(Ie7a94)
版本 1.0.0-beta03
2021 年 3 月 24 日
发布了 androidx.compose.material:material-*:1.0.0-beta03
。版本 1.0.0-beta03 中包含这些提交内容。
API 变更
- 弃用了
DefaultMonotonicFrameClock
。现在,如果在不提供MonotonicFrameClock
的情况下调用withFrameNanos
或Recomposer.runRecomposeAndApplyChanges
,将抛出IllegalStateException
。(I4eb0d) - 添加了新的 API
LeadingIconTab
来支持在标签页中显示图标和内嵌文本。(I23267)
外部贡献
- [贡献者:Josisi Wolf]
BottomDrawer
现在封装了抽屉式导航栏槽位的内容。当父级高度没有限制时,BottomDrawer
不会抛出IllegalStateException
。现在,当底部抽屉式导航栏小于父级的 50% 时,它会打开至展开状态。关于BottomDrawerState
和ModalBottomSheetLayoutState
的文档已更新。如果底部抽屉式导航栏处于打开或展开状态,BottomDrawerState#isOpen
会返回 true。(I87241)
版本 1.0.0-beta02
2021 年 3 月 10 日
发布了 androidx.compose.material:material-*:1.0.0-beta02
。版本 1.0.0-beta02 中包含这些提交内容。
API 变更
- 添加了新的
LocalSoftwareKeyboardController
CompositionLocal API,以取代 TextField 上的旧SoftwareKeyboardController
接口。(I5951e、b/168778053)
问题修复
- 对实验性 API 的公开使用施加限制(I6aa29、b/174531520)
- 已将 TopAppBar 和 BottomAppBar 的默认水平对齐更改为 Start,与行一致 (Ib2dc7)
- 为 Compose Material 目录添加了新的模块和占位符界面,它们目前被嵌套在现有集成测试演示中。(Idfcb3)
androidx.compose.ui:ui
不再依赖于 AppCompat 或 Fragment。如果您在应用中使用 ComposeView,并且使用 Fragment 和/或 AppCompat,请确保您使用的是 AppCompat 1.3+/Fragment 1.3+。必须使用这些版本才能正确设置 ComposeView 所需的生命周期和已保存状态所有者。(I1d6fa、b/161814404)
版本 1.0.0-beta01
2021 年 2 月 24 日
发布了 androidx.compose.material:material-*:1.0.0-beta01
。版本 1.0.0-beta01 中包含这些提交内容。
这是 Compose 1.0.0 Beta 版的第一个版本。
API 变更
- 对尺寸修饰符进行了重命名。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。(I5b414)
- imageResource 和 vectorResource 现在分别是 ImageBitmap 和 ImageVector 伴生函数的扩展函数。删除了 load{Image,Vector,Font}Resource 函数。(I89130)
- 用于调整为固有尺寸的修饰符不再处于实验阶段。(I15744)
- 移除了 dp 断言 (I798d2)
- 从所有文本字段中移除了 SoftwareKeyboardController 回调,很快将被新的 API 替代。(Iae869、b/168778053)
- Switch、Checkbox 和 RadioButton 操作 lambda 现在可以为 null。更新了 Checkbox-in-clickable-row 示例,以便使用此功能。(If601b、b/171819073)
InteractionState
已替换为[Mutable]InteractionSource
- 接口负责发出/收集 Interaction 事件。
- 应使用
interactionSource = remember { MutableInteractionSource() }
,而不是将interactionState = remember { InteractionState() }
传递给Button
和Modifier.clickable()
等组件。 - 应改用 InteractionSource 的扩展函数,比如 InteractionSource.collectIsPressedAsState(),而不是使用
Interaction.Pressed in interactionState
。 - 对于复杂用例,您可以使用 InteractionSource.interactions 来观察互动流。如需了解详细信息,请参阅 InteractionSource 文档和示例。
- (I85965、b/152525426、b/171913923、b/171710801、b/174852378)
- 在 CompositionLocals 中添加了 AccessibilityMananger 接口和 LocalAccessibilityMananger (I53520)
- 移除了已弃用的 LayoutCoordinates 方法,使用函数代替 positionInParent 和 boundsInParent 的属性(I580ed、b/169874631、b/175142755)
- Slider 现在支持启用/停用状态(I6d56b、b/179793072)
- 为低级别文本组件(例如 CoreTextField)的输入会话创建了新的 TextInputSession。(I8817f、b/177662148)
- 移除了 AnimationEndReason.Interrupted。如果动画中断,系统将抛出 CancellationException。(I2cbbc、b/179695417)
- 移除了
@ExperimentalRippleApi
,并将RippleAlpha
更改为包含具有属性(而不是接口)的类。(I6df7c) - 添加了 TextFieldColors 接口,以表示不同状态的 TextField 和 OutlinedTextField 中使用的不同颜色。如需了解默认实现,请参阅 TextFieldDefaults.textFieldColors 和 TextFieldDefaults.outlinedTextFieldColors。
- TextField 和 OutlinedTextField 中的 isErrorValue 参数已重命名为 isError。(I831f9、b/171305338、b/168004067)
- 添加了 selectionGroup 修饰符,以允许为提供无障碍功能而标记 Tab 或 RadioButton 的集合 (Ie5c29)
添加了 LazyListState.animateScrollToItem
此方法可顺畅地滚动到列表中的具体项。(I4bfd7)
ScrollableState.smoothScrollBy()
已重命名为animateScrollBy()
。LazyListState.snapToItemIndex()
已重命名为scrollToItem()
。ScrollState.smoothScrollTo()
已重命名为animateScrollTo()
(I35ded)使用
@ReadOnlyComposable
标记的所有可组合项现在都经过编译时验证,以确保它们仅调用其他@ReadOnlyComposables
(I58961)移除了 TargetAnimation API。(If47d1、b/177457083)
Modifier.verticalScroll()/horizontalScroll() 中的滚动位置现在通过 Int 表示 (I81298)
smoothScrollBy 和 scrollBy 方法的软件包已更改为
androidx.compose.foundation.gestures.*
(I3f7c1、b/175294473)FlingConfig 已重命名为 FlingBehavior,现在允许自定义挂起动画,而不是预定义 Decay。(I02b86、b/175294473)
对尺寸修饰符进行了重命名。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。(I5b414)
defaultMinSizeConstraints 已重命名为 defaultMinSize。(I4eaae)
Orientation 已移至 foundation 软件包。VelocirtTracker 已从 ui.gesture 移至 ui.input.pointer。(Iff4a8、b/175294473)
drawerState.open() 和 drawerState.close() 现在是挂起函数。使用 rememberCoroutineScope() 获取 composition 的作用域,从而进行调用(I16f60、b/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 的文件类语义,这会破坏二进制文件兼容性,但不会破坏源代码兼容性,因此对大多数用户来说这不会成为一个问题。
- (I99b7d、b/177245490)
重新设计了 Modifier.scrollable。现在它使用 Scrollable 接口,而不是 ScrollableController 类(I4f5a5、b/174485541、b/175294473)
Modifier.draggable 现在接受 DraggableState 而不是简单的 lambda。您可以通过
rememberDraggableState { delta -> }
创建状态,以获得与之前相同的行为(Ica70f、b/175294473)ZoomableController.smoothScaleBy 和 ZoomableController.stopAnimation 现在是挂起函数。(I7f970、b/177457083)
删除了一些先前已弃用的 API(Ice5da、b/178633932)
进行了以下 Material API 方面的更改:
- 向 Top/BottomAppBar 添加了 contentPadding 参数,以允许自定义默认内边距。
- 对 BackdropScaffold 中的参数进行了重新排序,以便遵循 API 指南中关于将必需参数排在可选参数前面的要求。
- 将 BottomNavigationItem 中的
icon
参数移到了selected
和onClick
后面。 - 将 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)
BasicTextField 现在接受 Brush 而不是 Color,以优化自定义功能 (I83a36)
imageResource 和 vectorResource 现在分别是 ImageBitmap 和 ImageVector 伴生函数的扩展函数。删除了 load{Image,Vector,Font}Resource 函数。(I89130)
已将 Indication#createIndication() 改为了 Indication#rememberUpdatedIndication(InteractionState),并从 IndicationInstance#drawIndication() 中移除了 InteractionState 参数。IndicationInstance 应仅负责绘制视觉效果,而不能启动动画/写入状态以响应 InteractionState 的变化。这些动画和状态写入操作应在
rememberUpdatedIndication()
中进行。还将Modifier.indication
中的indication
参数改为了必需参数。(Ic1764、b/152525426)
问题修复
- 添加了新的 LocalSoftwareKeyboardController 本地组合 API,以替换 TextField 上的旧 SoftwareKeyboardController 接口。(I658b6、b/168778053)
版本 1.0.0-alpha12
2021 年 2 月 10 日
发布了 androidx.compose.material:material-*:1.0.0-alpha12
。版本 1.0.0-alpha12 中包含这些提交内容。
API 变更
- Modifier.pointerInput 现在需要 remember 键来指示指针输入检测协程何时应重启以建立新的依赖项。(I849cd)
- 已将 BottomDrawerLayout 和 ListItem 标记为 @ExperimentalMaterialApi (Id766e)
- 添加了 PaddingValues.Absolute,该函数可在接受 PaddingValues 的 API 中使用。(Ia5f30)
- 已弃用 onImeActionPerformed,请改用 KeyboardActions(If0bbd、b/179071523)
- 为了更好地匹配 ImageBitmap 和 ImageVector 的命名惯例,ImagePainter 已重命名为 BitmapPainter,以并行使用 VectorPaperer。(Iba381、b/174565889)
- Animatable.snapTo 和 Animatable.stop 现在是挂起函数 (If4288)
- ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(Icf416)
- 解构声明和 copy() 方法在多个类中已很少用到,现已将其从这些类中移除。(I26702、b/178659281)
- 使 halfExpand() 和 expand() 位于 ModalBottomSheetState 内部 (Ic914e)
- 已将 Indication#createInstance 更改为 @Composable,并将 LocalIndication 更改为包含一个 Indication,而非 () -> Indication。(I5eeea、b/157150564)
- 移动了 AlertDialog 和 DropdownMenu,使其目前只适用于 Android。将 PopupProperties 参数添加到了 DropdownMenu,用于进一步配置底层 Popup。(I9c443)
- 已弃用 loadFontResource,请改用 fontResource。已弃用 imageResource、loadImageResource、vectorResource 和 loadVectorResource,请改用 painterResource。(I6b809)
- 从 DropdownMenu 中移除了
toggle
和toggleModifier
参数,并将dropdownModifier
、dropdownOffset
和dropdownContent
分别重命名为modifier
、offset
和content
。DropdownMenu 现在的行为方式与Popup
相同,其中父布局用于菜单的定位。在大多数情况下,您可以将toggle
移为DropdownMenu
的同级,并将二者都封装到Box
中。如需详细了解如何使用此 API,请参阅文档中更新后的示例。(I884fb) - toIntPx() 已重命名为 roundToPx()。(I9b7e4、b/173502290)
- IntBounds 已重命名为 IntRect,相应 API 也得以改进。(I1f6ff)
- 添加了展开和收起语义操作。在 ModalBottomSheetState 中添加了 expand 和 halfExpand (Ib5064)
- 已弃用 Modifier.dragGestureFilter,请改用
Modifier.pointerInput { detectDragGestures (...)}
。或者,针对单轴拖动使用 Modifier.draggable(I0ba93、b/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)) }
(Ib4c26、b/177338004) - 添加了 ProgressBarRangeInfo.Indeterminate,用于标记针对无障碍服务的不确定进度条 (I6fe05)
已弃用 @ComposableContract,改为使用三个更具体的注解。
@ComposableContract(restartable = false)
已变为@NonRestartableComposable
@ComposableContract(readonly = true)
已变为@ReadOnlyComposable
@ComposableContract(preventCapture = true)
已变为@DisallowComposableCalls
- 已移除
@ComposableContract(tracked = true)
。 - (I60a9d)
已弃用
emptyContent()
和(@Composable () -> Unit).orEmpty()
实用程序,因为它们对于性能不再具有任何正面的影响或价值 (I0484d)rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 软件包。(I1366e、b/177338004)
Saver、listSaver()、mapSaver()、autoSaver 已从 androidx.compose.runtime.savedinstancestate 移至 androidx.compose.runtime.saveable (I77fe6)
RounderCornerShape、CutCornerShape 和 CornerBasedShape 中的参数已从 left/right 重命名为 start/end,以支持 Shape 在 RTL 方向的自动镜像。对于不需要自动镜像的情况,引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape。(I61040、b/152756983)
已将 Tab 的
text
和icon
参数以及 BottomNavigationItem 的label
参数改为可为 null,以便在没有提供这些参数时更好地传达组件的行为,因为它会影响组件的尺寸和布局。如果您当前传递的是emptyContent()
(表示没有文本/图标/标签),就应改用null
。(I57ed4)已将 contentColorFor 颜色参数重命名为 backgroundColor (I5bb67)
弃用了 TabDefaults,并将其替换为 TabRowDefaults。(I0f189)
引入了 ColorMatrix API,用于修改源内容的 RGB 值。已将 ColorFilter API 重构为一个接口,并与 PathEffect 的实现匹配。(Ica1e8)
现已弃用 AnimatedValue/Float,请改用 Animatable。(I71345、b/177457083)
添加了 SemanticsProperties.PaneTitle API。(I20d5a)
向 Tab 和 BottomNavigationItem 添加了已启用的参数,以防止它们可点击。已将 BottomNavigationItem 改为 RowScope.BottomNavigationItem,以便更好地呈现其 API 中的布局要求。(Id683d)
已弃用 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicationGestureFilter。改为将 Modifier.clickable 或 Modifier.pointerInput 与 detectTapGestures 函数一起使用。(I6baf9、b/175294473)
已将 layoutDirection 参数添加到 Shape 的 createOutline 中。这样便可支持创建布局方向感知形状。(I57c20、b/152756983)
移除了
Recomposer.current()
。[Abstract]ComposeView 现在默认设置为延迟创建的、作用域为窗口的 Recomposer(由窗口的 ViewTreeLifecycleOwner 驱动)。在主机生命周期结束时,系统会暂停重组和基于 withFrameNanos 的动画 tick 操作。(I38e11)
问题修复
- 现在,图标将根据所应用的尺寸修饰符缩放到适合它的大小。例如,
Icon(.., modifier = Modifier.size(50.dp)
现在将在 50x50dp 的空间中绘制。(Ib2ba9、b/178796190)
版本 1.0.0-alpha11
2021 年 1 月 28 日
发布了 androidx.compose.material:material-*:1.0.0-alpha11
。版本 1.0.0-alpha11 中包含这些提交内容。
API 变更
- 升级了一些 Material API,使其不再属于
@Experimental
API (I5d20e) - 向 Image 和 Icon 添加了内容说明参数,用于提供说明,供无障碍服务使用 (I2ac4c)
- 更改了 Material 有状态参数接口,以使用返回
State<T>
的 @Composable 函数。添加了Animatable.asState()
,以便更轻松地将 Animatable 转换为 State。还更改了 animateElevation,使其成为 Animatable 上的挂起扩展函数。(If613c) - Snackbar、SnackbarHost、SnackbarHostState 不再是
@ExperimentalMaterialAPI
(Id1fb5) - 更改了 Typography、Shapes 和 TabPosition,它们现在不再是数据类。为 Typography 和 Shapes 添加了复制函数,用于替换生成的 Typography 和 Shapes。(I40037)
- 删除了一些先前已弃用的 Material API (Ifaa25)
问题修复
- onCommit、onDispose 和 onActive 已弃用,取而代之的是 SideEffect API 和 DisposableEffect API (If760e)
- 基于 TransitionDefinition 的 Transition 已弃用 (I0ac57)
- 现在支持 updateTransition 中的初始 State (Ifd51d)
- WithConstraints 已重新设计为 BoxWithConstraints,并已移至 foundation.layout。(I9420b、b/173387208)
弃用了非挂起函数 scrollBy,移除了非挂起函数 scrollTo
现在,我们建议使用挂起函数来控制滚动并等待滚动完成。在此过渡期间,我们将弃用和/或移除这些函数的非挂起版本。(Ie9ced)
弃用了非挂起函数 smoothScrollBy。现在,我们建议使用挂起函数来控制滚动并等待滚动完成。在此过渡期间,我们将弃用这些函数的非挂起版本。(I12880)
引入了
ComposeContentTestRule
,此接口扩展了ComposeTestRule
并定义了已从ComposeTestRule
中移除的setContent
。添加了工厂方法createEmptyComposeRule()
。该方法会返回ComposeTestRule
,且不会为您启动 Activity。如果您想在测试期间启动您的 Activity(例如使用ActivityScenario.launch
),请使用此方法(I9d782、b/174472899)现在不能再通过 AmbientIndication 提供新指示元素以自定义 Button 和 FloatingActionButton 中使用的涟漪效果。当然,这从来都不是自定义这些组件的预期方式,但此变更使得这些组件现在与其他 Material 组件保持一致。如需在整个应用中自定义涟漪效果,请参阅 RippleTheme。(I546c5)
animateAsState 现为 animateFooAsState,其中 Foo 是添加动画效果的变量的类型。例如 Float、Dp、Offset 等 (Ie7e25)
BasicTextField 收到了一个名为
decorationBox
的新参数。使用此参数,可以向文本字段添加图标、占位符、标签等装饰,并加大其触摸目标区域。(I16996)修复了导致无法将 Material 文本字段宽度设置为小于 280.dp 的错误 (I78373)
已从 Modifier.draggable 中移除 canDrag 参数(Ic4bec、b/175294473)
移除了 displaySize,以免使用。通常,最好使用 onRoot() 的大小,或者至少使用窗口大小。(I62db4)
Surface 现在可以有多个布局子项。(I66a92、b/144488459)
invalidate 和 compositionReference() 现已弃用,取而代之的分别是 currentRecomposeScope 和 rememberCompositionReference。(I583a8)
将 PopupPositionProvider 更改为使用窗口相对坐标,而不是全局坐标。将 parentGlobalBounds 重命名为 anchorBounds,并将 windowGlobalBounds 更改为
windowSize: IntSize
(I2994a)Duration 和 Uptime 将替换为 Long 毫秒值,此步骤移除了指针输入对这些类的依赖。(Ia33b2、b/175142755、b/177420019)
移除了接受 FlingConfig 的 AnimatedFloat.fling,请改用挂起函数 Animatable.animateDecay。(I4659b、b/177457083)
现在可以在组合之外创建可点击项、可切换项和可选择项(I0a130、b/172938345、b/175294473)
加/减速选项已更改为功能接口 (Ib14e5)
弃用了 ScrollableColumn/Row。当滚动内容较大时,使用 ScrollableColumn 的效率不如使用 LazyColumn 高,因为使用 LazyColumn 时,我们可以只组合/测量/绘制可见元素。为防止用户采用低效方式,我们决定弃用 ScrollableColumn 和 ScrollableRow,转而提倡使用 LazyColumn 和 LazyRow。用户仍可决定不需要 lazy 行为,而直接像这样使用修饰符:Column(Modifier.verticalScroll(rememberScrollState()))(Ib976b、b/170468083)
为 LazyColumn/LazyRow/LazyVerticalGrid 的作用域新增了
items(count: Int)
工厂方法。items(items: List)
和itemsIndexed(items: List)
现在是扩展函数,因此您必须在使用时将其手动导入。为 Array 新增了扩展函数重载:items(items: Array)
和itemsIndexed(Array)
(I803fc、b/175562574)移除了实验性 monotonicFrameAnimationClockOf 方法(Ib753f、b/170708374)
弃用了全局坐标方法,并新增了基于窗口的坐标方法。(Iee284)
添加了 Modifier.toolingGraphicsLayer,用于在开启检查时添加图形层修饰符。(I315df)
FocusRequester.createRefs 现在被标记为实验性,因为它可能会发生变化。(I2d898、b/177000821)
已将 SemanticsPropertyReceiver.hidden 重命名为 invisibleToUser 并标记为 @ExperimentalComposeUiApi。已将 AccessibilityRangeInfo 重命名为 ProgressBarRangeInfo。已将 stateDescriptionRange 重命名为 progressBarRangeInfo。已将 AccessibilityScrollState 重命名为 ScrollAxisRange。已将 horizontalAccessibilityScrollState 重命名为 horizontalScrollAxisRange。已将 verticalAccessibilityScrollState 重命名为 verticalScrollAxisRange。(Id3148)
在测试中使用 TestCoroutineDispatcher (I532b6)
更新了矢量图形 API,以支持对矢量图形的根所应用的色调调节的解析。(Id9d53、b/177210509)
版本 1.0.0-alpha10
2021 年 1 月 13 日
发布了 androidx.compose.material:material-*:1.0.0-alpha10
。版本 1.0.0-alpha10 中包含这些提交内容。
API 变更
- 修改了 Velocity,现在包含分量部分和数学运算。(Ib0447)
@ExperimentalTesting
已重命名为@ExperimentalTestApi
,以便与类似的实验性 API 注解保持一致(Ia4502、b/1714464963)- Position 已重命名为 DpOffset,并移除了 getDistance() (Ib2dfd)
- Color.useOrElse() 已重命名为 Color.takeOrElse() (Ifdcf5)
- 向 Foundation Strings.kt 添加了 Toggle(I4a5b7、b/172366489)
- FlowRow 和 FlowColumn 已弃用,请改用自定义布局。(I09027)
- 弃用了 Modifier.focus() 和 Modifier.focusRequester(),改为使用 Modifier.focusModifier() 和 Modifier.focusReference()。(I75a48、b/175160751、b/175160532、b/175077829)
- 将 nativeClass 移到了 ui 模块并将其变为内部 API。 更新了 nativeClass 在 equals 实现中的用法,以便改用“is MyClass”。(I4f734)
问题修复
- 添加了对已停用和只读文本字段的支持(I35279、b/171040474、b/166478534)
animate()
现已替换为animateAsState()
,后者会返回State<T>
而不是T
。这样可以提高性能,因为失效范围可缩小到读取 State 值的位置。(Ib179e)- 添加了语义角色 API 并将 Role 作为参数添加到可点击、可选择和可切换的 SemanticsModifier。更改了 Modifier.progressSemantics,使其也可供 Slider 使用。(I216cd)
版本 1.0.0-alpha09
2020 年 12 月 16 日
发布了 androidx.compose.material:material-*:1.0.0-alpha09
。版本 1.0.0-alpha09 中包含这些提交内容。
API 变更
- 在 Modifier.swipeable 中添加了用于手动触发安放动画并进行拖动操作的 API(Iaa17a、b/162408885)
- 已重命名 *Constants 对象,将其改为以 Defaults 结尾,例如 ButtonConstants 已重命为 ButtonDefaults。此外,还从这些新对象的属性中移除了不必要的
default
前缀。(Ibb915、b/159982740) Compose 支持可进行可组合调用的属性 getter。系统不会停止支持此类 getter,但将某个属性 getter 声明为 @Composable 的语法会不断变化。
要采用现已弃用的语法进行此声明,需对属性本身进行注解:
@Composable val someProperty: Int get() = ...
要采用目前正确的语法进行此声明,需对属性的 getter 进行注解:
val someProperty: Int @Composable get() = ...
在一段时间内,这两种语法都能使用,但前者(即现已弃用的语法)最终将导致编译错误。(Id9197)
添加了包含涟漪 API 的
androidx.compose.material:material-ripple
库,以允许构建互动式组件而无需使用 Material 库的其余部分。rememberRippleIndication 已弃用,取而代之的是 rememberRipple。(Ibdf11)
问题修复
- 现在,offset 修饰符中的 lambda 会返回 IntOffset(而非 Float)。(Ic9ee5、b/174137212、b/174146755)
重构了 ShaderBrush,以便在绘制环境的大小信息可用时延迟创建着色器实例。如需定义在组合时可占满可组合项的整个绘制边界的渐变,而无需实现自定义 DrawModifier 实现,这非常有用。
弃用了渐变函数构造函数 API,取而代之的是 Gradient 对象中的工厂方法。(I511fc、b/173066799)
弃用了 Modifier.focusObserver,改为使用 Modifier.onFocusChanged 或 Modifier.onFocusEvent(I30f17、b/1685111863、b/168511484)
弃用了 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed,改为使用 LazyColumn 和 LazyRow (I5b48c)
将 Dp.VectorConverter、Position.VectorConverter 等移到了 animation-core,并弃用了旧的 VectorConveter (If0c4b)
现在,自动填充 API 为实验性 API,需要选择启用 (I0a1ec)
添加了解构声明,用于创建 FocusRequester 实例(I35d84、b/174817008)
已将 accessibilityLabel 重命名为 contentDescription。将 accessibilityValue 重命名为 stateDescription。(I250f2)
新增了用于创建 InfiniteRepeatableSpec 的 infiniteRepeatable 函数 (I668e5)
依据 Material 规范,DropdownMenu 的定位行为略有变更。(I34c72、b/168594123)
添加了对 TextField 的 InteractionState 支持。(I61d91)
添加了 Modifier.clearAndSetSemantics,用于清除后代的语义以及设置新语义。(I277ca)
将 ContentDrawScope 移到了 ui-graphics 模块,以便与 DrawScope 位于同一模块内。(Iee043、b/173832789)
版本 1.0.0-alpha08
2020 年 12 月 2 日
发布了 androidx.compose.material:material:1.0.0-alpha08
、androidx.compose.material:material-icons-core:1.0.0-alpha08
和 androidx.compose.material:material-icons-extended:1.0.0-alpha08
。版本 1.0.0-alpha08 中包含这些提交内容。
API 变更
- 现在,MaterialTheme 可为选择句柄和选择背景设置正确的颜色。非 Material 应用可以手动使用 AmbientTextSelectionColor 自定义对所选文字使用的颜色。(I1e6f4、b/139320372、b/139320907)
- 增加了针对可组合 lambda 参数命名和位置的 lint 检查,旨在检查其命名和位置是否符合 Compose 准则。此外,根据 lint 检查结果和指南,还将一些尾随 lambda 名为
children
的 API 迁移到了content
。(Iec48e) - 已将 VectorAsset 重命名为 ImageVector。根据 API 委员会准则将 VectorAsset 移到了 Builder 并进行了重命名,使其成为 ImageVector 的内部类。添加了类型别名 VectorAssetBuilder,以关联到 ImageVector.Builder 来确保兼容性。(Icfdc8)
- 已将 ImageAsset 及相关方法重命名为 ImageBitmap。(Ia2d99)
- 将 foundation 语义属性移到了 ui (I6f05c)
- 为与其他 API 保持一致,弃用了
fun RippleIndication()
并以rememberRippleIndication()
取而代之。(Id8e2c) - 已将 singeLine 参数添加到 BasicTextField、TextField 和 OutlinedTextField 中。将此参数设为 true 会使文本字段成为可水平滚动的单行。(I57004、b/168187755)
问题修复
- 添加了语义操作 Dismiss (I2b706)
- 将 DrawModifier API 从 androidx.compose.ui 软件包移到了 androidx.compose.ui.draw 软件包。 创建了 DrawModifierDeprecated.kt 文件以包含 typealiases/helper 方法,用于协助从已弃用的 API 迁移到当前所用的 API。(Id6044、b/173834241)
- 已将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer。此外,还根据 API 反馈将相关类更新为了 GraphicsLayer。(I0bd29、b/173834241)
- 从 SubcomposeLayout 声明中移除了
<T>
。现在,您无需指定类型即可使用它。(Ib60c8) - 添加了 Modifier.scale/rotate API 作为 drawLayer 的便捷 API。
- 已将
Modifier.drawOpacity
重命名为Modifier.alpha
。 - 已将
Modifier.drawShadow
重命名为Modifier.shadow
(I264ca、b/173208140)
- 已将
- 已将 Box 的 alignment 参数重命名为 contentAlignment。(I2c957)
- 已将 offsetPx 修饰符重命名为 offset。现在,它们采用 lambda 参数(而非 State)。(Ic3021、b/173594846)
- 引入了 SweepGradientShader API 和 SweepGradientBrush API。(Ia22c1)
- 针对可组合函数中的 Modifier 参数添加了 Lint 检查。此 Lint 检查会检查参数的名称、返回值类型、默认值和顺序是否符合 Compose 准则。(If493b)
- 更新了 TextFieldValue API
- 将 TextFieldValue.composition 变为了只读
- 移除了因选择范围无效而抛出的异常(I4a675、b/17223932)
- 添加了新的
Modifier.drawLayer()
重载。您需要在新的 GraphicsLayerScope 上添加 lambda 块,并在其中定义图层参数,定义方式应允许在状态变化发生时跳过重组和重新布局。现在,DrawLayerModifier 为内部函数,我们准备将其逻辑迁移到 LayoutModifier 的placeable.placeWithLayer()
方法中(I15e9f、b/173030831) - 弃用了名称后缀为
Ambient
的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 Compose API 准则)。(I33440) - 添加了 lint 检查,用于检查 Modifier 工厂函数是否在其内使用
androidx.compose.ui.composed {}
,而不是标记为@Composable
。(I3c4bc) - 已将语义参数 mergeAllDescendants 重命名为 mergeDescendants。(Ib6250)
- 现在,测试中的时间控件(TestAnimationClock 及其用例)处于实验阶段(I6ef86、b/171378521)
- 移除了旧的 ui-test 模块及其桩 (I3a7cb)
- TextUnit.Inherit 已重命名为 TextUnit.Unspecified,以便其与其他单位保持一致。(Ifce19)
- Alignment 接口经过了更新,可正常工作。(I46a07、b/172311734)
- id 已重命名为 LayoutIdParentData 的 layoutId。Measurable.id 已重命名为 Measurable.layoutId。(Iadbcb、b/172449643)
版本 1.0.0-alpha07
2020 年 11 月 11 日
发布了 androidx.compose.material:material:1.0.0-alpha07
、androidx.compose.material:material-icons-core:1.0.0-alpha07
和 androidx.compose.material:material-icons-extended:1.0.0-alpha07
。版本 1.0.0-alpha07 中包含这些提交内容。
API 变更
- Emphasis 已弃用,取而代之的是 AmbientContentAlpha。AmbientContentAlpha 是一个更简单的抽象,表示部分层次结构的首选内容 Alpha 值,与 AmbientContentColor 表示首选内容颜色类似。现在,Text 和 Icon 在默认情况下会使用 AmbientContentAlpha 中的当前值。您也可以手动执行
color.copy(alpha = AmbientContentAlpha.current)
在您的组件中达到相同效果。您可以不使用 ProvideEmphasis,而是通过 AmbientContentAlpha 直接提供一个值,并使用 ContentAlpha 中的新默认级别取代原来的 EmphasisLevels。(Idf03e、b/159017896) - 添加了 androidx.compose.material.AmbientContentColor,用于取代 androidx.compose.foundation.AmbientContentColor(I84f7b、b/172067770)
- 添加了作为高级主题化文本组件的 androidx.compose.material.Text,用于取代 androidx.compose.foundation.Text。对于不使用主题中的颜色/文本样式的基本文本组件,请使用 BasicText。(Ie6ae0)
- 向 TextField 添加了 maxLines (Ib2a5b)
- TextField 已更新为接受 KeyboardOptions (Ida7f3)
- 在计算高度叠加层时,Surface 现在使用绝对(总)高度,因此嵌套在其他 Surface 中的 Surface 将使用合并高度绘制叠加层。(I7bd2b、b/171031040)
问题修复
captureToBitmap
已移至captureToImage
。(I86385)- 弃用了 Foundation AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor,请改为使用 Material 库中提供的新版本。对于非 Material 应用,您应改为创建自己的设计系统专属主题上下文环境,以便在您自己的组件中使用。(I74acc、b/172067770)
- 弃用了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
- 已将 KeyboardOptions 重命名为 ImeOptions (I82f36)
- KeyboardType 和 ImeAction 已移至 KeyboardOptions (I910ce)
- 弃用了 BaseTextField,请改用 BasicTextField。(I896eb)
- 移除了 ExperimentalSubcomposeLayoutApi 注解。现在,无需添加 @OptIn 即可使用 SubcomposeLayout (I708ad)
- FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 软件包 (Ied2e7)
- 更新了 Icon API,以采用 Color.Unspecified 作为可能的着色颜色,从而在没有 ColorFilter 的情况下绘制提供的资源或 Painter。之前,如果系统尝试使用 Color.Unspecified 忽略着色,则会使用透明颜色进行着色,最终不会渲染到任何内容。(I049e2、b/171624632)
- relativePaddingFrom 已重命名为 paddingFrom。为方便指定从布局边界到文本基线的距离,添加了 paddingFromBaseline 修饰符。(I0440a、b/170633813)
- LaunchedTask 已重命名为 LaunchedEffect,以与 SideEffect 和 DisposableEffect API 保持一致。为了鼓励采用最佳做法,不允许使用不含主题参数的 LaunchedEffect。(Ifd3d4)
- 已将 MeasureResult 从 MeasureScope 中移出。(Ibf96d、b/171184002)
- 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98、b/170475424)
版本 1.0.0-alpha06
2020 年 10 月 28 日
发布了 androidx.compose.material:material:1.0.0-alpha06
、androidx.compose.material:material-icons-core:1.0.0-alpha06
和 androidx.compose.material:material-icons-extended:1.0.0-alpha06
。版本 1.0.0-alpha06 中包含这些提交内容。
API 变更
- 已将 androidx.compose.foundation.Icon 移至 androidx.compose.material.Icon。如果您不想使用 Material 库,还可以将 Image 组件/Modifier.paint() 与 Painter 搭配使用。(I9f622)
- 添加 FloatingActionButtonElevation,用于表示 FAB 在不同状态下使用的高度。如需了解默认实现,请参阅 FloatingActionButtonConstants.defaultElevation() (I2d4f5)
- 添加了 SwitchColors 接口,用于表示开关在不同状态下使用的颜色。如需自定义这些颜色,请参阅 SwitchConstants.defaultColors。(I93805)
- 添加了 ButtonElevation 和 ButtonColors 接口,用于表示按钮在不同状态下使用的高度和颜色。如需自定义这些参数,请参阅 ButtonConstants 中的默认函数。(Ic5b7b)
- 添加了 RadioButtonColors 接口,用于表示单选按钮在不同状态下使用的颜色。如需自定义在不同状态下使用的颜色,请参阅 RadioButtonConstants.defaultColors()。(I74130)
- 添加了 CheckboxColors 接口,用于表示复选框在不同状态下使用的颜色。如需自定义在不同状态下使用的颜色,请参阅 CheckboxConstants.defaultColors()。(I7dbdb)
问题修复
- Material 组件不再将高度设为 zIndex。这意味着,在同一父项中,不会在阴影尺寸较小的子项之上自动绘制阴影尺寸较大的子项。如果您仍然需要此类行为,请根据需要手动设置 Modifier.zIndex()(I70417、b/170623932)
- 弃用了 VectorPainter,转为使用 rememberVectorPainter,现在更明确地表明可组合项 API 可在内部利用“remember”跨组合保留数据。(Ifda43)
- 在 ComposeTestRule 中启用了过渡;从 ComposeTestRule 中移除了用于启用闪烁光标的选项。(If0de3)
- 向 CoreTextField 添加了单行键盘选项 (I72e6d)
- Radius API 已重命名为 CornerRadius,更清楚地表明它在整个 Compose 中的使用方式。更新了文档,指出负的圆角半径值被限制为零。(I130c7、b/168762961)
- 已将 DrawScope 和 ContentDrawScope 重构为接口而非抽象类
- 创建了 DrawScope 的 CanvasDrawScope 实现
- 重构了 DrawScope 的实现,现改用 CanvasScope
- 创建了 DrawContext,用于封装 DrawScope 的依赖项
- 移除了 DrawScope 中已弃用的方法 (I56f5e)
- Box 已成为内联函数。(Ibce0c、b/155056091)
版本 1.0.0-alpha05
2020 年 10 月 14 日
发布了 androidx.compose.material:material:1.0.0-alpha05
、androidx.compose.material:material-icons-core:1.0.0-alpha05
和 androidx.compose.material:material-icons-extended:1.0.0-alpha05
。版本 1.0.0-alpha05 中包含这些提交内容。
API 变更
- 弹出式窗口和对话框现在从父窗口继承 FLAG_SECURE。还添加了用于明确配置此行为的选项(I64966、b/143778148、b/143778149)
- 默认情况下,Modifier.swipeable 现在以 56.dp 作为状态的阈值(Iab825、b/168610267)
- 所有 Scaffold 状态均标记为 @Stable。ScaffoldState 中的 drawerGesturesEnabled 已移到 Scaffold 本身中。(I36645、b/168297016)
- 从 Scaffold lambda 参数中移除了可为 null 类型,您可以使用 emptyContent() 表示给定参数无内容。(I2b318、b/157633857、b/158551084)
弃用了 contentColor() 和 currentTextStyle() API,并分别以 AmbientContentColor 和 AmbientTextStyle Ambient 取而代之。与其他任何 Ambient 一样,您可以通过在 Ambient 属性中使用
.current
来访问当前值。进行此项变更是为了确保一致性,并避免可以通过多种方式来实现同一目的。此外,还重命名了一些 Ambient 属性,以更准确地描述它们的用途,如下所示:- ContentColorAmbient -> AmbientContentColor
- TextStyleAmbient -> AmbientTextStyle
- IndicationAmbient -> AmbientIndication
- EmphasisAmbient -> AmbientEmphasisLevels
- RippleThemeAmbient -> AmbientRippleTheme (I37b6d)
添加了 AmbientElevationOverlay,用于在深色主题中自定义/停用应用于 Surface 的默认高度叠加层。(I5b74d)
问题修复
- 在对内联类的标记值进行标准化的过程中,将 Color.Unset 重命名为 Color.Unspecified,以与其他内联类保持一致(I97611、b/169797763)
- 引入了 TextOverflow.None。当溢出为 None 时,Text 将不再处理溢出,而是向 LayoutNode 报告其实际大小。(I175c9、b/158830170)
- 将 launchInComposition 重命名为 LaunchedTask,以符合 Compose API 准则 (I99a8e)
- 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8、b/169083903)
版本 1.0.0-alpha04
2020 年 10 月 1 日
发布了 androidx.compose.material:material:1.0.0-alpha04
、androidx.compose.material:material-icons-core:1.0.0-alpha04
和 androidx.compose.material:material-icons-extended:1.0.0-alpha04
。版本 1.0.0-alpha04 中包含这些提交内容。
API 变更
- 在有状态的 Material 组件中提供了 InteractionState 参数,以允许提升并读取/控制状态。(Iaca5f、b/168020711、b/167164434)
- 更改了 RadioButton 和 TriStateCheckbox 中的
*color
参数,以允许完全自定义每种状态中使用的颜色,以及根据需要更改在不同状态之间添加颜色动画效果的方式。如需了解详情,请参阅 CheckboxConstants 和 RadioButtonConstants 中的新 animateDefault* 颜色函数。(I1c532) - rememberBackdropState 已重命名为 rememberBackdropScafoldState,并为动画时钟新增了一个参数。BackdropScaffold 的参数 backdropScaffoldState 已重命名为 scaffoldState。BackdropConstants 已重命名为 BackdropScaffoldConstants。(Ib644d)
- 添加了实验性 BottomSheetScaffold 组件。(Ie02f0、b/148996320)
- 添加了实验性 ModalBottomSheetLayout 组件。(Ic209e、b/148996320)
- ButtonConstants/FloatingActionButtonConstants.defaultAnimatedElevation 已重命名为 defaultElevation,现在返回的是 Dp 值,而不是 AnimatedValue。(I5f3ed)
问题修复
- 更新了多个图形 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 扩展函数迁移为属性
- (I8f5c7、b/168762961)
- 弃用了 foundation.Box。请改用 foundation.layout.Box。(Ie5950、b/167680279)
- Stack 已重命名为 Box。将弃用之前存在的 Box,改为使用 compose.foundation.layout 中的新 Box。新的 Box 会在存在多个子元素时,在堆栈中将一个子元素放在另一个子元素之上,其行为不同于旧版 Box,后者的行为类似于 Column。(I94893、b/167680279)
- 弃用了 Box 装饰参数。如果您想对框进行装饰/填充,请改为使用 Modifier(Modifier.background、Modifier.border、Modifier.padding)(Ibae92、b/167680279)
- 更新了多个图形 API
- 更新了 DrawScope API,现在采用作用域转换方法,以指明仅在回调内应用转换,并调用回调后移除该转换
- 更新了 clipPath 文档,在文中用 Path 替换了圆角矩形
- 在文档中修复了 clipPath 中 right 参数的间距问题
- DrawScope.drawCanvas 已重命名为 drawIntoCanvas,并移除了 size 参数
- inset 方法中的 dx/dy 参数已重命名为 horizontal 和 vertical
- 添加了边衬区重载,用于为所有 4 个边界提供相同的边衬区值
- 在有关 inset 方法的文档中移除了指明边衬区值会应用于所有 4 个面说明
- 更新了 Rect 类的文档
- 更新了对 Rect 参数的注释,以与 KDoc 样式保持一致
- 移除了 Rect.join 和 Rect.expandToInclude
- 为 Rect.translate(offset) 创建了过载,并弃用了 Rect.shift
- (If086a、b/167737376)
- 我们已阻止静态导入布局作用域的内容(例如:RowScope 中的 alignWithSiblings),请改用显式作用域替代项:
with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }
。(I216be、b/166760797)
版本 1.0.0-alpha03
2020 年 9 月 16 日
发布了 androidx.compose.material:material:1.0.0-alpha03
、androidx.compose.material:material-icons-core:1.0.0-alpha03
和 androidx.compose.material:material-icons-extended:1.0.0-alpha03
。版本 1.0.0-alpha03 中包含这些提交内容。
API 变更
- 将
BottomNavigationItem
的onSelect
参数重命名为onClick
(I91925、b/161809324) - 向 BottomNavigationItem 和 Tab 添加了 InteractionState 参数,从而允许提升此状态并调整该组件在不同状态下的显示方式。(Ia3e9e、b/168025711)
- 从按钮中移除了
disabledBackgroundColor
和disabledContentColor
参数。您应改用 ButtonConstants 中的新默认颜色函数。如果您已明确设置 contentColor/backgroundColor,则应改用这些默认函数,并对部分/所有参数进行自定义,以免同时覆盖启用/停用状态下的颜色。(If9b52) - Textfield 的背景颜色不再隐式应用 Alpha 透明度值。而是直接应用通过 backgroundColor 参数提供的颜色。(Iecee9、b/167951441)
- InnerPadding 已重命名为 PaddingValues。(I195f1、b/167389171)
Modifier.swipeable
中的resistanceFactorAtMin
和resistanceFactorAtMax
这两个参数已被替换为 resistance 这一个参数。SwipeableConstants
中新增了一个defaultResistanceConfig
方法。(I54238)- 新增了对 Button 和 FloatingActionButton 以动画形式显示有状态高程的支持。现在以动画形式显示默认状态和按下状态之间的高程切换效果。如需对各个状态之间的高程进行自定义,请使用
ButtonConstants.defaultAnimatedElevation()
和FloatingActionButtonConstants.defaultAnimatedElevation()
,而非在所有情况下都设置一个平面 Dp 值。(I37925) - Label 变为 TextField 和 OutlinedTextField 中的可选参数(I267f6、b/162234081)
问题修复
- 全局测试函数(例如
onNode
或waitForIdle
)现已弃用,请改用根据 ComposeTestRule 定义的新函数 (I7f45a) - 已弃用 DpConstraints 以及使用它的 API。(I90cdb、b/167389835)
- widthIn 的 minWidth 和 maxWidth 参数已重命名为 min 和 max。对 preferredWidthIn、heightIn 和 preferredHeightIn 也进行了类似的重命名。(I0e5e1、b/167389544)
- 移除了向前/向后滚动语义操作。在 AccessibilityRangeInfo 中添加了 steps。(Ia47b0)
- gravity 在布局 API 中用到时被一致地重命名为 align 或 alignment。(I2421a、b/164077038)
- 根据 ComposeTestRule 增加了 onNode 及其他全局方法,原因是当前的全局方法即将被弃用。(Ieae36)
- 将
createAndroidComposeRule
和AndroidInputDispatcher
从androidx.ui.test.android
移动到了androidx.ui.test
(Idef08、b/164060572)
版本 1.0.0-alpha02
2020 年 9 月 2 日
发布了 androidx.compose.material:material:1.0.0-alpha02
、androidx.compose.material:material-icons-core:1.0.0-alpha02
和 androidx.compose.material:material-icons-extended:1.0.0-alpha02
。版本 1.0.0-alpha02 中包含这些提交内容。
API 变更
- 添加了实验性 BackdropScaffold 组件。(Iad908)
问题修复
- Matrix4 已替换为 Matrix。移除了 vectormath 软件包中的所有其他部分。(Ibd665、b/160140398)
版本 1.0.0-alpha01
2020 年 8 月 26 日
发布了 androidx.compose.material:material:1.0.0-alpha01
、androidx.compose.material:material-icons-core:1.0.0-alpha01
和 androidx.compose.material:material-icons-extended:1.0.0-alpha01
。版本 1.0.0-alpha01 中包含这些提交内容。
已知问题
= 无法使用退格键移除 Material TextField
中的第一个字符 (b/165956313)
版本 0.1.0-dev
版本 0.1.0-dev17
2020 年 8 月 19 日
发布了 androidx.compose.material:material:0.1.0-dev17
、androidx.compose.material:material-icons-core:0.1.0-dev17
和 androidx.compose.material:material-icons-extended:0.1.0-dev17
。版本 0.1.0-dev17 中包含这些提交内容。
API 变更
- 移除了之前已弃用的 RadioGroup 和 RadioGroupItem,改为使用 Row 和 RadioBotton(I381b7、b/163806637)
- 从 TextField 中移除了 onFocusChanged 回调,请改为使用 Modifier.focusObserver。(I51089、b/161297615)
- 已弃用 Modifier.drawBorder,请改为使用 Modifier.border。Border 数据类已替换为 BorderStroke(I4257d、b/158160576)
- 已重命名 SwipeableState 中的某些属性:swipeTarget -> targetValue、swipeProgress -> progress、swipeDirection -> direction。添加了用于创建 SwipeableState 的 rememberSwipeableState 函数。(I2fc9c、b/163129614、b/163132293)
- 已添加信息提示控件支持,具有定位和适当排队的功能。可通过
SnackbarHostState.showSnackbar
挂起函数对其进行访问。此外:- 已添加 SnackbarHost 组件。该组件基于状态来托管信息提示控件,并负责信息提示控件之间的转换。
- 已添加 SnackbarHostState,用于支持对信息提示控件和信息提示控件主机文件进行控制并将其与 ScaffoldState 分离开来。您也可以通过
scaffoldState.snackbarHostState
访问此状态。 - 已添加信息提示控件重载,以支持 snackbarHostState 与信息提示控件本身之间的通用接口。(I79aaa)
- 向 IconButton 添加了 enabled 参数,并对 IconToggleButton 中的参数重新排序(I0a941、b/161809385、b/161807956)
- 移除了采用基于字符串的 API 的 ListItem 版本,改为使用 slot 版本。(Ib8f57、b/161804681)
- 移除了已弃用的 FilledTextField 组件。请改用 TextField 获取已填充文本字段的 Material Design 实现。(I5e889)
- AlertDialog 现在将 FlowRow 用于按钮(I00ec1、b/161809319、b/143682374)
- 在 Modifier.swipeable 中添加了参数,用于更改滑过边界时的阻力。移除了 [min/max]Value 参数。(I93d98)
- 为 LinearProgressIndicator 添加了 backgroundColor 参数,并从 CircularProgressIndicator 中移除了内部内边距。新增了 ProgressIndicatorConstants.DefaultProgressAnimationSpec,在值之间添加进度动画时,可将其用作默认的 AnimationSpec(If38b5、b/161809914、b/161804677)
- 向 Modifier.swipeable 添加了可选参数 velocityThreshold。(I698ba)
- 在 ScaffoldState 中,无法再使用 bottomBarSize、fabSize 等。请在您想知道其大小的组件上改用 Modifier.onPosition。向 Scaffold 添加了 contentColor 和 Modifier 参数(Ic6f7b、b/161811485、b/157174382)
- 重命名了 Tab 中的某些参数并对这些参数进行了重新排序,以与其他 API 保持一致(Ia2d12、b/161807532)
- 将 TabRow 拆分为 TabRow 和 ScrollableTabRow,从 TabRow 中移除了 isScrollable。此外还公开了 ScrollableTabRow 中的 edgePadding,它可用于控制标签页前后的可用空间。(I583e8、b/161809544)
- 已移除
TabRow
对象,代之以 TabConstants。TabRow.TabPosition 已移至顶层 (TabPosition),并且 indicatorContainer 已重命名为indicator
。如需详细了解如何使用更新后的 API 和默认值,请参阅示例和文档。(I54d45、b/161809544) - 调整了 Modifier.swipeable 中的 thresholds 参数;现在该参数采用一对状态(类型为 T),并以 ThresholdConfig 的形式返回这一对状态之间的阈值。在 SwipeToDismiss 中添加了参数 dismissThresholds,该参数是一个 lambda (DismissDirection) -> ThresholdConfig。(Ie1080)
- 增加了滑块的颜色设置,用于进行精细的自定义(I73e64、b/161810475)
- Card 的 color 参数已重命名为 backgroundColor(I01fc1、b/161809546)
- 现在可以自定义信息提示控件的背景和内容颜色(I238f2、b/161804381)
- 在各个 Drawer 类和接口中添加了 modifier、backgroundColor、contentColor 和 scrimColor 自定义参数(I23655、b/161804378)
- 为清楚起见,现在弃用了
state { ... }
可组合项,改为对remember { mutableStateOf(...) }
的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的by mutableStateOf()
模式相一致。(Ia5727) - Button 的 padding 参数已重命名为 contentPadding(Id252e、b/161809394)
- 添加了实验性 Material 组件 SwipeToDismiss。(I129e5)
问题修复
- 移除了
onChildPositioned
和OnChildPositionedModifier
。开发者应改为在子布局上使用onPositioned
和OnPositionedModifier
。(I4522e、b/162109766) - 向 SemanticsPropertyKey 添加了 mergePolicy lambda。此 lambda 可用于为 mergeAllDescendants 语义合并定义自定义政策。默认政策为:如果已有父项值则使用父项值,否则使用子项值。(Iaf6c4、b/161979921)
- IntSize 现已成为内联类 (I2bf42)
PlacementScope.placeAbsolute()
已重命名为PlacementScope.place()
,以前的PlacementScope.place()
已重命名为PlacementScope.placeRelative()
。因此,PlacementScope.place()
方法将不再自动在从右到左的上下文中镜像位置。如果需要执行此镜像,请改用PlacementScope.placeRelative()
。(I873ac、b/162916675)- 弃用了 PxBounds,改为使用 Rect。使用 PxBounds 的所有情况都更新为使用 Rect,并添加了适当的弃用/替换注释,以辅助迁移。(I37038、b/162627058)
- 将 RRect 重命名为 RoundRect,以使其更适合 Compose 命名模式。创建了与 RRect 类似的函数构造函数,并弃用了 RRect 函数构造函数 (I5d325)
版本 0.1.0-dev16
2020 年 8 月 5 日
发布了 androidx.compose.material:material:0.1.0-dev16
、androidx.compose.material:material-icons-core:0.1.0-dev16
和 androidx.compose.material:material-icons-extended:0.1.0-dev16
。版本 0.1.0-dev16 中包含这些提交内容。
API 变更
- Colors 现在是 final 类而不是接口。您不应扩展和提供自定义实现,而应为自定义主题背景对象创建新的 Ambient,并在组件中通过新 Ambient 访问该主题背景对象,类似于 MaterialTheme 在内部的工作方式。(Ibae84)
- ColorPalette 已重命名为 Colors,以更好地映射至 Material 颜色系统,并且消除了对 ColorPalette 的混淆,明确它是一个“通用”主题对象,而不是 Material 颜色系统的具体实现。此外,lightColorPalette 和 darkColorPalette 已分别重命名为 lightColors 和 darkColors。(I9e976、b/161812111)
- 将 BottomNavigationItem 的
text
参数重命名为label
、onSelected
重命名为onSelect
、activeColor
重命名为selectedContentColor
、inactiveColor
重命名为unselectedContentColor
,并更新了参数顺序以符合相关准则。(Icb605、b/161809324) - 我们对
Modifier.stateDraggable
进行了彻底的重新设计,并将其重命名为 Modifier.swipeable。引入了一个新 SwipeableState 类,并对 DrawerState 和 BottomDrawerState 进行了重构,使其可从该类继承数据。[Modal/Bottom]DrawerLayout 不再接受 onStateChange 参数。(I72332、b/148023068) - foundation.shape.corner 软件包已扁平化为 foundation.share(I46491、b/161887429)
- 添加了 ExperimentalMaterialApi 注解。已将 RippleTheme 标记为实验性(Ic5fa0、b/161784800)
- Material FilledTextField 已重命名为 TextField,且基础 TextField 已重命名为 BaseTextField,您可轻松寻找并使用所需的最简单的 API(Ia6242、b/155482676)
问题修复
- 已弃用 OnChildPositioned,改为在子布局上使用 OnPositioned。(I87f95、b/162109766)
- 修复了大量 API 问题 (I077bc)
- 移除了未使用的 OffsetBase 接口
- 使 Offset 类与 IntOffset 类保持一致,以获得一致的 API Surface
- 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
- 从 Canvas 接口中移出了 nativeCanvas 方法,以支持使用者创建自己的 Canvas 实例
- 创建了 stub EmptyCanvas 类,用于将 DrawScope 重构为非 null 参数而不是 lateinit,并确保字段的不可为 null 性
- ClipOp 枚举已重命名为 Pascal 大小写形式
- FilterQuality 枚举已重命名为 Pascal 大小写形式
- StrokeJoin 枚举已重命名为 Pascal 大小写形式
- PointMode 枚举已重命名为 Pascal 大小写形式
- PaintingStyle 枚举已重命名为 Pascal 大小写形式
- PathFillType 枚举已重命名为 Pascal 大小写形式
- StrokeCap 枚举已重命名为 Pascal 大小写形式
- 更新了 DrawCache 实现,现在不再使用 lateinit 参数
- 更新了 DrawScope,不再将 lazy 委托用于 fillPaint 和 strokePaint 内部参数
- 更新了 Image 可组合项,以避免使用 Box,从而减少开销
- 更新了 Outline 类,在其中添加了 @Immutable 注释
- 更新了 PathNode,为每个路径指令添加了 @Immutable 注释
- 更新了 Vector subcomposition 以移除对是否相等所做的多余的条件检查,因为 Compose 已经处理了这些检查
- 弃用了 Rect 伴生构造函数方法,改为使用函数构造函数
- 使用 @Immutable 和 @Stable API 更新了 Brush 类和函数构造函数
- VertexMode 枚举已更新为 PascalCase 大小写形式
- 更新了 DrawScope selectPaint 方法,现在可以在绘图时用到的各 stroke 参数更改时有条件地将其覆盖
- 更新了 Size,现在添加了解构 API,将 UnspecifiedSize 重命名为 Unspecified,并移除了未使用的方法
- 将 Dialog 移至 UI (I47fa6)
- 移除了
SemanticsNodeInteraction.performPartialGesture
。请改用SemanticsNodeInteraction.performGesture
。(Id9b62) SemanticsNodeInteraction.getBoundsInRoot()
已重命名为SemanticsNodeInteraction.getUnclippedBoundsInRoot()
(Icafdf、b/161336532)- 更新了 API 对从右到左布局的支持。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)
- Modifier.deternimateProgress 已重命名为 Modifier.progressSemantics (I9c0b4)
- 使用添加到 Material.io/icons 的最新图标更新了 material-icons-extended (I4b1d3)
- 要求为 transitionDefinition 明确指定类型 T。(I1aded)
- 已弃用 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的
Modifier.padding().background() + anotherModifier
(Iedd58、b/161529964) - AndroidComposeTestRule 已重命名为 createAndroidComposeRule。(I70aaf)
- 添加了 isFocused() 和 isNotFocused() SemanticsMatcher。(I0b760)
- 移除了不得在测试中使用的
BaseGestureScope.globalBounds
。请改为使用您要与之交互的节点的本地坐标。(Ie9b08) - 修复了刘海屏上弹出式内容的位置问题。(Idd7dd)
- Modifier.drawBackground 已重命名为 Modifier.background (I13677)
版本 0.1.0-dev15
2020 年 7 月 22 日
发布了 androidx.compose.material:material:0.1.0-dev15
、androidx.compose.material:material-icons-core:0.1.0-dev15
和 androidx.compose.material:material-icons-extended:0.1.0-dev15
。版本 0.1.0-dev15 中包含这些提交内容。
依赖项
- 如需使用 Compose 的
0.1.0-dev15
版本,您需要根据上面的声明依赖项部分给出的新代码段来更新依赖项。
API 变更
@Model
注释现已弃用。请使用 state 和 mutableStateOf 作为替代方案。经仔细讨论之后,我们做出了这一弃用决定。理由
理由包括但不限于:
- 减少 API Surface 区域和我们需要传授的概念
- 更为贴近其他类似工具包(Swift UI、React、Flutter)
- 这是一项可撤消的决定。我们以后可以随时恢复
@Model
。 - 解决了极端情况下的使用难题,轻松回答了有关将
@Model
配置为我们需要处理的内容的问题 @Model
数据类、等号、哈希代码等。- 如何让部分属性“被观测”,而其他属性不被观测?
- 如何指定要在观测中使用的结构性与指示性等式?
- 减少系统中的“魔力”。这会降低有人误认为系统比实际上要更智能(即知道如何区分列表)的可能性
- 使观测的粒度更为直观。
- 改进了类中从变量到属性的可重构性
- 可能使您可以手动进行针对特定状态的优化
- 与生态系统的其他部分更加贴近,并减少了在不可变性或我们“接受可变状态”方面的不确定性
迁移注意事项
@Model
的几乎所有现有用例都可通过两种方式进行转换。以下示例具有一个@Model
类,该类有两个属性(仅作示例),用在一个组合项中。@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
替代方案 1:使用
State<OriginalClass>
并创建副本。使用 Kotlin 的数据类可以更轻松地实现此方法。从本质上讲,请将之前的所有
var
属性设为数据类的val
属性,然后使用state
而不是remember
,并将状态值分配给使用数据类copy(...)
便捷方法的原始版本的克隆副本。请注意,只有当该类的唯一转变发生在创建
State
实例的同一范围内时,此方法才有效。如果类在使用范围之外发生内部变化,并且您依赖于对该范围的观察,则您需要使用下一种方法。data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
替代方案 2:使用 mutableStateOf 和属性委托
使用 Kotlin 的属性委托和
mutableStateOf
API 可以更轻松地实现此方法,使您可以在组合之外创建 MutableState 实例。实际上,请将原始类的所有var
属性替换为以mutableStateOf
作为属性委托的var
属性。这样做的好处是,类的使用情况完全不会改变,变化的只是其内部实现。不过,这种行为与原始示例并不完全相同,因为每个属性现在都是单独观察/订阅的,因此您在重构后看到的重新组合可能会变窄(这是好事)。class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8、b/152050010、b/146362815、b/146342522、b/143413369、b/135715219、b/143263925、b/139653744)
文本字段中的 onFocusChange 回调已重命名为 onFocusChanged (Ida4a1)
在 stateDraggable 中添加了阈值参数,以指定锚点之间的阈值。这可用于设置底部抽屉式导航栏中的 56dp 阈值。此外,BottomDrawerLayout 现在使用单独的 BottomDrawerState 枚举。(I533fa)
移除了之前已弃用的 Modifier.ripple。现在,可点击项使用涟漪作为默认指示元素(如果您的应用中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用可点击项即可免费获取涟漪指示元素。如果您需要自定义涟漪的颜色/大小/边界参数,您可以手动创建一个 RippleIndication,并将其作为指示参数传递给可点击项。(I663b2、b/155375067)
移除了已弃用的 FilledTextField 可组合项替代方案 (I7f8f8)
将 Button 对象(包括 Button 函数使用的默认值)重命名为 ButtonConstants(I7c5f7、b/159687878)
Button 的内容槽现在的行为方式就像 Row 一样(当您需要带文字的图标时非常实用,请查看 Button 示例,了解如何编写)(I0ff10、b/158677863)
已弃用 RadioGroup 和 RadioGroupItem。将 Box 与 Modifier.selectable、Row 和 Column 结合使用,以根据您的设计选择一组恰当的 radioButton(I7f5cf、b/149528535)
添加了 Material Outlined Textfield (I1a518)
弃用了 androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue。还弃用了使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项。请改为使用 androidx.ui.input.TextFieldValue(I4066d、b/155211005)
TabRow.TabPosition 不含以 Dp 为单位的位置,也不使用 IntPx(I34a07、b/158577776)
将使用的 IntPx 替换为了 Int。将 IntPxPosition 替换为了 IntOffset。将 IntPxSize 替换为了 IntSize。(Ib7b44)
为了整合用于表示大小信息的类的数量,我们对 Size 类(而非 PxSize)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的宽度和高度。(Ic0191)
弃用了 Modifier.ripple。现在,可点击项使用涟漪作为默认指示元素(如果您的应用中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用可点击项即可免费获取涟漪指示元素。如果您需要自定义涟漪的颜色/大小/边界参数,您可以手动创建一个 RippleIndication,并将其作为指示参数传递给可点击项。(I101cd、b/155375067)
重新设计了 Scaffold API:少数参数更改了名称,添加了新参数以优化自定义功能。添加了用于查询 Fab、TopBar 和 BottomBar 大小的 getter (I0e7ce)
在 ui-material 中添加了 DropdownMenu 组件,它是 Material Design 菜单的实现。(I9bb3d)
允许使用 SoftwareKeyboardController 手动显示/隐藏软件键盘(Ifb9d6、b/155427736)
Modifier.indication 已添加到基础软件包中,可用于在自定义可交互元素上显示按压/拖动/其他指示元素(I8425f、b/155287131)
整合了 CanvasScope 实现,因此现在只有 DrawScope 和 ContentDrawScope。CanvasScope 已重命名为 DrawScope。更新了 DrawScope 以实现密度界面并提供 LayoutDirection。删除了 ContentDrawScope 中的 DrawScope 子类。Painter 和 PainterModifier 已更新,不再由自身保留 RTL 属性,因为 DrawScope 已提供此信息,无需手动提供 (I1798e)
将 Emphasis.emphasize() 重命名为 Emphasis.applyEmphasis() (Iceebe)
禁用按钮现在在视觉上非常符合 Material Design 规范(I47dcb、b/155076924)
FilledTextField 获得 ime 操作、可视化转换和键盘类型支持(I1f9cf、b/155075201)
向 CircularProgressIndicator 添加了 strokeWidth 参数以自定义笔触尺寸。如需更改 LinearProgressIndicator 的笔触尺寸(高度),您可以使用 Modifier.preferredHeight() 或其他尺寸修饰符。(Icea16、b/154919081)
向 CircularProgressIndicator 添加了 strokeWidth 参数以自定义笔触尺寸。如需更改 LinearProgressIndicator 的笔触尺寸(高度),您可以使用 Modifier.preferredHeight() 或其他尺寸修饰符。(Icea16、b/154919081)
为 FilledTextField 中的尾随和前置图标添加了槽 API,并处理了错误状态 (Ic12e0)
FAB 和扩展型 FAB 的默认颜色已更改为 MaterialTheme.colors.secondary。(I3b9b9、b/154118816)
将 API 中使用的所有可为 null 的 Color 替换为非 null 值,并使用 Color.Unset 代替 null (Iabaa7)
EdgeInsets 已重命名为 InnerPadding。Material 按钮的 innerPadding 参数已重命名为 paddding。(I66165)
滑块现在是无状态的。与其他任何控件一样,用户需要自行传递并更新状态。(Ia00aa)
移除了 StaticDrawer。如果您需要相关功能,请改用采用材料专有宽度的 Box (I244a7)
添加了已填充文本字段的 Material Design 实现 (Ic75cd)
为 ListItem 添加了修饰符参数,并重新排列了参数,以优化尾随的 lambda 正文 (I66e21)
为 Typography 添加了 defaultFontFamily 构造函数参数,允许指定默认字体系列,以便用于所提供的任何没有字体系列集的 TextStyle。(I89d07)
暂时从 API Surface 中移除了 Material 数据表格。(Iaea61)
重命名了 Divider 可组合项中的参数 (Ic4373)
children (Ia6d19)
移除了 MaterialTheme.emphasisLevels,改为使用 EmphasisAmbient.current 检索 Emphasis 级别 (Ib5e40)
形状主题系统根据 Material Design 规范进行了更新。现在,您可以提供大多数组件使用的小型、中型和大型形状 (Ifb4d1)
将 MaterialTheme.colors()、MaterialTheme.typography() 等 MaterialTheme API 更改成了属性,而不是函数。从现有调用中移除了括号,行为不会有任何变化。(I3565a)
重构了 FloatingActionButton API,以便接受可组合的 lambda,而不是基元。如需了解使用信息,请参阅更新后的示例。(I00622)
为 Checkbox、Switch 和 Toggleable 添加了
enabled
参数 (I41c16)Ripple 现在是修饰符。在 Clickable 还未转换时,建议使用
Clickable(onClick = { ... }, modifier = ripple())
(Ie5200、b/151331852、b/150060763)Surface 和 Card 从 androidx.ui.material.surface 移到了 androidx.ui.material(I88a6d、b/150863888)
Button、FloatingActionButton 和 Clickable 现在有各自的
enabled
参数。Button 上的某些参数已重命名或重新排序。(I54b5a)Image 已重命名为 ImageAsset,以更好地区分 Image 数据和即将推出、用于布置布局及绘制内容的 Image 可组合项。_Body:在 android.graphics.Bitmap、Bitmap.asImageAsset() 的基础上创建了扩展方法,该方法可用于创建 ImageAsset 实例,帮助将传统 Android 应用开发与 Compose 框架结合起来 (Id5bbd)
移除了带字符串参数的 Snackbar API,改为使用接受可组合 lambda 的重载。如需了解使用信息,请参阅更新后的示例 (I55f80)
重构了 Tab API,以接受
text
和icon
lambda (Ia057e)添加了 BottomNavigation 组件;请查看相关文档和示例,了解使用信息 (I731a0)
添加了 Icon、IconButton 和 IconToggleButton,移除了 AppBarIcon。您可以直接使用 IconButton 替换目前使用的 AppBarIcon,它们现在将有正确的触摸目标。查看示例了解使用信息,并查看“图标”了解可直接与这些组件一起使用的所提供 Material 图标。(I96849)
将 ButtonStyle 替换成了不同的函数,并移除了文本(字符串)重载。如需了解使用信息,请参阅更新后的示例。(If63ab、b/146478620、b/146482131)
将
Border
修饰符重命名为DrawBorder
(I8ffcc)LayoutCoordinate 不再有位置属性。在考虑 LayoutModifier、旋转或缩放时,位置属性没有意义。相反,开发者应使用 parentCoordinate 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个 LayoutCoordinate 的转换。
LayoutCoordinate 会将 IntPxSize(而不是 PxSize)用于尺寸属性。Layout 将整数像素尺寸用于布局,因此所有布局尺寸都应使用整数,而非浮点值。(I9367b)
Ambient API 重大更改。如需了解详情,请参阅日志和
Ambient<T>
文档(I4c7ee、b/143769776)添加了 Scaffold 材料组件。Scaffold 实现 (I7731b)
用边框修饰符取代了 DrawBorder (Id335a)
问题修复
- 弃用了 FocusModifier,改为使用 Modifier.focus、Modifier.focusRequester、Modifier.focusObserver。弃用了 FocusState 和 FocusDetailedState,改为使用 FocusState2(I46919、b/160822875、b/160922136)
- 已弃用 VerticalScroller 和 HoriziontalScroller。请使用 ScrollableColumn 和 ScrollableRow 实现内置的 Column/Row 行为和参数体验,或者对您自己的元素使用 Modifier.verticalScroll 和 Modifier.horizontalScroll。同样,ScrollerPosition 也已弃用,取而代之的是 ScrollState(I400ce、b/157225838、b/149460415、b/154105299)
- 重新设计了 Modifier.draggable 和 Modifier.scrollable API。移除了 DragDirection,改为使用 Orientation。可滚动项必需的 State 已简化。ScrollableState 已重命名为 ScrollableController(Iab63c、b/149460415)
runOnIdleCompose
已重命名为runOnIdle
(I83607)- 单值语义属性现在使用调用样式。例如,“semantics { hidden = true }”现在写为:“semantics { hidden() }”。(Ic1afd、b/145951226、b/145955412)
- 多个测试 API 已重命名,变得更为直观。所有 findXYZ API 均已重命名为 onNodeXYZ。所有 doXYZ API 均已重命名为 performXYZ。(I7f164)
- Transition API 已更改为返回 TransitionState,而不是将 TransitionState 传递给子级。这使该 API 与 animate() API 更加一致。(I24e38)
- 添加了一个 IntBounds 单元类,它表示布局的整数像素边界。更新了 PopupPositionProvider 的 API 以供使用。(I0d8d0、b/159596546)
- 添加了一种新的可选标志 useUnmergedTree,以测试查找程序。(I2ce48)
- 移除了过时的尺寸测试 API。(Iba0a0)
- 移除了封装 NativeShader 预期类的 Shader 内联类。NativeShader 已重命名为 Shader。封装的 Shader 内联类未向 API Surface 添加任何有价值的东西,并且它是一个内联类,因此请直接使用 NativeShader 类。(I25e4d)
- 弹出式窗口、对话框和菜单现在继承了上下文 MaterialTheme(Ia3665、b/156527485)
- Material DropdownMenu 现在可滚动。(Ide699)
- 从 Layout() 函数的测量块中移除了布局方向参数。但是,可以通过测量范围对象在回调内提供布局方向 (Ic7d9d)
- 在顶级 API 中使用 AnimationSpec 来阐明静态动画规范的概念而不使用 AnimationBuilder;- 改进了过渡 DSL:创建补间动画、弹性动画等 AnimationSpec 时无需再指定 lambda 要求,而是直接接受构造函数参数;- 提高了 AnimationSpec 的整体易用性:开放构造函数,而不是依赖于构建器;- 将关键帧和补间动画的时长和延迟时间改为了 Int 类型的值。这样就能消除不必要的类型转换和方法重载(同时支持 Long 和 Int 两种数据类型)。(Ica0b4)
- 当
enabled
设置为 false 时,Switch 现在会显示为停用状态(If4624、b/155941869、b/159331694) - Modifier.tag 已重命名为 Modifier.layoutId,以避免与 Modifier.testTag 混淆。(I995f0)
- 从 Placeable#get(AlignmentLine) 返回的对齐行 Int 位置值现在为非 null 值。如果缺少查询后的对齐行,则会返回 AlignmentLine.Unspecified。(I896c5、b/158134875)
已将 Radius 类重构为内联类。移除了伴生创建方法,代之以使用默认参数的函数构造函数,从而让沿 y 轴的半径与强制要求的 x 轴半径参数相匹配。
更新了 DrawScope.drawRoundRect,以针对沿 x 和 y 轴的半径使用单个 Radius 参数,而不是 2 个单独的浮点数值 (I46d1b)
为了整合用于表示位置信息的类的数量,我们对 Offset 类(而非 PxPosition)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的 x 轴和 y 轴偏移量。(I3ad98)
我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数。删除了整个 Px 类 (I3ff33)
已弃用 Toggleable 组件,现改用 Modifier.toggleable(I35220、b/157642842)
我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I086f4)
我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Id3434)
我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I97a5a)
修复了无法针对 DropdownMenuItem 调用 onClick 的问题。(I3998b、b/157673259)
已弃用 MutuallyExclusiveSetItem,请改为使用 Modifier.selectable。(I02b47、b/157642842)
TestTag 现已弃用,请改为使用 Modifier.testTag。(If5110、b/157173105)
TextField 的光标具有闪烁的动画效果 (Id10a7)
我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I19d02)
VerticalScroller 现在提供开箱即用型 Column。HorizontalScroller 现在提供开箱即用型 Row。(Ieca5d、b/157020670)
我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Iede0b)
Modifier.semantics 已取消弃用,以允许在高层级组件中使用。(I4cfdc)
DrawLayer Modifiers API 已更改:outlineShape 已重命名为 shape,具有 RectangleShape 默认值,并且现在不可为 null;clipToOutline 已重命名为 clip;移除了 clipToBounds,因为对于 RectangleShape 而言,它与 clip == true 相同(I7ef11、b/155075735)
更新了公开画布的更高级别的 Compose API,改为公开 CanvasScope。这样一来,用户便无需再维护自己的渲染对象。对于仍需要访问画布的使用方,可以使用 drawCanvas 扩展程序方法,该方法提供回调以向底层画布发出绘制命令。(I80afd)
已弃用 AlignmentLineOffset 可组合项,请改用 relativePaddingFrom() 修饰符。移除了 CenterAlignmentLine 可组合项。(I60107)
withConstraints 尾随 lambda API 已更改。现在,它不是使用两个参数而是使用一个接收器范围,除了 constraints 和 layoutDirection 之外,还以 Dp 为单位提供 minWidth、maxWidth、minHeight 和 maxHeight 属性(I91b9a、b/149979702)
新增了 defaultMinSizeConstraints 布局修饰符,该修饰符仅在未指定传入的相应约束时才将尺寸约束设置为封装的布局(最小约束为 0,最大约束为无穷大)。(I311ea、b/150460257)
移除了 FocusManagerAmbient。请使用 FocusModifier.requestFocus 来获取焦点。(Ic4826)
创建了 CanvasScope API,用于封装 Canvas 对象以公开无状态的声明性绘图 API Surface。转换包含在其自己的接收器范围内,大小信息也限定在相应的边衬区范围内。它不需要使用方维护自己的渲染状态对象来配置绘图操作。
添加了 CanvasScopeSample 并更新了演示版应用,以包含声明性图形演示 (Ifd86d)
将光标颜色自定义项添加到 TextField (I6e33f)
按照以下方式使用时,与 TextField 配合使用的 TextFieldValue 现在可以在重新创建 Activity 后继续保留:
var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
(I5c3ce、b/155075724)LayoutModifier2 已重命名为 LayoutModifier。(Id29f3)
移除了已弃用的 LayoutModifier 接口。(I2a9d6)
已将 CoreTextField/TextField focusIdentifier 参数替换为 FocusNode,以便与聚焦子系统集成。(I7ea48)
Layout 和 LayoutModifier2 中的内建测量函数现在有一个 IntrinsicMeasureScope 接收器,它为隐式传播的布局方向提供固有特性查询 API。(Id9945)
添加了新的 Modifier.zIndex(),以控制同一父布局内子级的绘制顺序。DrawLayerModifier 的高度属性已重命名为 shadowElevation,并且不再控制绘制顺序。DrawShadow 的参数顺序已更改:现在第一个参数是 elevation,第二个参数是 shape,默认值为 RectangleShape。(I20150、b/152417501)
RectangleShape 从 androidx.ui.foundation.shape.* 移到了 androidx.ui.graphics.* (Ia74d5、b/154507984)
TextField API 更新 - onFocus 和 onBlur 回调已合并到带参数的单个 onFocusChange(Boolean) 回调中 (I66cd3)
分别向 Row 和 Column 添加了 verticalGravity 和 horizontalGravity 参数。(I7dc5a)
更新了 wrapContentWidth 和 wrapContentHeight,预计会显示垂直或水平 Alignment,而不是任意 Alignment。Gravity 修饰符已更新为接受垂直或水平 Alignment。更新了 Row、Column 和 Stack,以支持自定义的连续 Alignment。(Ib0728)
创建了 PixelMap API,以支持从 ImageAsset 查询像素信息。(I69ad6)
移除了 ProvideContentColor,改为直接将 ContentColorAmbient 与
Providers
一起使用 (Iee942)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)
改进了 DrawModifier API:
- 确定了 draw() ContentDrawScope 的接收器范围
- 移除了 draw() 上的所有参数
- DrawScope 的接口与之前的 CanvasScope 接口相同
- ContentDrawScope 具有 drawContent() 方法(Ibaced、b/152919067)
runOnIdleCompose
和runOnUiThread
现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)[Mutable]State 属性委托运算符移到了扩展程序,以支持 Kotlin 1.4 属性委托优化。调用方必须添加 import 才能继续使用
by state { ... }
或by mutableStateOf(...)
。(I5312c)为 LayoutCoordinates 添加了 positionInParent 和 boundsInParent。(Icacdd、b/152735784)
已弃用 ColoredRect,改为使用 Box(Modifier.preferredSize(width, height).drawBackground(color))。(I499fa、b/152753731)
LayoutResult 已重命名为 MeasureResult。(Id8c68)
添加了 LayoutModifier2,一个用于定义布局修饰符的新 API;弃用了 LayoutModifier (If32ac)
将修饰符以及运算符替换成了出厂扩展函数 (I225e4)
将 Draggable 移到了修饰符(Id9b16、b/151959544)
弃用了 ParentData 可组合项。如果您只需标记布局子项,以便在测量块内识别它们,那么您应该创建可实现 ParentDataModifier 接口的修饰符,或使用 LayoutTag 修饰符。(I51368、b/150953183)
弃用了 Center 可组合项。应使用 LayoutSize.Fill + LayoutAlign.Center 修饰符或应用了适当修饰符的某个 Box 或 Stack 可组合项替换 (Idf5e0)
添加了 VectorPainter API,以取代矢量图形的现有 subcomposition API。subcomposition 的结果是 VectorPainter 对象,而不是 DrawModifier。弃用了之前的 DrawVector 可组合项,改为使用 VectorPainter。
Image(Painter) API 已重命名为 PaintBox(Painter)。创建了 Vector 可组合项,其行为类似于 Image 可组合项,只不过使用 VectorAsset,而不是 ImageAsset(I9af9a、b/149030271)
LayoutFlexible 已重命名为 LayoutWeight。“tight”参数已重命名为“fill”。(If4738)
移除了 RepaintBoundary,改为使用 DrawLayerModifier (I00aa4)
已将 DrawVector 从常规可组合函数更改成返回修饰符 drawVector(),该修饰符将绘制用作布局背景的矢量。(I7b8e0)
Opacity 可组合函数已替换为 drawOpacity 修饰符。(I5fb62)
将可组合函数 Clip 替换成了修饰符 drawClip()。当您仅需使用矩形裁剪层边界时,DrawClipToBounds 修饰符方便易用。(If28eb)
将 DrawShadow 可组合函数替换成了 drawShadow() 修饰符。现在,阴影是作为 LayerModifier 的一部分绘制的。(I0317a)
添加了 LayerModifier,这是一种允许为布局添加 RenderNode 的修饰符。它允许设置剪裁、不透明度、旋转、缩放和阴影。它将取代 RepaintBoundary。(I7100d、b/150774014)
androidx.compose.ViewComposer 移到了 androidx.ui.node.UiComposer。移除了 androidx.compose.Emittable,它与 ComponentNode 重复。移除了 androidx.compose.ViewAdapters,它们不再是受支持的用例。已弃用 Compose.composeInto,请改为使用
setContent
或setViewContent
。已弃用 Compose.disposeComposition,改用setContent
返回的Composition
的dispose
方法。androidx.compose.Compose.subcomposeInto 已移到 androidx.ui.core.subcomposeInto。ComponentNode#emitInsertAt 已重命名为 ComponentNode#insertAt。ComponentNode#emitRemoveAt 已重命名为 ComponentNode#removeAt。ComponentNode#emitMode 已重命名为 ComponentNode#move (Idef00)创建了 Image 可组合项,除了在屏幕上绘制指定 ImageAsset 之外,还可用于处理尺寸调整/布局。这一可组合项还支持绘制采用固有尺寸的任何一种任意 Painter 实例,另外还支持指定的固定尺寸或最小尺寸 (Ibcc8f)
弃用了 Wrap 可组合项。它可以替换为 LayoutAlign 修饰符或 Stack 可组合项 (Ib237f)
WithConstraints 获取了 LayoutDirection 参数 (I6d6f7)
使布局方向可以从父布局节点传递到子布局。添加了布局方向修饰符。(I3d955)
已弃用:Draw 可组合项是出现错误的常见原因(I78392、b/149827027)
Stack 组件支持从右向左的方向 (Ic9e00)
移除了 DrawShape 可组合项,请改为使用 DrawBackground 修饰符。(I7ceb2)
支持 LayoutPadding 修饰符中从右向左的方向 (I9e8da)
添加了 AdapterList,这是一个滚动列表组件,仅用于编写和布局可见项。目前已知问题包括只能处于垂直方向,无法完全处理其子项的所有更改情况。(Ib351b)
已将
ComposeFlags.COMPOSER_PARAM
标志更新为true
,这将改变 Compose 插件的代码生成策略。大体而言,这会导致 @Composable 函数通过其他合成参数生成,该参数会传递到后续 @Composable 调用,以便运行时正确管理执行。这是一项重大的二进制文件更改,但应当在所有获得许可的 Compose 使用情况中保留源代码级别的兼容性。(I7971c)添加了 Canvas 组件。这一可组合项需占用一定大小(由用户提供),并且您可以使用 CanvasScope 对其进行绘制 (I0d622)
Density 和 DensityScope 合并到了一个接口中。现在,您可以使用 DensityAmbient.current 代替 ambientDensity()。只需 with(density) 便可代替 withDensity(density) (I11cb1)
更改了 LayoutCoordinate,使 providedAlignmentLine 成为一个集合,而非映射,并使 LayoutCoordinate 实现了 get() 运算符,而非检索值。这样一来,修饰符可以更轻松地修改集合中的一个或多个值,而无需为每个修饰符创建新的集合。(I0245a)
滚动条现在展示原生 Android 滑动动作行为。(I922af、b/147493715)
改进了 Constraints 的 API Surface (I0fd15)