Compose Material
androidx.compose.material
androidx.compose.material.icons
(如需获取所有 Compose 软件包,请参阅相应 API 参考文档)
最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 12 月 11 日 | 1.7.6 | - | - | 1.8.0-alpha07 |
结构
Compose 由 androidx
中的 7 个 Maven 组 ID 构成。每个组都包含一套特定用途的功能,并各有专属的版本说明。
下表介绍了各个组的内容,点击链接即可查看其版本说明。
组 | 说明 |
---|---|
compose.animation | 在 Jetpack Compose 应用中构建动画,丰富用户体验。 |
compose.compiler | 借助 Kotlin 编译器插件,转换 @Composable functions(可组合函数)并启用优化功能。 |
compose.foundation | 使用现成可用的构建块编写 Jetpack Compose 应用,还可扩展 Foundation 以构建您自己的设计系统元素。 |
compose.material | 使用现成可用的 Material Design 组件构建 Jetpack Compose UI。这是更高层级的 Compose 入口点,旨在提供与 www.material.io 上描述的组件一致的组件。 |
compose.material3 | 使用 Material Design 3(新一代 Material Design)组件构建 Jetpack Compose UI。Material 3 中包括了更新后的主题和组件,以及动态配色等 Material You 个性化功能,旨在与新的 Android 12 视觉风格和系统界面相得益彰。 |
compose.runtime | Compose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。 |
compose.ui | 与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。 |
声明依赖项
如需添加 Compose 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
Groovy
dependencies { implementation "androidx.compose.material:material:1.7.6" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.material:material:1.7.6") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.8
版本 1.8.0-alpha07
2024 年 12 月 11 日
发布了 androidx.compose.material:material-*:1.8.0-alpha07
。版本 1.8.0-alpha07 包含这些提交内容。
bug 修复
- 修复了有时不遵循文本字段大小修饰符的问题。(I90d4c、b/356905963)
版本 1.8.0-alpha06
2024 年 11 月 13 日
发布了 androidx.compose.material:material-*:1.8.0-alpha06
。版本 1.8.0-alpha06 包含这些提交内容。
版本 1.8.0-alpha05
2024 年 10 月 30 日
发布了 androidx.compose.material:material-*:1.8.0-alpha05
。版本 1.8.0-alpha05 包含这些提交内容。
bug 修复
- 优化了 Scaffold
contentPadding
行为,以避免在contentPadding
发生变化时始终重组正文内容。(I8c8e2、b/373904168) - 使 Material 滑块在按下控制键时更改其值。(I1c442)
版本 1.8.0-alpha04
2024 年 10 月 16 日
发布了 androidx.compose.material:material-*:1.8.0-alpha04
。版本 1.8.0-alpha04 包含这些提交内容。
API 变更
- 从
TextFields
中移除了readOnly
,以固定到稳定的基础版本。(I3aaba)
bug 修复
- 在 Android S 及更高版本中,添加了对展开式组件(例如点击时展开的卡片)中的涟漪效果的支持。以前,涟漪不会填满新大小,但现在它会扩展到新的边界。(If509a、b/183019123)
版本 1.8.0-alpha02
2024 年 9 月 18 日
发布了 androidx.compose.material:material-*:1.8.0-alpha02
。版本 1.8.0-alpha02 包含这些提交内容。
版本 1.8.0-alpha01
2024 年 9 月 4 日
发布了 androidx.compose.material:material-*:1.8.0-alpha01
。版本 1.8.0-alpha01 包含这些提交内容。
API 变更
- 添加了新的
NavGraphBuilder.bottomSheet
构建器,以使用安全参数创建底部动作条 ((I28589、I777db、b/351858980))
版本 1.7
版本 1.7.6
2024 年 12 月 11 日
发布了 androidx.compose.material:material-*:1.7.6
。版本 1.7.6 包含这些提交内容。
版本 1.7.5
2024 年 10 月 30 日
发布了 androidx.compose.material:material-*:1.7.5
。版本 1.7.5 包含这些提交内容。
版本 1.7.4
2024 年 10 月 16 日
发布了 androidx.compose.material:material-*:1.7.4
。版本 1.7.4 包含这些提交内容。
版本 1.7.2
2024 年 9 月 18 日
发布了 androidx.compose.material:material-*:1.7.2
。版本 1.7.2 包含这些提交内容。
版本 1.7.1
2024 年 9 月 10 日
- Android 工件没有任何变化。移除了
-desktop
工件,并添加了-jvmStubs
和-linuxx64Stubs
工件。这些目标均不应被使用,它们只是为了帮助 Jetbrains Compose 而创建的占位符。
版本 1.7.0
2024 年 9 月 4 日
发布了 androidx.compose.material:material-*:1.7.0
。版本 1.7.0 包含这些提交内容。
自 1.6.0 以来的重要变更
- Material 组件已迁移为使用新的涟漪 API,不再查询
RippleTheme
。 - 以前接受
MutableInteractionSource
并默认为remember { MutableInteractionSource() }
的 Material 组件现在接受可为 null 的MutableInteractionSource
,并默认为 null。如果您不提取并使用MutableInteractionSource
,则应传递 null。这样一来,某些组件便可仅在需要时延迟创建实例,从而提升性能。我们还建议您在自己的组件中进行类似的更改。 BottomDrawer
、ModalBottomSheet
、BackdropScaffold
和标准底部动作条已升级为稳定 API。
版本 1.7.0-rc01
2024 年 8 月 21 日
发布了 androidx.compose.material:material-*:1.7.0-rc01
。版本 1.7.0-rc01 包含这些提交内容。
版本 1.7.0-beta07
2024 年 8 月 7 日
发布了 androidx.compose.material:material-*:1.7.0-beta07
。版本 1.7.0-beta07 包含这些提交内容。
版本 1.7.0-beta06
2024 年 7 月 24 日
发布了 androidx.compose.material:material-*:1.7.0-beta06
。版本 1.7.0-beta06 包含这些提交内容。
版本 1.7.0-beta05
2024 年 7 月 10 日
发布了 androidx.compose.material:material-*:1.7.0-beta05
。版本 1.7.0-beta05 包含这些提交内容。
版本 1.7.0-beta04
2024 年 6 月 26 日
发布了 androidx.compose.material:material-*:1.7.0-beta04
。版本 1.7.0-beta04 包含这些提交内容。
版本 1.7.0-beta03
2024 年 6 月 12 日
发布了 androidx.compose.material:material-*:1.7.0-beta03
。版本 1.7.0-beta03 包含这些提交内容。
版本 1.7.0-beta02
2024 年 5 月 29 日
发布了 androidx.compose.material:material-*:1.7.0-beta02
。版本 1.7.0-beta02 包含这些提交内容。
API 变更
- 更新了用于设置链接样式的 API:将
TextLinkStyles
移到了TextStyle
,并从 Material 中移除了TextDefaults
(I5477b)
版本 1.7.0-beta01
2024 年 5 月 14 日
发布了 androidx.compose.material:material-*:1.7.0-beta01
。版本 1.7.0-beta01 包含这些提交内容。
API 变更
- 更新了用于在 Text 中获取 Material 主题链接的 API。具体而言,从
TextDefaults
中移除了用于构建主题LinkAnnotations
和解析带有主题链接的 HTML 的方法。而是添加了一个TextLinkStyles
类,以便将链接样式作为参数添加到 Text 可组合项。(I31b93)
版本 1.7.0-alpha08
2024 年 5 月 1 日
发布了 androidx.compose.material:material-*:1.7.0-alpha08
。版本 1.7.0-alpha08 包含这些提交内容。
API 变更
- 修复了
backgroundColor
不适用于TextFieldDecorationBox
和OutlinedTextFieldDecorationBox
的问题。装饰框现在接受shape
参数。(I371c2、b/307694651) RippleConfiguration#isEnabled
已移除,LocalRippleConfiguration
已设为可为 null。如需停用涟漪效果,请向LocalRippleConfiguration
提供null
,而不是向isEnabled = false
提供RippleConfiguration
。(I22725)- 除了正常样式、悬停样式和聚焦样式之外,文本链接还具有按压状态样式选项。每个
TextDefaults
方法都有一个pressedStyle
参数来支持此操作。(Ic473f、b/139312671)
bug 修复
- 标签的
OutlinedTextField
上内边距现在会考虑系统字号。(Idc781)
版本 1.7.0-alpha07
2024 年 4 月 17 日
发布了 androidx.compose.material:material-*:1.7.0-alpha07
。版本 1.7.0-alpha07 包含这些提交内容。
API 变更
- 除了正常样式、悬停和聚焦样式之外,文本链接还新增了按下状态样式选项。(I5f864、b/139312671)
- 添加了
TextDefaults
对象,其中包含用于构建LinkAnnotation
和解析 HTML 标记字符串的方法,这些方法会将MaterialTheme
应用于链接。(I98532、b/139312671)
版本 1.7.0-alpha06
2024 年 4 月 3 日
发布了 androidx.compose.material:material-*:1.7.0-alpha06
。版本 1.7.0-alpha06 包含这些提交内容。
公告
androidx.compose.material
不再要求此 Maven 组中的每个工件都使用相同的版本。用户可以混合使用 Compose 基础库的不同版本 (Ie5fba)
API 变更
- 将更多
ModalDrawer
和BottomDrawer
默认值移到了DrawerDefaults
对象中。(Ib5b2e)
版本 1.7.0-alpha05
2024 年 3 月 20 日
发布了 androidx.compose.material:material-*:1.7.0-alpha05
。版本 1.7.0-alpha05 包含这些提交内容。
API 变更
ScaffoldSubcomposeInMeasureFix
标志已被移除。(I67363)
版本 1.7.0-alpha04
2024 年 3 月 6 日
发布了 androidx.compose.material:material-*:1.7.0-alpha04
。版本 1.7.0-alpha04 包含这些提交内容。
新功能
- 添加了新的
androidx.compose.material:material-navigation
工件,用于在使用 Navigation Compose 时添加对底部动作条作为目的地的支持。此库会替代 Accompanist Navigation Material 库。(d65d57、b/180247978)
版本 1.7.0-alpha03
2024 年 2 月 21 日
发布了 androidx.compose.material:material-*:1.7.0-alpha03
。版本 1.7.0-alpha03 中包含这些提交内容。
API 变更
BottomDrawer
已从实验版升级为稳定版。BottomDrawerState
现在会将进度作为函数公开,以便查询特定目标之间的进度。BottomDrawerState
现在允许自定义动画规范,并且confirmStateChange
不再是尾随 lambda。(I9c029、b/261423850)BackdropScaffold
已从实验版升级为稳定版。动画规范现在是符合准则的tween
规范。为了避免与尾随 lambda 混淆,BackdropScaffold
的snackbarHost
参数不再是最后一个参数。BackdropScaffoldState
公开了progress(from, to)
API,用于查询锚点之间的进度。(I73f48、b/261423218)- 标准底部动作条已从实验性升级为稳定版。移除了已废弃的构造函数。动画规范现在是根据指南制定的补间动画规范。(I3c1a8、b/278692145、b/261409034)
- 模态底部动作条已从实验性升级为稳定版。移除了已废弃的构造函数。动画规范现在是符合准则的
tween
规范。(Ic53f4、b/278692145、b/266780235、b/261409034)
bug 修复
- 修复了在特定情况下
BackdropScaffold
与LookaheadScope
结合使用时可能会崩溃的问题。(I51396) - 移除了
BottomSheetScaffold
中的子组合,以提高性能。修复了在特定情况下BottomSheetScaffold
与LookaheadScope
结合使用时会崩溃的问题。(I2f90c) - 移除了
ModalBottomSheetLayout
中的子组合,从而提高了性能。(I7a025)
版本 1.7.0-alpha02
2024 年 2 月 7 日
发布了 androidx.compose.material:material-*:1.7.0-alpha02
。版本 1.7.0-alpha02 中包含这些提交内容。
版本 1.7.0-alpha01
2024 年 1 月 24 日
发布了 androidx.compose.material:material-*:1.7.0-alpha01
。版本 1.7.0-alpha01 中包含这些提交内容。
行为变更
- Material 组件已迁移为使用新的涟漪 API,不再查询
RippleTheme
。
API 变更
rememberRipple
和RippleTheme
已从 material-ripple 废弃,material 和其他设计系统库中添加了新的涟漪和RippleConfiguration
API。以前接受
MutableInteractionSource
并默认记住{ MutableInteractionSource() }
的 Material 组件现在接受可为 null 的MutableInteractionSource
,并默认设为 null。如果您不提取并使用MutableInteractionSource
,则应传递 null。这样一来,某些组件便可仅在需要时延迟创建实例,从而提升性能。我们还建议您在自己的组件中进行类似的更改。
版本 1.6
版本 1.6.8
2024 年 6 月 12 日
发布了 androidx.compose.material:material-*:1.6.8
。版本 1.6.8 包含这些提交内容。
版本 1.6.7
2024 年 5 月 1 日
发布了 androidx.compose.material:material-*:1.6.7
。版本 1.6.7 包含这些提交内容。
版本 1.6.6
2024 年 4 月 17 日
发布了 androidx.compose.material:material-*:1.6.6
。与上个版本相比没有任何变化。
版本 1.6.5
2024 年 4 月 3 日
发布了 androidx.compose.material:material-*:1.6.5
。版本 1.6.5 包含这些提交内容。
版本 1.6.4
2024 年 3 月 20 日
发布了 androidx.compose.material:material-*:1.6.4
。版本 1.6.4 包含这些提交内容。
版本 1.6.3
2024 年 3 月 6 日
发布了 androidx.compose.material:material-*:1.6.3
。版本 1.6.3 包含这些提交内容。
bug 修复
- 修复了
ExposedDropdownMenu
中的回归问题,使其再次可聚焦。(c0e0ed、b/323694447)
版本 1.6.2
2024 年 2 月 21 日
发布了 androidx.compose.material:material-*:1.6.2
。版本 1.6.2 中包含这些提交内容。
版本 1.6.1
2024 年 2 月 7 日
发布了 androidx.compose.material:material-*:1.6.1
。版本 1.6.1 中包含这些提交内容。
版本 1.6.0
2024 年 1 月 24 日
发布了 androidx.compose.material:material-*:1.6.0
。版本 1.6.0 中包含这些提交内容。
版本 1.6.0-rc01
2024 年 1 月 10 日
发布了 androidx.compose.material:material-*:1.6.0-rc01
。版本 1.6.0-rc01 中包含以下提交内容。
版本 1.6.0-beta03
2023 年 12 月 13 日
发布了 androidx.compose.material:material-*:1.6.0-beta03
。版本 1.6.0-beta03 中包含这些提交内容。
版本 1.6.0-beta02
2023 年 11 月 29 日
发布了 androidx.compose.material:material-*:1.6.0-beta02
。版本 1.6.0-beta02 中包含这些提交内容。
版本 1.6.0-beta01
2023 年 11 月 15 日
发布了 androidx.compose.material:material-*:1.6.0-beta01
。版本 1.6.0-beta01 中包含这些提交内容。
版本 1.6.0-alpha08
2023 年 10 月 18 日
发布了 androidx.compose.material:material-*:1.6.0-alpha08
。版本 1.6.0-alpha08 中包含这些提交内容。
API 变更
- 弃用某个
materialIcon
函数,改用接受autoMirror
参数的过载函数。(Ia338d)
bug 修复 - 自动增加大内容的导航栏项高度。(0c4ecc、b/272336962)
版本 1.6.0-alpha07
2023 年 10 月 4 日
发布了 androidx.compose.material:material-*:1.6.0-alpha07
。版本 1.6.0-alpha07 中包含这些提交内容。
- 依赖项更新
版本 1.6.0-alpha06
2023 年 9 月 20 日
发布了 androidx.compose.material:material-*:1.6.0-alpha06
。版本 1.6.0-alpha06 中包含这些提交内容。
行为破坏性变更
- 从
BottomSheetScaffold
中移除了与抽屉相关的功能。将BottomSheetScaffold
封装在 Drawer 可组合项中,以实现之前的功能。如需查看示例,请参阅BottomSheetScaffoldWithDrawerSample
。(I1dcc8)
API 变更
- 引入了一个临时标志,用于控制 Scaffold 应在测量期间还是在放置期间测量其子项。默认情况下,此维度将以测量单位进行衡量。如果您在使用新行为时遇到问题,请提交问题。(If6e3b)
版本 1.6.0-alpha05
2023 年 9 月 6 日
发布了 androidx.compose.material:material-*:1.6.0-alpha05
。版本 1.6.0-alpha05 中包含这些提交内容。
新功能
- 添加了对在从右到左的布局中呈现时自动镜像的图标的支持。material-icons-core 和 material-icons-extended 模块中的图标现在提供额外的图标集,以便在图标允许的情况下支持自动镜像。新集合的前缀为
Icons.AutoMirrored.Filled...
等,其中包含的图标会在 RTL 布局中自动镜像。如需查看可以(并且应)自动镜像的图标的列表,请参阅 Material 图标列表。
API 变更
- 添加了对在从右到左的布局中呈现时自动镜像的图标的支持。material-icons-core 和 material-icons-extended 模块中的图标现在提供额外的图标集,以便在图标允许的情况下支持自动镜像。新集合的前缀为
Icons.AutoMirrored.Filled...
等,其中包含的图标会在 RTL 布局中自动镜像。如需查看可以(并且应)自动镜像的图标的列表,请参阅 Material 图标列表。之前为这些图标提供的图标属性现已被标记为已废弃,并提供了替换块建议,以协助进行迁移。如果您没有针对 RTL 上的镜像图标执行任何特殊处理,我们建议您迁移到新图标。例如,Icons.Filled.ArrowBack
应重构为Icons.AutoMirrored.Filled.ArrowBack
。(I4b511)
版本 1.6.0-alpha04
2023 年 8 月 23 日
发布了 androidx.compose.material:material-*:1.6.0-alpha04
。版本 1.6.0-alpha04 中包含这些提交内容。
bug 修复
- 修复了以下问题:在
LookaheadScope
内的 Scaffold 中使用Subcomposition
(例如BottomSheetScaffold
)的某些组件会过早尝试读取其大小。(If2c5d) - 修复了
DropdownMenu
的offset
计算,使 x 偏移量完全取决于本地布局方向,并且当菜单位于屏幕底部附近时,y 偏移量将不再反转。(Iccc74、b/294103942) - 优化了
BottomSheetScaffold
的布局内部结构,并修复了LookaheadLayout
中BottomSheetScaffold
的潜在问题。(Ic0afa)
版本 1.6.0-alpha03
2023 年 8 月 9 日
发布了 androidx.compose.material:material-*:1.6.0-alpha03
。版本 1.6.0-alpha03 中包含这些提交内容。
API 变更
- Material2 组件现在具有单独的 API,用于传递
windowInsets
以支持 Android 中的边到边功能。与 material3 组件不同,material2 组件默认不支持内边距,并且应手动传递值。如需相关指导,请参阅相应的示例。(I655e8)
版本 1.6.0-alpha02
2023 年 7 月 26 日
发布了 androidx.compose.material:material-*:1.6.0-alpha02
。版本 1.6.0-alpha02 中包含这些提交内容。
API 变更
- 我们将密度依赖项移至组件级别。这适用于以下组件:
SwipeToDismiss
和基于工作表的组件。请使用提供的新重载,其中密度是参数。(I1846e) - 添加了用于指定可组合项允许的输入的注解 (I51109)
- 更新了 API 文件,以便为兼容性抑制添加注解。(I8e87a、b/287516207)
- 为
FabPosition
添加了新的“Start”对齐方式(Ib7aea、b/170592777) - Material 2 中的
TextFieldColorsWithIcons
已废弃,取而代之的是TextFieldColors
。替换leadingIconColor
或trailingIconColor
时,还应使用interactionSource
替换过载。(Id57ed、b/199377790)
版本 1.6.0-alpha01
2023 年 6 月 21 日
发布了 androidx.compose.material:material-*:1.6.0-alpha01
。版本 1.6.0-alpha01 中包含这些提交内容。
行为变更
- 在 Material 2 排版中,
includeFontPadding
现在默认为false
。默认的行高样式也已更改为Trim.None
和Alignment.Center
,并且在Typography
的TextStyle
中添加了显式lineHeight
(以 sp 为单位)。如果您想自定义这些值,请参阅 API 文档;如需详细了解这些变更,请参阅这篇博文。(Icabc3、I3f801、I04c03)
API 变更
- Material 的
Swipeable
API 已废弃。请参阅 Foundation 的AnchoredDraggable
API,这些 API 针对简单和复杂的用例进行了优化。(I732e0)
bug 修复
BottomSheetState
、ModalBottomSheetState
和BottomDrawerState
现在会公开一个进度属性,用于指示当前(已固定)锚点与滑动方向中最靠近的锚点之间的进度。(I1b317、b/271169225、b/276375124、b/276776071、b/270066861)
版本 1.5
版本 1.5.4
2023 年 10 月 18 日
发布了 androidx.compose.material:material-*:1.5.4
。版本 1.5.4 中包含这些提交内容。
版本 1.5.3
2023 年 10 月 4 日
发布了 androidx.compose.material:material-*:1.5.3
。此版本未做任何更改
版本 1.5.2
2023 年 9 月 27 日
发布了 androidx.compose.material:material-*:1.5.2
。版本 1.5.2 中包含这些提交内容。
版本 1.5.1
2023 年 9 月 6 日
发布了 androidx.compose.material:material-*:1.5.1
,该版本没有任何变化。版本 1.5.1 中包含这些提交内容。
版本 1.5.0
2023 年 8 月 9 日
发布了 androidx.compose.material:material-*:1.5.0
。版本 1.5.0 中包含这些提交内容。
自版本 1.4.0 以来的重要变更
API 变更
- 在
BottomSheetScaffold
中纳入了 Swipeable1 API 的更改。BottomSheetState
的confirmStateChange
参数已重命名为confirmValueChange
。progress
现在以浮点值的形式公开。animateTo
和snapTo
是内部方法。改用expand()
和collapse()
。移除了direction
和overflow
。offset
已替换为requireOffset()
。I323b4 - 将抽屉式导航栏中的
snapTo
函数标记为非实验性 API。(Ib9c18、b/261425368) - 为圆形进度指示器添加了轨迹颜色参数,并为圆形和线性进度指示器添加了描边上限参数。(Ie668c、b/216325962、b/222964817)
- 已将
ModalBottomSheetState
、ModalBottomSheetState.Saver
和rememberModalBottomSheetState
的confirmStateChange
重命名为confirmValueChange
。(Ib48d1) - 添加了
Modifier.minimumInteractiveComponentSize
。它可用于预留至少 48dp 的大小,以便在元素尺寸较小时消除触摸交互的歧义。(I33f58、b/258495559) - 在
ModalBottomSheetLayout
中纳入了 Swipeable API 的更改。ModalBottomSheetState
的 animateTo 不再接受animationSpec
参数,并且公开的偏移现在可为 null。使用requireOffset
要求偏移。(Ia2e79) - 添加了
@JvmDefaultWithCompatibility
注解 (I8f206) - 在
ModalDrawer. DrawerState
中纳入了 Swipeable API 的更改,animateTo
已替换为“open”和“close”方法,偏移现在可为 null。使用requireOffset
要求偏移。(I3de9e) - 更新了抽屉式导航栏和表格,以便在手势可变为滚动事件时正确延迟按下操作。
- 在 Material 和 Material3 Text、
TextField
和OutlinedTextField
中添加了minLines
参数,从而能够根据行数设置组件的最小高度 (I4af1d)
bug 修复
- 修复了
pullRefresh
没有使用速度,从而导致出现滚动回弹的问题。此外,还更改了Modifier.pullRefresh
中onRelease
lambda 的 API 签名,以针对使用的速度返回浮点数(I7db65、b/266874741) BottomSheetState
、ModalBottomSheetState
和BottomDrawerState
现在会公开一个进度属性,用于指示当前(已固定)锚点与滑动方向中最靠近的锚点之间的进度。(I1b317、b/271169225、b/276375124、b/276776071、b/270066861)- 修复了以下问题:当操作堆叠在一起以适应对话框的宽度时,
AlertDialog
关闭操作会显示在确认操作下方。此修复使实现与 Material Design 规范保持一致。I029de、b/235454277 - 当
gesturesEnabled
设置为 false 时,BottomSheetScaffold
将不再参与嵌套滚动。(I634f3、b/215403277) - 修复了以下 bug:如果为槽提供空内容,
BottomSheetScaffold
会崩溃。(Ib24a5、b/235588730) - 修复了
PullRefreshIndicator
拦截点击/指针事件的问题。(2494256、b/271777421) - 修复了在屏幕方向发生变化时
ModalBottomSheetLayout
会在极端情况下崩溃的问题。现在,工作表内容中的布局动画(例如Modifier.animateContentSize
)可以顺畅运行。(I2f981、b/266780234)
版本 1.5.0-rc01
2023 年 7 月 26 日
发布了 androidx.compose.material:material-*:1.5.0-rc01
。版本 1.5.0-rc01 中包含这些提交内容。
版本 1.5.0-beta03
2023 年 6 月 28 日
发布了 androidx.compose.material:material-*:1.5.0-beta03
。版本 1.5.0-beta03 中包含这些提交内容。
bug 修复
BottomSheetState
、ModalBottomSheetState
和BottomDrawerState
现在会公开一个进度属性,用于指示当前(已固定)锚点与滑动方向中最靠近的锚点之间的进度。(I1b317、b/271169225、b/276375124、b/276776071、b/270066861)
版本 1.5.0-beta02
2023 年 6 月 7 日
发布了 androidx.compose.material:material-*:1.5.0-beta02
。版本 1.5.0-beta02 中包含这些提交内容。
版本 1.5.0-beta01
2023 年 5 月 24 日
发布了 androidx.compose.material:material-*:1.5.0-beta01
。版本 1.5.0-beta01 中包含这些提交内容。
API 变更
DrawerState
和BottomDrawerState
的偏移不再可为 null。而是返回Float.NaN
来指示没有偏移量。(Ie9855)- 添加了一个选项,用于在构建
DropdownMenu
或ExposedDropdownMenu
时传入ScrollState
,以控制显示的菜单项的垂直滚动状态。(Idb009、b/185304441) - 添加了对启用/停用
ModalBottomSheetLayout
手势的支持,以便用户可以进行配置,以便底部动作条包含更多功能 (I40af0) - 向
BasicText
添加了颜色参数,以便高效地为文本设置动画或颜色。(Iffd88、b/246961787) - 将语义属性
isContainer
重命名为isTraversalGroup
(I121f6)
bug 修复
- 修复了以下问题:当操作堆叠在一起以适应对话框的宽度时,
AlertDialog
关闭操作会显示在确认操作下方。此修复使实现与 Material Design 规范保持一致。I029de、b/235454277
版本 1.5.0-alpha04
2023 年 5 月 10 日
发布了 androidx.compose.material:material-*:1.5.0-alpha04
。版本 1.5.0-alpha04 中包含这些提交内容。
API 变更
- 我们将密度依赖项移至组件级别。这适用于以下组件:
BottomDrawer
、ModalBottomSheetLayout
、BottomSheetScaffold
、Switch
、ModalDrawer
。请使用提供的新重载,其中密度是参数。(I8fbd8)
版本 1.5.0-alpha03
2023 年 4 月 19 日
发布了 androidx.compose.material:material-*:1.5.0-alpha03
。版本 1.5.0-alpha03 中包含这些提交内容。
API 变更
- 更新了
BottomDrawer
内部机制,以使用新的SwipeableV2
API。因此,BottomDrawerState
现在将仅在类级别定义 API,而不会从SwipeableState
继承方法/属性。我们将组合与内部SwipeableV2State
搭配使用。偏移量现在是一个可为 null 的浮点值属性,您仍然可以通过 currentValue 和 targetValue 属性访问当前值和滑动目标值。之前的类级方法(例如“打开”“展开”“关闭”)和属性(例如isOpen/isClosed
)仍受支持。(Iad40c、b/178529942、b/220676296)
bug 修复
- 更新了 Switch 组件的内部结构。现在,开关在拖动时会预览最接近的状态(目标状态)。(Id90d4)
BottomSheetScaffold
中的动画工作表内容(例如工作表内容上的Modifier.animateContentSize
)已得到优化,现在可以顺畅运行。(Ia913c、b/270518202、b/254446195)- 当
gesturesEnabled
设置为false
时,BottomSheetScaffold
将不再参与嵌套滚动。(I634f3、b/215403277)
版本 1.5.0-alpha02
2023 年 4 月 5 日
发布了 androidx.compose.material:material-*:1.5.0-alpha02
。版本 1.5.0-alpha02 中包含这些提交内容。
bug 修复
- 修复了以下 bug:如果为槽提供空内容,
BottomSheetScaffold
会崩溃。(Ib24a5、b/235588730) - 修复了
PullRefreshIndicator
拦截点击 / 指针事件的问题 (2494256、b/271777421)
版本 1.5.0-alpha01
2023 年 3 月 22 日
发布了 androidx.compose.material:material-*:1.5.0-alpha01
。版本 1.5.0-alpha01 中包含这些提交内容。
bug 修复
- 添加了 chipgroup 回流示例。更新了单行条状标签组示例中子条状标签之间的水平内边距,使其符合规范。I3b155
- 修复了在屏幕方向发生变化时
ModalBottomSheetLayout
会在极端情况下崩溃的问题。现在,工作表内容中的布局动画(例如Modifier.animateContentSize
)可以顺畅运行。(I2f981、b/266780234)
版本 1.4
版本 1.4.3
2023 年 5 月 3 日
发布了 androidx.compose.material:material-*:1.4.3
,该版本没有任何变化(仅升级了版本)。
版本 1.4.2
2023 年 4 月 19 日
发布了 androidx.compose.material:material-*:1.4.2
。版本 1.4.2 中包含这些提交内容。
版本 1.4.1
2023 年 4 月 5 日
发布了 androidx.compose.material:material-*:1.4.1
。版本 1.4.1 中包含这些提交内容。
版本 1.4.0
2023 年 3 月 22 日
发布了 androidx.compose.material:material-*:1.4.0
。版本 1.4.0 中包含这些提交内容。
自 1.3.0 以来的重要变更
API 变更
- 添加了
Modifier.minimumInteractiveComponentSize
。它可用于预留至少 48dp 的大小,以便在元素尺寸较小时消除触摸交互的歧义。(I33f58、b/258495559) - 在
ModalDrawer
中纳入了 Swipeable API 的更改。DrawerState
的animateTo
已替换为“open”和“close”方法,偏移现在可为 null。使用requireOffset
要求偏移。(I3de9e) - 在 Material 和 Material3 Text、
TextField
和OutlinedTextField
中添加了minLines
参数,从而能够根据行数设置组件的最小高度 (I4af1d) - 向
BasicText
和BasicTextField
添加了minLines
参数。它允许根据行数设置这些可组合项的最小高度(I24294、b/122476634)
版本 1.4.0-rc01
2023 年 3 月 8 日
发布了 androidx.compose.material:material-*:1.4.0-rc01
,该版本没有任何变化。版本 1.4.0-rc01 中包含这些提交内容。
版本 1.4.0-beta02
2023 年 2 月 22 日
发布了 androidx.compose.material:material-*:1.4.0-beta02
。版本 1.4.0-beta02 中包含这些提交内容。
API 变更
- 在
BottomSheetScaffold
中纳入了 Swipeable API 的更改。BottomSheetState
的confirmStateChange
参数已重命名为confirmValueChange
。progress
现在以浮点值的形式公开。animateTo
和snapTo
是内部方法。改用expand()
和collapse()
。移除了direction
和overflow
。offset
已替换为requireOffset()
。(I323b4)
bug 修复
- 从可点击和可选择的 Surface 中移除了语义角色,更新了通过它们使用 modifier.semantics 设置角色的组件 (Ibb4ba)
- 对扩展后的 Material 图标进行了细微更新,调整了填充的
desktop_mac
、directions
和kitchen
图标。(I65f5e)
版本 1.4.0-beta01
2023 年 2 月 8 日
发布了 androidx.compose.material:material-*:1.4.0-beta01
。版本 1.4.0-beta01 中包含这些提交内容。
API 变更
- 修复了
pullRefresh
没有使用速度,从而导致出现滚动回弹的问题。此外,还更改了Modifier.pullRefresh
中onRelease
lambda 的 API 签名,以针对使用的速度返回浮点数(I7db65、b/266874741) - 恢复了属性 getter
LocalMinimuTouchTargetEnforcement
,然后将其标记为已废弃并重定向到LocalMinimumInteractiveComponentEnforcement
。(I60dd5)
版本 1.4.0-alpha05
2023 年 1 月 25 日
发布了 androidx.compose.material:material-*:1.4.0-alpha05
。版本 1.4.0-alpha05 中包含这些提交内容。
bug 修复
- 修复了以下问题:
ModalBottomSheetLayout's HalfExpanded
状态的计算不正确,且动作条看起来像是悬浮的。(I8c615、b/265610459) - 修复了
ModalBottomSheetLayout
中的 bug:在某些情况下,动作条从隐藏状态变为可见状态时会崩溃。(Ia9265、b/265444789)
版本 1.4.0-alpha04
2023 年 1 月 11 日
发布了 androidx.compose.material:material-*:1.4.0-alpha04
。版本 1.4.0-alpha04 中包含这些提交内容。
API 变更
- 在 Surface 上添加了
IsContainer
语义属性。此属性将在稍后的更改中使用,它会根据 Surface 等元素的语义含义确定遍历顺序。(I63379) - 将抽屉式导航栏中的
snapTo
函数标记为非实验性 API。(Ib9c18、b/261425368) - 为圆形进度指示器添加了轨迹颜色参数,并为圆形和线性进度指示器添加了描边上限参数。(Ie668c、b/216325962、b/222964817)
- 已将
ModalBottomSheetState
、ModalBottomSheetState.Saver
和rememberModalBottomSheetState
的confirmStateChange
重命名为confirmValueChange
。(Ib48d1) - 更多已废弃隐藏函数的返回值类型可为 null (Ibf7b0)
- 添加了
Modifier.minimumInteractiveComponentSize
。它可用于预留至少 48dp 的大小,以便在元素尺寸较小时消除触摸交互的歧义。(I33f58、b/258495559) - 在
ModalBottomSheetLayout
中纳入了 Swipeable API 的更改。ModalBottomSheetState
的animateTo
不再接受animationSpec
参数,并且公开的offset
现在可为 null。使用requireOffset
要求offset
。(Ia2e79)
bug 修复
- 现在,
ModalBottomSheetLayout
工作表的最大宽度为 640 dp。(I71a4f、b/234927577) - 修复了随着时间的推移
rememberPullRefreshState
没有更新refreshThreshold
和refreshingOffset
的问题。(Ifed10、b/263159832) - 进度指示器的进度现已正确限定到预期范围。(I8a7eb、b/262262727)
- 如果
ModalBottomSheetState
尚未收到任何锚点,则会在调用snapTo
或animateTo
时更新currentValue
而不显示动画,而不是抛出异常。(I2c91b) - 修复了 Material 2
FilterChip
实现中的启用状态。(Id326a、b/261329817) - 修复了在从竖屏旋转为横屏时,如果
ModalBottomSheetLayout
为HalfExpanded
会发生崩溃的 bug。请确保您传入正确的initialValue
,例如通过检查配置进行确认。(Ie8df7、b/182882364) - 修复了工作表内容为空时
ModalBottomSheetLayout
发生崩溃的问题。ModalBottomSheetLayout
现在允许工作表内容为空。如果工作表内容为空,则只能处于隐藏状态。(Ic2288、b/200980998、b/216693030)
已知问题
- 从
androidx.compose.foundation:1.4.0-alpha03
更新为androidx.compose.foundation:1.4.0-alpha04
时,您可能会遇到java.lang.NoSuchFieldError
错误。您可以在此处查看最初报告的问题。修复程序已提交,将在下一个 Compose 更新中发布。若要解决此问题,请将您的androidx.compose.material
和androidx.compose.material3
库更新到最新版本 (1.1.0-alpha04) 或将您的androidx.compose.foundation
降级到 1.4.0-alpha03。
版本 1.4.0-alpha03
2022 年 12 月 7 日
发布了 androidx.compose.material:material-*:1.4.0-alpha03
。版本 1.4.0-alpha03 中包含这些提交内容。
API 变更
- 添加了
@JvmDefaultWithCompatibility
注解 (I8f206) - 在
ModalDrawer
中纳入了Swipeable
API 的更改。DrawerState
的animateTo
已替换为open
和close
方法,偏移现在可为 null。使用requireOffset
要求偏移。(I3de9e) - 添加了 Modifier API,用于查询祖先实体滚动信息。(I2ba9d、b/203141462)
- 在手势可以变为滚动事件时,用于在
Clickable
中正确延迟按下互动。 - 修复了在
Scrollable ViewGroup
内使用时Clickables
无法正确延迟涟漪效果的问题。 - 更新了抽屉式导航栏和动作条,以便在手势可变为滚动事件时正确延迟按下操作。
bug 修复
- 修复了以下问题:如果刷新状态未更改为 true,在调用
onRefresh
后,PullRefreshIndicator
可能会卡住。(Ie2416、b/248274004)
依赖项更新
- 现在,Compose UI 和 Compose Material 依赖于 Lifecycle 2.5.1。(I05ab0、b/258038814)
版本 1.4.0-alpha02
2022 年 11 月 9 日
发布了 androidx.compose.material:material-*:1.4.0-alpha02
。版本 1.4.0-alpha02 中包含这些提交内容。
API 变更
awaitFirstDown
和waitForUpOrCancellation
现在可接受PointerEventPass
,增加了灵活性。(I7579a、b/212091796)- 在 Material 和 Material3 Text、
TextField
和OutlinedTextField
中添加了minLines
参数,从而能够根据行数设置组件的最小高度 (I4af1d) - 向
BasicTex
t 和BasicTextField
添加了minLines
参数。它允许根据行数设置这些可组合项的最小高度(I24294、b/122476634)
版本 1.4.0-alpha01
2022 年 10 月 24 日
发布了 androidx.compose.material:material-*:1.4.0-alpha01
。版本 1.4.0-alpha01 中包含这些提交内容。
API 变更
- 为手势检测器添加了新方法
awaitEachGesture()
。其运行方式与forEachGesture()
类似,但手势循环完全在AwaitPointerEventScope
内运行,因此在迭代之间不会丢失事件。 - 废弃了
forEachGesture()
(因为它无法避免在手势的间隔期间丢失事件),取而代之的是awaitEachGesture()
。(Iffc3f、b/251260206)
版本 1.3
版本 1.3.1
2022 年 11 月 9 日
发布了 androidx.compose.material:material-*:1.3.1
。版本 1.3.1 中包含这些提交内容。
版本 1.3.0
2022 年 10 月 24 日
发布了 androidx.compose.material:material-*:1.3.0
。版本 1.3.0 中包含这些提交内容。
自 1.2.0 以来的重要变更
行为破坏性变更
- 对话框和弹出式窗口中支持的最大高度已降低至 8dp。
API 变更
版本 1.3.0-rc01
2022 年 10 月 5 日
发布了 androidx.compose.material:material-*:1.3.0-rc01
。版本 1.3.0-rc01 中包含这些提交内容。
版本 1.3.0-beta03
2022 年 9 月 21 日
发布了 androidx.compose.material:material-*:1.3.0-beta03
。版本 1.3.0-beta03 中包含这些提交内容。
API 变更
- 向 Compose 添加了 Pull-To-Refresh 组件 (I29168)
版本 1.3.0-beta02
2022 年 9 月 7 日
发布了 androidx.compose.material:material-*:1.3.0-beta02
。版本 1.3.0-beta02 中包含这些提交内容。
自 1.3.0-beta01 以来没有任何更改
版本 1.3.0-beta01
2022 年 8 月 24 日
发布了 androidx.compose.material:material-*:1.3.0-beta01
。版本 1.3.0-beta01 中包含这些提交内容。
行为破坏性变更
对话框和弹出式窗口中支持的最大高度已降低至 8dp。
Compose 对话框和弹出式窗口支持的最大高度已从 30dp 降低至 8dp。此变更会影响 Material 和界面自定义对话框以及弹出式窗口。此变更是为了缓解低于 Android S 的版本中存在的无障碍功能 bug,以及确保这些窗口中的无障碍服务能够与对话框或弹出式窗口中的内容互动。
只有当您要创建的自定义对话框或弹出式窗口实现的高度设置为高于 8dp 的水平时,您才会受此变更的影响。请考虑降低对话框或弹出式窗口的高度。如果您需要选择停用此新行为,可以考虑使用所需的高度设置创建您自己的对话框或弹出式窗口分支。不建议这样做,因为无障碍功能可能会受到负面影响,并且开发者需要确保无障碍服务可以对相应对话框或弹出式窗口的底部进行互动和读取。
版本 1.3.0-alpha03
2022 年 8 月 10 日
发布了 androidx.compose.material:material-*:1.3.0-alpha03
。版本 1.3.0-alpha03 中包含这些提交内容。
版本 1.3.0-alpha02
2022 年 7 月 27 日
发布了 androidx.compose.material:material-*:1.3.0-alpha02
。版本 1.3.0-alpha02 中包含这些提交内容。
外部贡献
- 修复了 Scaffold 中
FloatingActionButton
存在的AnimatedVisibility
问题(I3a0ae、b/224005027)
版本 1.3.0-alpha01
2022 年 6 月 29 日
发布了 androidx.compose.material:material-*:1.3.0-alpha01
。版本 1.3.0-alpha01 中包含这些提交内容。
API 变更
- 将
RangeSlider
中的参数名称从 values 更改为 value (I3b79a)
bug 修复
- 更新了标记示例以提供更有意义的内容说明。(I10b9d)
版本 1.2
版本 1.2.1
2022 年 8 月 10 日
发布了 androidx.compose.material:material-*:1.2.1
。版本 1.2.1 中包含这些提交内容。
版本 1.2.0
2022 年 7 月 27 日
发布了 androidx.compose.material:material-*:1.2.0
。版本 1.2.0 中包含这些提交内容。
版本 1.2.0-rc03
2022 年 6 月 29 日
发布了 androidx.compose.material:material-*:1.2.0-rc03
。版本 1.2.0-rc03 中包含这些提交内容。
- 自 1.2.0-rc02 以来没有任何变化。
版本 1.2.0-rc02
2022 年 6 月 22 日
发布了 androidx.compose.material:material-*:1.2.0-rc02
。版本 1.2.0-rc02 中包含这些提交内容。
版本 1.2.0-rc01
2022 年 6 月 15 日
发布了 androidx.compose.material:material-*:1.2.0-rc01
。版本 1.2.0-rc01 中包含这些提交内容。
API 变更
- Compose 库中的接口现在使用 jdk8 默认接口方法构建 (I5bcf1)
bug 修复
- 更新了带有前置图标标签页的标志,以便将标志附加到相应标签(而非图标)。(I90993)
版本 1.2.0-beta03
2022 年 6 月 1 日
发布了 androidx.compose.material:material-*:1.2.0-beta03
。版本 1.2.0-beta03 中包含这些提交内容。
bug 修复
- 修复了
BottomSheetScaffold
在顶部应用栏的阴影上方绘制的 bug。BottomSheetScaffold
在放置信息提示控件时,现在还会考虑动作条的状态:在收起状态下,信息提示控件会放置在动作条和 FAB 上方;在展开状态下,信息提示控件会固定在动作条底部。(Ia80b5、b/187771422)
版本 1.2.0-beta02
2022 年 5 月 18 日
发布了 androidx.compose.material:material-*:1.2.0-beta02
。版本 1.2.0-beta02 中包含这些提交内容。
版本 1.2.0-beta01
2022 年 5 月 11 日
发布了 androidx.compose.material:material-*:1.2.0-beta01
。版本 1.2.0-beta01 中包含这些提交内容。
新功能
- 这是 1.2 的第一个 Beta 版!
API 变更
- 将
TextFieldDefaults.BorderStroke
可组合项(用于在OutlinedTextField
中绘制边框描边)重命名为TextFieldDefaults.BorderBox
。(I5f295)
版本 1.2.0-alpha08
2022 年 4 月 20 日
发布了 androidx.compose.material:material-*:1.2.0-alpha08
。版本 1.2.0-alpha08 中包含这些提交内容。
API 变更
PointerInputChange
中已废弃部分使用操作(down OR 位置)。您可以借助consume()
完全使用此更改。您可以使用isConsumed
来确定其他人之前是否使用过此更改。PointerInputChange::copy()
现在始终会创建浅层副本。这意味着,在使用完其中一个副本后,将会使用PointerInputChange
的副本。如需创建未绑定的PointerInputChange
,请改用构造函数。(Ie6be4、b/225669674)
版本 1.2.0-alpha07
2022 年 4 月 6 日
发布了 androidx.compose.material:material-*:1.2.0-alpha07
。版本 1.2.0-alpha07 中包含这些提交内容。
版本 1.2.0-alpha06
2022 年 3 月 23 日
发布了 androidx.compose.material:material-*:1.2.0-alpha06
。版本 1.2.0-alpha06 中包含这些提交内容。
API 变更
- 更新了可点击的 Card API,以跟踪 Surface API 的更改 (I56bcb)
- 更新了 Material 2 Surface API,添加了更多过载函数来支持可选择和可切换的 Surface。(Ifcca5)
版本 1.2.0-alpha05
2022 年 3 月 9 日
发布了 androidx.compose.material:material-*:1.2.0-alpha05
。版本 1.2.0-alpha05 中包含这些提交内容。
API 变更
LazyVerticalGrid
和LazyHorizontalGrid
现已稳定。(I307c0)LazyVerticalGrid/LazyHorizontalGrid
和所有相关 API 已移至 .grid 子软件包。请将您的导入代码从 androidx.compose.foundation.lazy 更新为 androidx.compose.foundation.lazy.grid。(I2d446、b/219942574)- 恢复了之前仅依赖于
WindowInsetsControllerCompat
的 View 的变更,再次需要一个 Window,这对于管理某些窗口标志是必需的。废弃了ViewCompat.getWindowInsetsController
,取而代之的是WindowCompat.getInsetsController
,以确保使用正确的 Window(例如,如果 View 位于对话框中)。(I660ae、b/219572936) - 文本:
includeFontPadding
现在默认处于关闭状态。因includeFontPadding=false
导致的字体裁剪问题已得到解决,应该不会发生高大型文字被裁剪的情况。(I31c84、b/171394808) - 新增了
LazyVerticalGrid
API,用于定义交叉轴的大小 (I17723)
版本 1.2.0-alpha04
2022 年 2 月 23 日
发布了 androidx.compose.material:material-*:1.2.0-alpha04
。版本 1.2.0-alpha04 中包含这些提交内容。
API 变更
Add support for filter chips
(I39a6e、b/192585545)- 添加了
TextFieldDecorationBox
和OutlinedTextFieldDecorationBox
。将它们与BasicTextField
结合使用可帮助您根据 Material Design 文本字段构建自定义文本字段,但提供了更多自定义选项。 - 提供了一种调整文本字段内水平和垂直内边距的方式。(I8c9f1、b/203764564、b/191543915、b/189971673、b/183136600、b/179882597、b/168003617)
添加了
ComposableTarget
、ComposableTargetMarker
和ComposableOpenTarget
,以便系统在编译时报告何时以预期使用范围外的 Applier 为目标而调用了某个可组合函数。在大多数情况下,注解可以由 Compose 编译器插件推断出来,因此直接使用这些注解的情况应该很少。无法推断的情况包括创建和使用自定义 applier、抽象可组合函数(例如接口方法)、可组合 lambda 性质的字段或全局变量(推断出局部变量和参数),或者使用
ComposeNode
或相关可组合函数的情况。对于自定义 Applier,调用
ComposeNode
或ReusableComposeNode
的可组合函数需要为该函数和任何可组合 lambda 的参数类型添加CompoableTarget
注解。不过,建议您创建一个带有ComposableTargetMarker
的注解,然后使用带标记的注解,而不是直接使用ComposableTarget
。标有ComposableTargetMarker
的可组合注解等同于用属性类的完全限定名称作为 applier 参数的ComposbleTarget
。如需查看ComposableTargetMarker
使用示例,请参阅anroidx.compose.ui.UiComposable
。(I38f11)
版本 1.2.0-alpha03
2022 年 2 月 9 日
发布了 androidx.compose.material:material-*:1.2.0-alpha03
。版本 1.2.0-alpha03 中包含这些提交内容。
bug 修复
- 添加了贴块组示例(I97080、b/192585545)
版本 1.2.0-alpha02
2022 年 1 月 26 日
发布了 androidx.compose.material:material-*:1.2.0-alpha02
。版本 1.2.0-alpha02 中包含这些提交内容。
API 变更
- 针对无复杂逻辑的现有方法,向其重载的方法添加了
NonRestartableComposable
。对于在所调用内部函数中重复的所有参数,这会减少编译器产生的记忆检查 (equals)。(I90490) - 添加了对操作信息块的支持(I07100、b/192585545)
版本 1.2.0-alpha01
2022 年 1 月 12 日
发布了 androidx.compose.material:material-*:1.2.0-alpha01
。版本 1.2.0-alpha01 中包含这些提交内容。
依赖项更新
- 现在依赖于 Kotlin
1.6.10
。
外部贡献
ModalBottomSheetState
现在具有isSkipHalfExpanded
标记。您可以通过构造函数设置此标记,也可以稍后通过将ModalBottomSheetState
的isSkipHalfExpanded
属性设置为true
来更新此标记。更新isSkipHalfExpanded
的值会导致重绘动作条。(I18b86、b/186669820)
版本 1.1
版本 1.1.1
2022 年 2 月 23 日
发布了 androidx.compose.material:material-*:1.1.1
。版本 1.1.1 中包含这些提交内容。
bug 修复
- 修复了
androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
中的NullPointerException
(aosp/1947059、b/206677462) - 修复了在 Android 上从剪贴板读取内容时剪贴板内容导致的崩溃问题。(I06020、b/197769306)
- 修复了
LazyVerticalGrid
中的 RTL(aosp/1931080、b/207510535)
版本 1.1.0
2022 年 2 月 9 日
发布了 androidx.compose.material:material-*:1.1.0
。版本 1.1.0 中包含这些提交内容。
自 1.0.0 以来的重要变更
- 对 Android 12 滚动效果提供稳定支持
- 改进了触摸目标大小调整
- 请注意,对于 Compose 1.0,Material 组件将扩展其布局空间,以符合 Material 无障碍功能指南对触摸目标尺寸的要求。例如,按钮触摸目标将扩展为至少 48x48dp 的尺寸,即使您将按钮尺寸设为更小也是如此。这会使 Compose Material 与 Material Design 组件的行为保持一致,以便在混合使用 View 和 Compose 时提供一致的行为。此变更还可确保在您使用 Compose Material 组件创建界面时,能够满足触摸目标无障碍功能的最低要求。
- 对导航栏提供稳定支持
- 将之前的一些实验性 API 升级到了稳定版
- 支持更高版本的 Kotlin
版本 1.1.0-rc03
2022 年 1 月 26 日
发布了 androidx.compose.material:material-*:1.1.0-rc03
。版本 1.1.0-rc03 中包含这些提交内容。
行为变更
请注意,对于 Compose 1.0,Material 组件将扩展其布局空间,以符合 Material 无障碍功能指南触摸目标尺寸的要求。例如,按钮触摸目标将扩展为至少 48x48dp 的尺寸,即使您将按钮尺寸设为更小也是如此。这会使 Compose Material 与 Material Design 组件的行为保持一致,以便在混合使用 View 和 Compose 时提供一致的行为。此变更还可确保在您使用 Compose Material 组件创建界面时,能够满足触摸目标无障碍功能的最低要求。
bug 修复
- 在检查最小触摸目标修饰符时,为布局检查器添加了一些更好的调试信息。(aosp/1955036)
版本 1.1.0-rc01
2021 年 12 月 15 日
发布了 androidx.compose.material:material-*:1.1.0-rc01
。版本 1.1.0-rc01 中包含这些提交内容。
bug 修复
- 修复了
Checkbox
中应用的圆角半径(I38b03、b/175198975、b/202309440)
版本 1.1.0-beta04
2021 年 12 月 1 日
发布了 androidx.compose.material:material-*:1.1.0-beta04
。版本 1.1.0-beta04 中包含这些提交内容。
新功能
- 完成更新,现与 Kotlin
1.6.0
兼容
版本 1.1.0-beta03
2021 年 11 月 17 日
发布了 androidx.compose.material:material-*:1.1.0-beta03
。版本 1.1.0-beta03 中包含这些提交内容。
版本 1.1.0-beta02
2021 年 11 月 3 日
发布了 androidx.compose.material:material-*:1.1.0-beta02
。版本 1.1.0-beta02 中包含这些提交内容。
bug 修复
- 现在,涟漪效果和其他指示元素仅在位于 Modifier.scrollable() 容器内时才会延迟,而不是始终都会因按下事件而延迟。(Ibefe0、b/203141462)
版本 1.1.0-beta01
2021 年 10 月 27 日
发布了 androidx.compose.material:material-*:1.1.0-beta01
。版本 1.1.0-beta01 中包含这些提交内容。
新功能
- 涟漪效果现在支持悬停和聚焦状态,因此悬停/聚焦组件(如按钮)现在会显示正确的状态叠加层。
版本 1.1.0-alpha06
2021 年 10 月 13 日
发布了 androidx.compose.material:material-*:1.1.0-alpha06
。版本 1.1.0-alpha06 中包含这些提交内容。
API 变更
- 为布局添加了无子项重载,提高了效率 (Ib0d9a)
ExposedDropdownMenu
的实现,基于内含TextField
和DropdownMenu
的ExposedDropdownMenuBox
(If60b2)- 在
PopupProperties
中添加了dismissOnOutsideClick
,取代了已废弃的dismissOnClickOutside
。新属性会接收点击位置和锚点边界,从而更精细地控制是否应调用 onDismissRequest。例如,这有助于防止在轻触锚点时锚点关闭。- 将
updateAndroidWindowManagerFlags
添加到了PopupProperties
中,从而提供对弹出式窗口传递给 Android WindowManager 的标志的低级控制。lambda 的参数将是根据产生 WindowManager 标志的 PopupProperties 值计算出的标志:例如 focusable。Lambda 的结果将是最终传递给 Android WindowManager 的标志。默认情况下,updateAndroidWindowManagerFlags 会使根据参数计算出的标志保持不变。仅当弹出式窗口具有非常具体的行为要求时,才应谨慎使用此 API。(I6e9f9)
- 将
版本 1.1.0-alpha05
2021 年 9 月 29 日
发布了 androidx.compose.material:material-*:1.1.0-alpha05
。版本 1.1.0-alpha05 中包含这些提交内容。
API 变更
- 针对没有可访问的触摸目标值的 Material 组件,添加了最小触摸目标尺寸。由于这会额外增加组件周围的空间来确保这些组件有足够大的触控目标,如果现有界面假定这些组件的尺寸是其视觉尺寸,而不考虑触摸目标的尺寸,这项变更可能会更改此类现有界面。您可以使用本地的实验性
LocalMinimumTouchTargetEnforcement
组合跨层次结构停用此行为,但这只能作为临时的应急方法,与此同时要更新现有界面以使其将新的最小尺寸纳入考虑范畴。(I9b966、b/149691127、b/171509422) - 添加了实验性 TextFieldColorsWithIcons 接口,对 TextFieldColors 进行了扩展,可以为 leadingColor 和 trailingColor 提供 InteractionSource。这样,您就可以根据焦点状态修改 TextField 的外观。(I66923、b/198402662)
版本 1.1.0-alpha04
2021 年 9 月 15 日
发布了 androidx.compose.material:material-*:1.1.0-alpha04
。版本 1.1.0-alpha04 中包含这些提交内容。
API 变更
- 废弃了
performGesture
和GestureScope
,它们已被performTouchInput
和TouchInjectionScope
取代。(Ia5f3f、b/190493367) - 向
SemanticsNode
中添加了包含最小触摸目标尺寸的touchBoundsInRoot
,以便开发者能够确保触摸目标满足无障碍功能最低要求。(I2e14b、b/197751214)
bug 修复
- 在裁剪时允许将触摸目标边界扩展到裁剪区域之外,以适用最小的触摸目标。(I43e10、b/171509422)
- 更新了
Divider
可组合项,现在支持将Dp.Hairline
用于 thickness 参数,这样无论显示密度是多少,都支持绘制单像素分隔线。(I16ffb、b/196840810)
版本 1.1.0-alpha03
2021 年 9 月 1 日
发布了 androidx.compose.material:material-*:1.1.0-alpha03
。版本 1.1.0-alpha03 中包含这些提交内容。
新功能
- 更新了 Compose
1.1.0-alpha03
,使其依赖于 Kotlin1.5.30
。(I74545)
API 变更
版本 1.1.0-alpha02
2021 年 8 月 18 日
发布了 androidx.compose.material:material-*:1.1.0-alpha02
。版本 1.1.0-alpha02 中包含这些提交内容。
外部贡献
- 修复了滑动偏移量在锚点舍入误差范围内时 SwipeableState 的行为。(I03d39, b/191993377)
版本 1.1.0-alpha01
2021 年 8 月 4 日
发布了 androidx.compose.material:material-*:1.1.0-alpha01
。版本 1.1.0-alpha01 中包含这些提交内容。
API 变更
- 更新了
DrawScope#drawImage
方法,该方法会使用来源和目的地 rect 来使用可选的 FilterQuality 参数。对于想要在针对基于像素的艺术作品扩大时呈现像素化风格的像素艺术作品而言,此变更非常有用。更新了 BitmapPainter + Image 可组合项,使其也使用可选的 FilterQuality 参数(Ie4fb0、b/180311607) - 已将 BadgeBox 重命名为 BadgedBox,更改了相关参数以接受 Badge 可组合项。添加了 Badge 组件,它是 BadgedBox 的典型标记内容。(I639c6)
- 添加了 NavigationRail 组件;请查看相关文档和示例,了解使用信息 (I8de77)
bug 修复
- 添加了底部对齐的 NavigationRail 示例和 Catalog 应用演示。(I3cffc)
- 对话框现在根据平台大小调整行为进行调整。将 usePlatformDefaultWidth 设为 false 可替换此行为。(Iffaed、b/192682388)
- 向目录应用添加了 navigation-rail 演示。(I04960)
- 向目录应用添加了标记演示。(If285d)
版本 1.0
版本 1.0.5
2021 年 11 月 3 日
发布了 androidx.compose.material:material-*:1.0.5
。版本 1.0.5 中包含这些提交内容。
bug 修复
- 修复了跟踪 derivedStateOf 实例时出现的崩溃问题。(aosp/1792247)
版本 1.0.4
2021 年 10 月 13 日
发布了 androidx.compose.material:material-*:1.0.4
。版本 1.0.4 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin
1.5.31
版本 1.0.3
2021 年 9 月 29 日
发布了 androidx.compose.material:material-*:1.0.3
。版本 1.0.3 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin
1.5.30
版本 1.0.2
2021 年 9 月 1 日
发布了 androidx.compose.material:material-*:1.0.2
。版本 1.0.2 中包含这些提交内容。
已更新,可支持 Compose 1.0.2
版本。Compose 1.0.2
仍与 Kotlin 1.5.21
兼容。
版本 1.0.1
2021 年 8 月 4 日
发布了 androidx.compose.material:material-*:1.0.1
。版本 1.0.1 中包含这些提交内容。
依赖项更新
- 已更新为依赖于 Kotlin
1.5.21
。
版本 1.0.0
2021 年 7 月 28 日
发布了 androidx.compose.material:material-*:1.0.0
。版本 1.0.0 中包含这些提交内容。
1.0.0 的主要功能
这是 Compose 的第一个稳定版本。如需了解详情,请参阅官方 Compose 版本发布博客!
已知问题
如果您使用的是 Android Studio Bumblebee Canary 4 或 AGP
7.1.0-alpha04
/7.1.0-alpha05
,可能会遇到以下崩溃问题:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
如需修复此崩溃问题,请暂时将
build.gradle
文件中的 minSdkVersion 提高到 24 及以上。此问题将在下一个版本的 Android Studio Bumblebee 和 AGP7.1
中修复。(b/194289155)
版本 1.0.0-rc02
2021 年 7 月 14 日
发布了 androidx.compose.material:material-*:1.0.0-rc02
。版本 1.0.0-rc02 中包含这些提交内容。
bug 修复
- 对话框现在根据平台大小调整行为进行调整。将
usePlatformDefaultWidth
设为 false 可替换此行为。(Iffaed、b/192682388)
版本 1.0.0-rc01
2021 年 7 月 1 日
发布了 androidx.compose.material:material-*:1.0.0-rc01
。版本 1.0.0-rc01 中包含这些提交内容。
API 变更
- 添加了
BadgeBox
组件;请查看相关文档和示例,了解使用信息(I5e284) PopupProperties
中的useDefaultMaxWidth
已重命名为usePlatformDefaultWidth
。(I05710)- 对话框现在可以使用整个屏幕宽度。(I83929、b/190810877)
- 添加了实验性范围滑块实现 (I2f4b3)
bug 修复
- 为了符合 Material Design 规范,在使用标签作为占位符时,具有无效输入内容的 OutlinedTextField 不再针对标签使用错误颜色。当文本字段中没有输入文本且文本字段未处于聚焦状态时,就不应显示错误颜色。实施这项更改后,
TextFieldColors.labelColor()
函数中error:Boolean
参数的含义也发生了变化:即使在将标签用作占位符且输入内容无效的情况下,该参数仍会返回false
。(I45f78)
版本 1.0.0-beta09
2021 年 6 月 16 日
发布了 androidx.compose.material:material-*:1.0.0-beta09
。版本 1.0.0-beta09 中包含这些提交内容。
API 变更
- 向 OutlinedTextField 添加了 Shape 参数,以便自定义边框的形状(I8f39e、b/181322957)
- TextOverflow 已更改为内联类。(I433af)
bug 修复
- BottomDrawer、BackdropScaffold 和 ModalBottomSheetLayout 中的 Scrim 会消失,然后系统会传递 Color.Unspecified(I2d899、b/182063309)
添加了配置文件规则
此版本向以下 Compose 模块添加了配置文件规则 (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
什么是配置文件规则?
库的配置文件规则是在位于
src/main
或等效目录内的文本文件baseline-prof.txt
中指定的。该文件会每行指定一个规则,在此情况下,规则是指用于与库中的方法或类匹配的格式。这些规则的语法是使用adb shell profman --dump-classes-and-methods ...
时所用的便于用户看懂的 ART 配置文件格式的超集。这些规则采用两种形式,一种用于方法,一种用于类。方法规则采用以下格式:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
类规则采用以下格式:
<CLASS_DESCRIPTOR>
其中,
<FLAGS>
是H
、S
和P
中的一个或多个字符,用于指示相应方法应标记为“Hot”“Startup”还是“Post Startup”。<CLASS_DESCRIPTOR>
是目标方法所属类的描述符。例如,类androidx.compose.runtime.SlotTable
的描述符为Landroidx/compose/runtime/SlotTable;
。<METHOD_SIGNATURE>
是方法的签名,其中包含方法的名称、参数类型和返回值类型。例如,LayoutNode
中的fun isPlaced(): Boolean
方法具有签名isPlaced()Z
。这些格式可以包含通配符(
**
、*
和?
),以便让单个规则能够涵盖多个方法或类。
规则的作用是什么?
如果某个方法具有
H
标志,则表示该方法为“hot”方法,应提前进行编译。如果某个方法具有
S
标志,则表示系统会在启动时调用该方法,应提前进行编译,以避免在启动时耗费资源进行编译以及解析该方法。如果某个方法具有
P
标志,则表示系统会在启动后调用该方法。如果某个类出现在此文件中,则表示系统会在启动过程中使用该类,应在堆中预先分配该类,以避免耗费资源来加载它。
运作方式
- 库可以定义要打包到 AAR 制品中的那些规则。如果事后构建了某个 APK,并且其中包含这些制品,系统会将这些规则合并在一起,并使用合并后的规则来构建特定于该 APK 的紧凑二进制 ART 配置文件。然后,当设备安装该 APK 后,ART 就可以利用此配置文件,以便预先编译应用的特定部分,从而提升应用性能(特别是首次运行时的性能)。请注意,这对可调试应用没有任何影响。
版本 1.0.0-beta08
2021 年 6 月 2 日
发布了 androidx.compose.material:material-*:1.0.0-beta08
。版本 1.0.0-beta08 中包含这些提交内容。
新功能
Behavior Breaking API 变更
- BEHAVIOUR-BREAKING:Card 现在会消耗点击,使通过
Card(Modifier.clickable)
添加的点击成为空操作。请对接受 onClick 的 Card 使用新的实验性过载。(Ia8744、b/183775620)- 添加了新 Card 重载,可用于处理点击和其他可点击功能:指示、interactionSource、已启用/已停用。无法将常规的不可点击的 Card 与
Modifier.clickable
搭配使用,因为在这类情况下 Card 不会裁剪涟漪指示。
- 添加了新 Card 重载,可用于处理点击和其他可点击功能:指示、interactionSource、已启用/已停用。无法将常规的不可点击的 Card 与
- BEHAVIOUR-BREAKING:Surface 现在会消耗点击,使通过
Surface(Modifier.clickable)
添加的点击成为空操作。请对接受 onClick 的 Surface 使用新的实验性过载。(I73e6c、b/183775620)- 添加了新 Surface 重载,可用于处理点击和其他可点击功能:指示、interactionSource、已启用/已停用。无法将常规的不可点击的 Surface 与
Modifier.clickable
搭配使用,因为在这些情况下 Surface 不会裁剪涟漪指示。
- 添加了新 Surface 重载,可用于处理点击和其他可点击功能:指示、interactionSource、已启用/已停用。无法将常规的不可点击的 Surface 与
API 变更
FabPosition
从枚举转换为内联类,以支持今后潜在的扩展 (I030fb)- 将一些枚举使用情况重构成了内联类,以免在添加新枚举值时 when 语句出现穷举语问题。(I2b5eb)
- 向可点击/可切换状态的内容中添加了点按超时设置,以免在滚动/拖动时呈现涟漪效果(Ia2704、b/168524931)
- ContentDescription 和 Text 语义属性不再是单个值,而是列表。这样一来,它们便可原样合并而无需串联。还提供了更好的测试 API 来支持这些更改(Ica6bf、b/184825850)
- 废弃了
Modifier.focusModifier()
,由Modifier.focusTarget()
取代 (I6c860) - 将
FocusState
枚举替换成了FocusState
接口(Iccc1a、b/187055290) - 由于基于 View 的涟漪效果实现已稳定,因此移除了
LocalRippleNativeRendering
(I7fab3、b/188569367)
bug 修复
- 更改了
Modifier.onGloballyPositioned()
;更改后,系统会报告此修饰符在修饰符链中的坐标,而不会报告在应用所有修饰符后的布局坐标。这意味着,修饰符的顺序现在会影响系统报告什么坐标。(Ieb67d、b/177926591) - 为现有 Compose Material 目录添加了 README。(If9191)
版本 1.0.0-beta07
2021 年 5 月 18 日
发布了 androidx.compose.material:material-*:1.0.0-beta07
。版本 1.0.0-beta07 中包含这些提交内容。
API 变更
- 您不再需要使用扩展方法才能在 Navigation Compose 中获得路线支持。(I22beb、b/172823546)
版本 1.0.0-beta06
2021 年 5 月 5 日
发布了 androidx.compose.material:material-*:1.0.0-beta06
。版本 1.0.0-beta06 中包含这些提交内容。
API 变更
- 涟漪效果已转变为在 Android 设备内部使用
RippleDrawable
。这意味着涟漪动画将在 RenderThread 上进行,因此即使界面线程处于负载状态(例如切换屏幕时),也会很流畅。这不会更改涟漪效果的 API 表面,但此变更可能会导致其行为有所变化。为了支持这种转变,添加了LocalRippleNativeRendering
- 它为此 CompositionLocal 提供false
值,用以回退到 CompositionLocalProvider 中的旧版涟漪效果实现。此 API 是临时性的,日后将被移除。如果您遇到致使您使用此 API 的问题,请提交 bug。(I902f8、b/168777351、b/183019123) - 添加了 CollectionInfo 和 CollectionItemInfo 无障碍功能 API,用于针对无障碍服务标记集合及其项(Id54ef、b/180479017)
- 添加了无障碍功能 API
error
,用于标记包含无效输入的节点(I12997、b/180584804、b/182142737)
bug 修复
- 从以下地址更新了 Compose Material 目录边衬区实现:https://github.com/google/accompanist/pull/365。(I25dc3)
- 具有权重 (fill = false) 的行和列的子项不再使父项填充整个可用的主轴空间。(Ied94d、b/186012444、b/184355105)
版本 1.0.0-beta05
2021 年 4 月 21 日
发布了 androidx.compose.material:material-*:1.0.0-beta05
。版本 1.0.0-beta05 中包含这些提交内容。
bug 修复
- 将组件图块图像、主题选择器和更具体的菜单网址添加到了现有的 Compose Material 目录中。(I9b58e)
版本 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)
bug 修复
- 向现有模块添加了 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)
bug 修复
- 对实验性 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/175294473)
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)
bug 修复
- 添加了新的 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,以并行使用 VectorPainter。(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 和 pressIndicaitonGestureFilter,改为将 Modifier.clickable 或 Modifier.pointerInput 与 detectTapGestures 函数一起使用。(I6baf9、b/175294473)
已将 layoutDirection 参数添加到 Shape 的 createOutline 中。这样便可支持创建布局方向感知形状。(I57c20、b/152756983)
移除了
Recomposer.current()
。[Abstract]ComposeView 现在默认设置为延迟创建的、作用域为窗口的 Recomposer(由窗口的 ViewTreeLifecycleOwner 驱动)。在主机生命周期结束时,系统会暂停重组和基于 withFrameNanos 的动画 tick 操作。(I38e11)
bug 修复
- 现在,图标将根据所应用的尺寸修饰符缩放到适合它的大小。例如,
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)
bug 修复
- 废弃了 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
并定义setContent
(已从ComposeTestRule
中移除)。添加了工厂方法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 的 bug (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/171464963)- 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)
bug 修复
- 添加了对已停用和只读文本字段的支持(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)
bug 修复
- 现在,offset 修饰符中的 lambda 会返回 IntOffset(而非 Float)。(Ic9ee5、b/174137212、b/174146755)
重构了 ShaderBrush,以便在绘制环境的大小信息可用时延迟创建着色器实例。如需定义在组合时可占满可组合项的整个绘制边界的渐变,而无需实现自定义 DrawModifier 实现,这非常有用。
废弃了渐变函数构造函数 API,取而代之的是 Gradient 对象中的工厂方法。(I511fc、b/173066799)
废弃了 Modifier.focusObserver,改为使用 Modifier.onFocusChanged 或 Modifier.onFocusEvent(I30f17、b/168511863、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 的类型别名,用于关联到 compat 的 ImageVector.Builder。(Icfdc8)
- 已将 ImageAsset 及相关方法重命名为 ImageBitmap。(Ia2d99)
- 将 foundation 语义属性移到了 ui (I6f05c)
- 为与其他 API 保持一致,废弃了
fun RippleIndication()
,取而代之的是rememberRippleIndication()
。(Id8e2c) - 已将 singeLine 参数添加到 BasicTextField、TextField 和 OutlinedTextField 中。将此参数设为 true 会使文本字段成为可水平滚动的单行。(I57004、b/168187755)
bug 修复
- 添加了语义操作 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 使用。
- 已将
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/172239032)
- 添加了新的
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)
bug 修复
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)
bug 修复
- 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)
bug 修复
- 在对内联类的标记值进行标准化的过程中,将 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/168025711、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)
bug 修复
- 更新了多个图形 API
- 更新了缩放和旋转的转换 API,现在使用单个 Offset 参数来表示数据透视坐标,不再对 DrawScope 和 DrawTransform 中的 x/y 坐标使用单独的浮点数参数
- 移除了 Rect.expandToInclude 和 Rect.join 方法
- 更新了 Radius 文档,除了介绍 elliptical(椭圆形)之外,还介绍了 oval(卵形)
- 添加了相关文档,指明不能直接调用内联 Radius 类的公共构造函数,而应通过对应的函数构造函数对 Radius 对象进行实例化
- 移除了用于查询 topRight、bottomRight、bottomCenter 等的 RoundRect API
- 废弃了 Rect.shift,取而代之的是 Rect.translate
- 移除了 RoundRect.grow API 和 Rect.shrink API
- RoundRect.outerRect 已重命名为 Rect.boundingRect
- 移除了 RoundRect.middleRect/tallMiddleRect/wideMiddleRect 和 Rect.isStadium 方法
- RoundRect.longestSide 已重命名为 RoundRect.maxDimension
- RoundRect.shortestSide 已重命名为 RoundRect.minDimension
- 将 RoundRect.center 从函数变更为了属性
- 更新了 RoundRect 构造函数,现在使用 Radius 属性,不再使用针对 x/y 半径值的单独参数
- 移除了假定对象是原点为 0,0 的 Rectangle 的 Size API
- 在 Radius 中添加了一个销毁 API
- 已改为将各种 RoundRect 扩展函数迁移为属性
- (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)
bug 修复
- 全局测试函数(例如
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)
bug 修复
- 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)
bug 修复
- 移除了
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)
bug 修复
- 已废弃 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 子组合以移除对是否相等所做的多余的条件检查,因为 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 中添加了阈值参数,以指定锚点之间的阈值。这可用于设置底部抽屉式导航栏中的 56 dp 阈值。此外,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)
bug 修复
- 废弃了 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)
修复了无法针对 DropdonMenuItems 调用 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)
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)