Compose Material
| 最新更新 | 稳定版 | 候选版本 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| 2025 年 6 月 4 日 | 1.8.2 | - | - | 1.9.0-alpha04 |
结构
Compose 是 androidx 中 7 个 Maven Group ID 的组合。每个组都包含一个有针对性的功能子集,每个子集都有自己的一组版本说明。
此表解释了这些组并链接到每组版本说明。
| 组 | 描述 |
|---|---|
| compose.animation | 在 Jetpack Compose 应用中构建动画以丰富用户体验。 |
| compose.compiler | 使用 Kotlin 编译器插件转换 @Composable 函数并启用优化。 |
| compose.foundation | 使用即用型构建块编写 Jetpack Compose 应用,并扩展基础以构建你自己的设计系统组件。 |
| compose.material | 使用即用型 Material Design 组件构建 Jetpack Compose 界面。这是 Compose 的更高级入口点,旨在提供与 www.material.io 中描述的组件相匹配的组件。 |
| compose.material3 | 使用 Material Design 3 组件(Material Design 的下一次演进)构建 Jetpack Compose 界面。Material 3 包含更新的主题和组件以及 Material You 个性化功能(例如动态颜色),旨在与新的 Android 12 视觉样式和系统界面保持一致。 |
| compose.runtime | Compose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的核心运行时。 |
| compose.ui | 与设备交互所需的 Compose 界面基本组件,包括布局、绘图和输入。 |
声明依赖项
要添加 Compose 的依赖项,你必须将 Google Maven 仓库添加到你的项目中。有关详情,请阅读Google 的 Maven 仓库。
在你应用或模块的 build.gradle 文件中添加你所需工件的依赖项
Groovy
dependencies { implementation "androidx.compose.material:material:1.8.2" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.material:material:1.8.2") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
你的反馈有助于 Jetpack 变得更好。如果你发现新问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中的现有问题。你可以通过点击星标按钮为你感兴趣的现有问题投上一票。
有关详情,请参阅问题跟踪器文档。
版本 1.9
版本 1.9.0-alpha04
2025 年 6 月 4 日
androidx.compose.material:material-*:1.9.0-alpha04 已发布。版本 1.9.0-alpha04 包含这些提交。
版本 1.9.0-alpha03
2025 年 5 月 20 日
androidx.compose.material:material-*:1.9.0-alpha03 已发布。版本 1.9.0-alpha03 包含这些提交。
版本 1.9.0-alpha02
2025 年 5 月 7 日
androidx.compose.material:material-*:1.9.0-alpha02 已发布。版本 1.9.0-alpha02 包含这些提交。
版本 1.9.0-alpha01
2025 年 4 月 23 日
androidx.compose.material:material-*:1.9.0-alpha01 已发布。版本 1.9.0-alpha01 包含这些提交。
行为变更
- Compose 随附的 Lint 检查现在要求最低 AGP 版本为 8.8.2。如果无法升级 AGP,你可以在
gradle.properties中使用android.experimental.lint.version=8.8.2(或更高版本)单独升级 Lint。要在 IDE 中运行 Compose lint 检查,需要 Android Studio Ladybug 或更高版本。
API 变更
- 使用 Kotlin 2.0 发布的项目需要 KGP 2.0.0 或更高版本才能使用。 (Idb6b5)
- 文本字段装饰框 API 不再是实验性的 (I7480f, b/269651160)
- 弃用
runWithTimingDisabled,转而使用runWithMeasurementDisabled,后者更清楚地描述了行为 - 所有指标都已暂停。此外,公开MicrobenchmarkScope超类,因为重新声明runWithMeasurementDisabled函数以开放访问是不可能的,因为它是一个内联函数。 (I9e23b, b/389149423, b/149979716)
Bug 修复
ExposedDropdownMenu与旧版本二进制兼容。 (I133f7)- 修复了当传入
Float.NaN作为进度时,进度和加载指示器崩溃的问题。 (I4fa96, b/352364576)
版本 1.8
版本 1.8.2
2025 年 5 月 20 日
androidx.compose.material:material-*:1.8.2 已发布。版本 1.8.2 包含这些提交。
版本 1.8.1
2025 年 5 月 7 日
androidx.compose.material:material-*:1.8.1 已发布。自 1.7.6 起无任何更改。
版本 1.8.0
2025 年 4 月 23 日
androidx.compose.material:material-*:1.8.0 已发布。版本 1.8.0 包含这些提交。
版本 1.8.0-rc03
2025 年 4 月 9 日
androidx.compose.material:material-*:1.8.0-rc03 已发布。版本 1.8.0-rc03 包含这些提交。
版本 1.8.0-rc02
2025 年 3 月 26 日
androidx.compose.material:material-*:1.8.0-rc02 已发布。版本 1.8.0-rc02 包含这些提交。
版本 1.8.0-rc01
2025 年 3 月 12 日
androidx.compose.material:material-*:1.8.0-rc01 已发布。版本 1.8.0-rc01 包含这些提交。
版本 1.8.0-beta03
2025 年 2 月 26 日
androidx.compose.material:material-*:1.8.0-beta03 已发布。版本 1.8.0-beta03 包含这些提交。
版本 1.8.0-beta02
2025 年 2 月 12 日
androidx.compose.material:material-*:1.8.0-beta02 已发布。版本 1.8.0-beta02 包含这些提交。
版本 1.8.0-beta01
2025 年 1 月 29 日
androidx.compose.material:material-*:1.8.0-beta01 已发布。版本 1.8.0-beta01 包含这些提交。
版本 1.8.0-alpha08
2025 年 1 月 15 日
androidx.compose.material:material-*:1.8.0-alpha08 已发布。版本 1.8.0-alpha08 包含这些提交。
Bug 修复
- 将
displayCutout添加到 Material 组件默认考虑的插入组中,以避免内容与显示屏挖孔重叠。- 这是一个行为变更,将影响支持插入的组件在显示屏挖孔周围的行为。这包括支持插入的 Material 3 组件的
WindowInsets参数的默认值,以及组件中提供的WindowInsets值。 - Material 2 和 Material 3 的默认对象。如果此更改导致意外行为,请手动指定每个组件的
WindowInsets参数。 (I43ee9, b/362508045)
- 这是一个行为变更,将影响支持插入的组件在显示屏挖孔周围的行为。这包括支持插入的 Material 3 组件的
- 当使用
ComposeContentTestRule.setContent时,用作测试可组合组件宿主的 Activity 现在使用主题Theme.Material.Light.NoActionBar,以避免在面向 SDK 35 时ActionBar与测试内容重叠。要选择退出此行为,可以移除对ui-test-manifest的依赖项,并在测试应用的AndroidManifest.xml中为ComponentActivity添加一个 Activity 条目,并使用你选择的主题。 (I7ae1b, b/383368165)
外部贡献
- 在
ModalBottomSheetLayout中公开sheetGesturesEnabled。 (I3f032, b/329543529)
版本 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 Slider 在按下控制键时更改其值。 (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构建器,用于在使用Navigation Compose时创建带有安全参数的底部工作表 ((I28589, I777db, b/351858980)) - 添加了新的
TextField和OutlinedTextField重载,它们接受TextFieldState(I3b74c)
版本 1.7
版本 1.7.8
2025 年 2 月 12 日
androidx.compose.material:material-*:1.7.8 已发布。版本 1.7.8 包含这些提交。
版本 1.7.7
2025 年 1 月 29 日
androidx.compose.material:material-*:1.7.7 已发布。与 1.7.6 无任何更改。
版本 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和标准 Bottomsheet 已升级到稳定 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 变更
- 更新了获取文本中 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已变为可空。要禁用波纹,请向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和解析应用MaterialTheme到链接的 HTML 标记字符串的方法。 (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规范。BackdropScaffold的snackbarHost参数不再是最后一个参数,以避免与尾随 lambda 混淆。BackdropScaffoldState公开了一个progress(from, to)API,用于查询锚点之间的进度。 (I73f48, b/261423218)- 标准底部工作表已从实验性升级到稳定版。已移除已弃用的构造函数。动画规范现在是符合准则的 tween 规范。 (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 变更
已弃用 material-ripple 中的
rememberRipple和RippleTheme,并向 material 和其他设计系统库添加了新的波纹和RippleConfigurationAPI。以前接受
MutableInteractionSource并默认设置为记住{ MutableInteractionSource() }的 Material 组件现在接受可为空的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 修复
- 修复了某些使用
Subcomposition(例如BottomSheetScaffold)在LookaheadScope内的 Scaffold 内部,过早尝试读取其大小的问题。 (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添加了新的起始对齐方式 (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,并且已将显式lineHeight(以 sp 为单位)添加到Typography的TextStyle中。如果要自定义这些值,请查阅API 文档,并参阅博客文章,以深入了解这些更改。 (Icabc3, I3f801, I04c03)
API 变更
- Material 的
SwipeableAPI 已弃用。请参考 Foundation 的AnchoredDraggableAPI,这些 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 - 将 Drawer 中的
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中 Swipeable API 的更改。DrawerState的animateTo已被 open 和 close 方法替换,并且偏移量现在可为空。使用requireOffset来要求偏移量。 (I3de9e) - 更新了抽屉和工作表,以便在手势可能成为滚动事件时正确延迟按压。
- 在 material 和 material3 Text、
TextField和OutlinedTextField中添加了minLines参数,该参数允许根据行数设置组件的最小高度 (I4af1d)
Bug 修复
- 修复了
pullRefresh未消耗速度,导致显示过度滚动的问题。同时将Modifier.pullRefresh中onReleaselambda 的 API 签名更改为返回 Float 类型以表示消耗的速度 (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) - 修复了
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的偏移量不再可为空。它们现在返回Float.NaN以指示偏移量的缺失。 (Ie9855)- 在构造
DropdownMenu或ExposedDropdownMenu时,添加了传入ScrollState的选项,用于控制显示菜单项的垂直滚动状态。 (Idb009, b/185304441) - 添加了启用/禁用
ModalBottomSheetLayout手势的支持,以便用户可以为更多功能的底部工作表配置此功能 (I40af0) - 为
BasicText添加了颜色参数,以允许高效地动画或设置文本颜色。 (Iffd88, b/246961787) - 将 Semantics 属性
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内部结构以使用新的SwipeableV2API。因此,BottomDrawerState现在将只在类级别定义 API,它不会从SwipeableState继承方法/属性。我们正在使用内部SwipeableV2State进行组合。偏移量现在是可为空的浮点属性,当前值和滑动目标值仍然可以通过 currentValue 和 targetValue 属性访问。以前的类级别方法(例如 open/expand/close)和属性(例如isOpen/isClosed)继续受支持。 (Iad40c, b/178529942, b/220676296)
Bug 修复
- 更新了 Switch 组件的内部结构。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 修复
- 修复了
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 修复
- 添加了一个芯片组回流示例。更新了单行芯片组示例中子芯片之间的水平填充以匹配规范。 (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 方法替换,并且偏移量现在可为空。使用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 修复
- 移除了可点击和可选择表面的语义角色,更新了使用它们的组件,以便使用 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中onReleaselambda 的 API 签名更改为返回 Float 类型以表示消耗的速度 (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中的一个错误,该错误会导致工作表在某些情况下从隐藏状态转换为可见状态时崩溃。(Ia9265, b/265444789)
版本 1.4.0-alpha04
2023年1月11日
androidx.compose.material:material-*:1.4.0-alpha04 已发布。版本 1.4.0-alpha04 包含这些提交。
API 变更
- 在 Surfaces 上添加了
IsContainer语义属性。此属性将在后续更改中使用,以根据 Surfaces 等元素的语义含义确定遍历顺序。(I63379) - 将 Drawer 中的
snapTo函数标记为非实验性 API。 (Ib9c18, b/261425368) - 为圆形进度指示器添加了轨迹颜色参数,并为圆形和线性进度指示器添加了笔触帽参数。 (Ie668c, b/216325962, b/222964817)
- 将
ModalBottomSheetState、ModalBottomSheetState.Saver和rememberModalBottomSheetState的confirmStateChange重命名为confirmValueChange。 (Ib48d1) - 废弃的隐藏函数的更多返回类型可空性 (Ibf7b0)
- 添加
Modifier.minimumInteractiveComponentSize。如果元素的测量结果较小,它可以用于保留至少 48dp 的大小,以消除触摸交互的歧义。 (I33f58, b/258495559) - 在
ModalBottomSheetLayout中合并了 Swipeable API 的更改。ModalBottomSheetState的animateTo不再接受animationSpec参数,并且公开的offset现在可空。使用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状态下会崩溃的错误。请确保您传入了正确的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中合并了SwipeableAPI 的更改。DrawerState的animateTo已被open和close方法取代,并且偏移量现在可空。使用requireOffset来要求偏移量。(I3de9e) - 添加了一个 Modifier API 来查询祖先滚动信息。(I2ba9d, b/203141462)
- 在
Clickable中使用,以便在手势可能变为滚动事件时正确延迟按压交互。 - 修复了
Clickables在Scrollable ViewGroup中使用时无法正确延迟涟漪的问题。 - 更新了抽屉和工作表,以便在手势可能成为滚动事件时正确延迟按压。
Bug 修复
- 修复了
PullRefreshIndicator在调用onRefresh后可能卡住的问题,如果刷新状态未更改为 true。(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) - 将
minLines参数添加到BasicText和BasicTextField。它允许以行数的形式设置这些可组合项的最小高度。(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 添加“下拉刷新”组件 (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 和 UI 自定义对话框及弹出窗口。此更改旨在缓解 Android S 以下版本上的辅助功能错误,并确保这些窗口内的辅助功能服务能够与对话框或弹出窗口内的内容进行交互。
只有当您创建的自定义对话框或弹出窗口实现的高程设置为高于 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 中
AnimatedVisibility与FloatingActionButton的问题 (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绘制在顶部应用栏阴影上的错误。BottomSheetScaffold在放置 Snackbar 时现在还会考虑工作表的状态:在折叠状态下,Snackbar 放置在工作表和 FAB 的上方;在展开状态下,Snackbar 锚定在工作表的底部。(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 或 position)已被弃用。您可以使用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)- 恢复了之前仅依赖 View 进行
WindowInsetsControllerCompat的更改,并再次要求使用 Window,这是管理某些窗口标志所必需的。弃用了ViewCompat.getWindowInsetsController,转而使用WindowCompat.getInsetsController,以确保使用正确的 Window(例如 View 位于对话框中时)。(I660ae, b/219572936) - 文本:
includeFontPadding现在默认关闭。处理了由于includeFontPadding=false导致的剪切问题,高字体不应发生剪切。(I31c84, b/171394808) - 添加了一个新的
LazyVerticalGridAPI 来定义交叉轴尺寸 (I17723)
版本 1.2.0-alpha04
2022年2月23日
androidx.compose.material:material-*:1.2.0-alpha04 已发布。版本 1.2.0-alpha04 包含这些提交。
API 变更
添加对筛选芯片的支持(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标记的可组合注解等同于一个ComposbleTarget,其 applier 参数为属性类的完全限定名称。有关使用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添加到作为现有方法的重载但没有复杂逻辑的方法。这减少了编译器为所有在调用的内部函数中重复的参数生成的备忘录检查(相等性)。(I90490) - 添加了对 Action 芯片的支持 (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 辅助功能指南对触摸目标尺寸的要求。例如,即使您将 Button 的尺寸设置为更小,其触摸目标也将扩展到最小尺寸 48x48dp。这使 Compose Material 与 Material Design 组件的行为保持一致,如果您混合使用 Views 和 Compose,则可提供一致的行为。此更改还确保当您使用 Compose Material 组件创建 UI 时,将满足触摸目标辅助功能的最低要求。
- 稳定支持 Navigation Rail
- 将许多以前的实验性 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 辅助功能指南的触摸目标尺寸。例如,即使您将 Button 的尺寸设置为更小,其触摸目标也将扩展到最小尺寸 48x48dp。这使 Compose Material 与 Material Design 组件的行为保持一致,如果您混合使用 Views 和 Compose,则可提供一致的行为。此更改还确保当您使用 Compose Material 组件创建 UI 时,将满足触摸目标辅助功能的最低要求。
Bug 修复
- 为布局检查器在检查最小触摸目标修饰符时添加了一些更好的调试信息。(aosp/1955036)
版本 1.1.0-rc01
2021年12月15日
androidx.compose.material:material-*:1.1.0-rc01 已发布。版本 1.1.0-rc01 包含这些提交。
Bug 修复
- 修复了
Checkboxes 的圆角半径 (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 包含这些提交。
新功能
- 涟漪现在支持悬停和焦点状态,因此悬停/聚焦 Button 等组件现在将显示正确的状态叠加层。
版本 1.1.0-alpha06
2021年10月13日
androidx.compose.material:material-*:1.1.0-alpha06 已发布。版本 1.1.0-alpha06 包含这些提交。
API 变更
- 添加了 Layout 的无子级重载,提高了效率 (Ib0d9a)
- 基于
ExposedDropdownMenuBox实现ExposedDropdownMenu,内部包含TextField和DropdownMenu(If60b2) dismissOnOutsideClick已添加到PopupProperties,取代了已弃用的dismissOnClickOutside。新属性接收点击位置和锚点边界,对是否应调用 onDismissRequest 提供了更精细的控制。例如,这对于防止触摸锚点时锚点被关闭很有用。updateAndroidWindowManagerFlags已添加到PopupProperties,提供对弹出窗口传递给 Android WindowManager 的标志的低级控制。lambda 的参数将是根据 PopupProperties 值计算出的 WindowManager 标志,例如 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 组件添加了最小触摸目标尺寸。由于这会在组件周围增加额外间距以确保它们具有足够大的触摸目标,因此可能会改变现有 UI,这些 UI 假定这些组件的尺寸是其可视尺寸,并且不考虑触摸目标尺寸。您可以使用实验性的
LocalMinimumTouchTargetEnforcement组合局部变量在整个层次结构中禁用此行为,但这仅旨在作为在更新现有 UI 以考虑新最小尺寸时的临时逃生舱。(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,以支持无论显示密度如何绘制单像素分隔线。(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方法,该方法消耗源矩形和目标矩形以消耗可选的 FilterQuality 参数。这对于在放大像素艺术时旨在像素化的像素艺术很有用。更新了 BitmapPainter + Image 可组合项以也消耗可选的 FilterQuality 参数 (Ie4fb0, b/180311607) - 将 BadgeBox 重命名为 BadgedBox,更改参数以接受 Badge 可组合项。添加了 Badge 组件,它是 BadgedBox 的典型徽章内容。(I639c6)
- 添加了 NavigationRail 组件,请参阅文档和示例以获取使用信息 (I8de77)
Bug 修复
- 添加了底部对齐的 NavigationRail 示例和目录应用演示。(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)
- 添加了实验性的 Range Slider 实现 (I2f4b3)
Bug 修复
- 为了与 Material Design 规范保持一致,输入无效的 OutlinedTextField 在标签用作占位符时停止使用错误颜色。当文本字段中没有输入文本且文本字段未获得焦点时,后者为 true。通过此更改,
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 中,当 Color.Unspecified 传入时,Scrim 将消失 (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中指定。该文件每行指定一个规则,其中规则是匹配库中方法或类的模式。这些规则的语法是人类可读的 ART 配置文件格式的超集,该格式在使用adb shell profman --dump-classes-and-methods ...时使用。这些规则有两种形式,用于定位方法或类。方法规则将具有以下模式
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>类规则将具有以下模式
<CLASS_DESCRIPTOR>此处
<FLAGS>是字符H、S和P中的一个或多个,用于指示此方法是否应标记为“热”、“启动”或“启动后”。<CLASS_DESCRIPTOR>是目标方法所属类的描述符。例如,类androidx.compose.runtime.SlotTable的描述符将是Landroidx/compose/runtime/SlotTable;。<METHOD_SIGNATURE>是方法的签名,包括方法的名称、参数类型和返回类型。例如,LayoutNode上的方法fun isPlaced(): Boolean具有签名isPlaced()Z。这些模式可以包含通配符(
**、*和?),以便单个规则可以包含多个方法或类。
这些规则有什么作用?
具有标志
H的方法表示此方法是“热”方法,应提前编译。具有标志
S的方法表示它是在启动时调用的方法,应提前编译以避免启动时编译和解释方法的成本。具有标志
P的方法表示它是在启动后调用的方法。文件中存在的类表示它在启动期间使用,应在堆中预分配,以避免类加载的成本。
这是如何工作的?
- 库可以定义这些规则,这些规则将打包在 AAR 工件中。当包含这些工件的 APK 被构建时,这些规则将合并在一起,合并后的规则用于构建特定于 APK 的紧凑二进制 ART 配置文件。然后,ART 可以在 APK 安装到设备上时利用此配置文件,以便提前编译应用程序的特定子集,从而提高应用程序的性能,尤其是首次运行的性能。请注意,这对可调试应用程序没有影响。
版本 1.0.0-beta08
2021年6月2日
androidx.compose.material:material-*:1.0.0-beta08 已发布。版本 1.0.0-beta08 包含这些提交。
新功能
行为破坏性 API 更改
- 行为破坏性更改:Card 现在会消耗点击事件,使得通过
Card(Modifier.clickable)添加的点击事件无效。请使用接受 onClick 的新实验性 Card 重载。(Ia8744, b/183775620)- 添加了一个新的 Card 重载,它处理点击以及其他可点击功能:指示、interactionSource、启用/禁用。无法将常规不可点击的 Card 与
Modifier.clickable一起使用,因为在这些情况下 Card 不会裁剪涟漪指示。
- 添加了一个新的 Card 重载,它处理点击以及其他可点击功能:指示、interactionSource、启用/禁用。无法将常规不可点击的 Card 与
- 行为破坏性更改:Surface 现在会消耗点击事件,使得通过
Surface(Modifier.clickable)添加的点击事件无效。请使用接受 onClick 的新实验性 Surface 重载。(I73e6c, b/183775620)- 添加了一个新的 Surface 重载,它处理点击以及其他可点击功能:指示、interactionSource、启用/禁用。无法将常规不可点击的 Surface 与
Modifier.clickable一起使用,因为在这些情况下 Surface 不会裁剪涟漪指示。
- 添加了一个新的 Surface 重载,它处理点击以及其他可点击功能:指示、interactionSource、启用/禁用。无法将常规不可点击的 Surface 与
API 变更
FabPosition已从枚举转换为内联类,以支持将来的潜在扩展 (I030fb)- 重构了枚举用法到内联类,以避免在添加新的枚举值时出现穷尽 when 语句的问题。(I2b5eb)
- 向 clickable/toggleable 添加了点击超时,以防止在滚动/拖动期间显示涟漪效果 (Ia2704, b/168524931)
- ContentDescription 和 Text 语义属性不再是单个值,而是列表。这使得它们可以合并而不是拼接。还提供了更好的测试 API 来利用这些更改 (Ica6bf, b/184825850)
Modifier.focusModifier()已弃用,并替换为Modifier.focusTarget()(I6c860)- 将
FocusState枚举替换为FocusState接口 (Iccc1a, b/187055290) - 现在
LocalRippleNativeRendering已删除,因为 View 支持的涟漪实现已稳定 (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 上发生,因此即使 UI 线程处于负载下(例如在屏幕之间导航时)也将保持流畅。这不会改变涟漪的 API 表面,但可能会因此更改而引入行为变化。为了帮助迁移,已添加LocalRippleNativeRendering- 向此 CompositionLocal 提供值false以回退到 CompositionLocalProvider 中的先前涟漪实现。此 API 是临时的,将来会被移除,因此如果您遇到导致您使用此 API 的问题,请提交错误。(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)
- Row 和 Column 的子项,如果设置了 weight(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 修复
- 添加了组件平铺图像、主题选择器和更具体的菜单 URL 到现有 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)
外部贡献
- [by Jossi 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组合局部 API,以替换 TextField 上先前的SoftwareKeyboardController接口。(I5951e, b/168778053)
Bug 修复
- 强制限制实验性 API 的公共用法 (I6aa29, b/174531520)
- 将 TopAppBar 和 BottomAppBar 的默认水平对齐方式更改为 Start,与 Row 保持一致 (Ib2dc7)
- 为 Compose Material 目录添加了一个新模块和占位符 UI,目前嵌套在现有集成测试演示中。(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 现在可以为空。Checkbox-in-clickable-row 示例已更新以使用此功能。(If601b, b/171819073)
InteractionState已替换为[Mutable]InteractionSource- 接口负责发出/收集交互事件。
- 您应该使用
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,现在允许自定义 suspend 动画而不是预定义的 Decays。(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() 现在是 suspend 函数。使用 rememberCoroutineScope() 获取组合范围来调用它们 (I16f60, b/175294473)
Providers 已重命名为 CompositionLocalProvider
- Composition 构造函数不再接受 key 参数,并且已被弃用。
- currentCompositeKeyHash 已转换为可组合的顶级属性,而不是可组合的顶级函数。
- CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空间
- ComposableLambda 已成为接口而不是具体类,并且不再具有类型参数。
- ComposableLambdaN 已成为接口而不是具体类,并且不再具有类型参数。
- snapshotFlow 函数已移至 androidx.compose.runtime 命名空间
- SnapshotMutationPolicy 的 merge 方法不再是实验性的
- 已移除
@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 表面移除了 ElevationDefaults 和 animateElevation(),因为它们不常用/有用。
- 将
Slider中的onValueChangeEnd重命名为onValueChangeFinished并使其可为空。 - 将
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 keys 来指示何时应为新的依赖项重启指针输入检测协程。(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 现在是 suspend 函数。(If4288)
- ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(Icf416)
- 已从几个很少使用的类中移除了解构和 copy() 方法。(I26702,b/178659281)
- 将 ModalBottomSheetState 中的 halfExpand() 和 expand() 设为内部。(Ic914e)
- 将 Indication#createInstance 更改为 @Composable,并将 LocalIndication 更改为包含 Indication,而不是 () -> Indication。(I5eeea,b/157150564)
- AlertDialog 和 DropdownMenu 暂时只支持 Android。为 DropdownMenu 添加了 PopupProperties 参数,用于进一步配置底层 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) - 重命名 Ambients 以匹配 Ambient -> CompositionLocal 重命名。Ambients 以前命名为 AmbientFoo,现在 CompositionLocals 命名为 LocalFoo。(I2d55d)
- Selection 已移至 foundation。(I7892b)
- 与我们之前移除
state { 0 }可组合项并现在推广使用remember { mutableStateOf(0) }类似,我们将移除savedInstanceState { 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,以支持形状在 RTL 方向的自动镜像。引入了 AbsoluteRounderCornerShape 和 AbsoluteCutCornerShape,用于不希望自动镜像的情况。(I61040,b/152756983)
将 Tab 的
text和icon参数以及 BottomNavigationItem 的label参数更改为可为空,以更好地表达组件在提供/不提供这些参数时的行为,因为它会影响组件的大小和布局。如果您目前传递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 添加了 enabled 参数,以防止它们可点击。将 BottomNavigationItem 更改为 RowScope.BottomNavigationItem,以更好地表达其 API 中的布局要求。(Id683d)
tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicaitonGestureFilter 已废弃。请改用 Modifier.clickable 或 Modifier.pointerInput 配合 detectTapGestures 函数。(I6baf9,b/175294473)
为 Shape 的 createOutline 添加了 layoutDirection 参数。这允许创建感知布局方向的形状。(I57c20,b/152756983)
移除了
Recomposer.current()。[Abstract]ComposeView 现在默认使用 ViewTreeLifecycleOwner 驱动的惰性创建的窗口范围 Recomposers。当主机生命周期停止时,重组和基于 withFrameNanos 的动画计时会暂停。(I38e11)
Bug 修复
- Icon 现在将按比例放大以适应其大小,并尊重应用于其的大小修饰符。例如,
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。(I5d20e) - 已将内容描述参数添加到 Image 和 Icon。它用于为辅助功能服务提供描述。(I2ac4c)
- 将 Material 有状态参数接口更改为具有返回
State<T>的 @Composable 函数。添加了Animatable.asState(),以便更轻松地将 Animatable 转换为 State。还将 animateElevation 更改为 Animatable 的 suspend 扩展。(If613c) - Snackbar、SnackbarHost、SnackbarHostState 不再是
@ExperimentalMaterialAPI。(Id1fb5) - 更改了 Typography、Shapes 和 TabPosition,使其不再是数据类。为 Typography 和 Shapes 添加了 copy 函数以替换生成的函数。(I40037)
- 删除了先前已废弃的 Material API。(Ifaa25)
Bug 修复
- onCommit、onDispose 和 onActive 已废弃,取而代之的是 SideEffect 和 DisposableEffect API。(If760e)
- 基于 TransitionDefinition 的 Transition 已废弃。(I0ac57)
- updateTransition 中的初始状态现在受支持。(Ifd51d)
- WithConstraints 已重构为 BoxWithConstraints 并移至 foundation.layout。(I9420b,b/173387208)
废弃非 suspend scrollBy,移除非 suspend scrollTo
我们现在建议使用 suspend 函数来控制滚动并等待滚动完成。作为此过渡的一部分,我们正在废弃和/或移除这些函数的非 suspend 版本。(Ie9ced)
废弃非 suspend smoothScrollBy。我们现在建议使用 suspend 函数来控制滚动并等待滚动完成。作为此过渡的一部分,我们正在废弃这些函数的非 suspend 版本。(I12880)
引入了
ComposeContentTestRule,它扩展了ComposeTestRule并定义了已从ComposeTestRule中移除的setContent。添加了一个工厂方法createEmptyComposeRule(),它返回一个ComposeTestRule且不为您启动 Activity。当您想在测试期间启动 Activity 时使用此方法,例如使用ActivityScenario.launch。(I9d782,b/174472899)Button 和 FloatingActionButton 中使用的波纹不能再通过 AmbientIndication 提供新的 Indication 来定制 - 这从来都不是定制这些组件的方式,现在这使得这些组件与其他 Material 组件保持一致。要定制应用程序中的波纹,请参阅 RippleTheme。(I546c5)
animateAsState 现在是 animateFooAsState,其中 Foo 是正在动画的变量类型。例如 Float、Dp、Offset 等。(Ie7e25)
BasicTextField 接收了一个名为
decorationBox的新参数。它允许向文本字段添加图标、占位符、标签等装饰,并增加其点击目标区域。(I16996)修复了一个导致 Material 文本字段宽度不能小于 280.dp 的 bug。(I78373)
canDrag 参数已从 Modifier.draggable 中移除。(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 已移除。请改用 suspend Animatable.animateDecay。(I4659b,b/177457083)
clickable、toggleable 和 selectable 现在可以在组合外部创建。(I0a130,b/172938345,b/175294473)
Easing 已更改为功能接口。(Ib14e5)
ScrollableColumn/Row 已废弃。当您有大量滚动内容时,使用 ScrollableColumn 的效率低于 LazyColumn,因为 LazyColumn 只能组合/测量/绘制可见元素。为了防止用户走上低效的道路,我们决定废弃 ScrollableColumn 和 ScrollableRow,并推广使用 LazyColumn 和 LazyRow。用户仍然可以决定不需要懒加载行为,并直接使用修饰符,例如:Column(Modifier.verticalScroll(rememberScrollState()))。(Ib976b,b/170468083)
为 LazyColumn/LazyRow/LazyVerticalGrid 的作用域新增了
items(count: Int)工厂方法。items(items: List)和itemsIndexed(items: List)现在是扩展函数,因此在使用时必须手动导入。为数组新增了扩展重载: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 模块并将其设为内部。更新了 equals 实现中 nativeClass 的用法,改用 'is MyClass'。(I4f734)
Bug 修复
- 增加了对禁用和只读文本字段的支持。(I35279,b/171040474,b/166478534)
animate()现在被animateAsState()替换,后者返回State<T>而不是T。这允许更好的性能,因为可以将失效范围缩小到 State 值读取的位置。(Ib179e)- 添加了 Semantics 角色 API,并添加 Role 作为 clickable、selectable 和 toggleable 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 变更
- 添加了 API,可在 Modifier.swipeable 中手动触发 settle 动画和拖动。(Iaa17a,b/162408885)
- 将 ButtonConstants 等 *Constants 对象重命名为以 Defaults 结尾,例如 ButtonDefaults。还从这些新对象中移除了属性中不必要的
default前缀。(Ibb915,b/159982740) Compose 支持可进行可组合调用的属性 getter。对此的支持不会取消,但声明属性 getter 为 @Composable 的语法正在更改。
现在已废弃的语法是通过注解属性本身来实现此目的。
@Composable val someProperty: Int get() = ...现在正确的语法是通过注解属性的 getter 来实现此目的。
val someProperty: Int @Composable get() = ...两种语法都将在一段时间内有效,但前者的已废弃语法最终将成为编译错误。(Id9197)
添加了
androidx.compose.material:material-ripple库,其中包含波纹 API,允许在不需要 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,并废弃了旧的 VectorConveters。(If0c4b)
Autofill API 现在是实验性 API,需要选择启用。(I0a1ec)
添加解构声明以创建 FocusRequester 实例。(I35d84,b/174817008)
accessibilityLabel 已重命名为 contentDescription。accessibilityValue 已重命名为 stateDescription。(I250f2)
新增了用于创建 InfiniteRepeatableSpec 的 infiniteRepeatable 函数。(I668e5)
DropdownMenus 的定位行为根据 Material 规范略有更改。(I34c72,b/168594123)
已添加对 TextFields 的 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 应用可以手动使用 AmbientTextSelectionColors 来定制用于选择的颜色。(I1e6f4,b/139320372,b/139320907)
- 添加了可组合 lambda 参数命名和位置的 lint 检查,以检查与 Compose 准则的一致性。还根据 lint 检查和指导,将一些使用
children作为其尾随 lambda 名称的 API 迁移到content。(Iec48e) - 将 VectorAsset 重命名为 ImageVector,并根据 API 委员会的指导,将 VectorAsset 移至并重命名为 Builder,作为 ImageVector 的内部类。添加了 VectorAssetBuilder 的类型别名,以链接到 ImageVector.Builder 以实现兼容性。(Icfdc8)
- 将 ImageAsset 和相关方法重命名为 ImageBitmap。(Ia2d99)
- 将 foundation semantics 属性移至 ui。(I6f05c)
fun RippleIndication()已废弃,并替换为rememberRippleIndication(),以与其他 API 保持一致。(Id8e2c)- 在 BasicTextField、TextField 和 OutlinedTextField 中添加了 singleLine 参数。将此参数设置为 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)
<T>已从 SubcomposeLayout 声明中移除。您现在无需指定类型即可使用它。(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 和 SweepGradientBrush API。(Ia22c1)
- 添加了 Composable 函数中 Modifier 参数的 lint 检查。此 lint 检查会检查参数的命名、返回类型、默认值和顺序,以确保与 Compose 准则一致。(If493b)
- 更新了 TextFieldValue API
- 将 TextFieldValue.composition 设为只读
- 移除了因无效选择范围而抛出的异常。(I4a675,b/172239032)
- 添加了一个新的
Modifier.drawLayer()重载。它接受一个 GraphicsLayerScope 的 lambda 块,您可以在其中定义层参数,从而在状态更改发生时跳过重组和重新布局。DrawLayerModifier 现已内部化,以便将其逻辑迁移到 LayoutModifier 的placeable.placeWithLayer()方法中。(I15e9f,b/173030831) - 废弃了以
Ambient作为后缀命名的 Ambients,并用以 Ambient 为前缀的新属性替换它们,以遵循其他 Ambients 和 Compose API 准则。(I33440) - 添加了 lint 检查,以检查 Modifier 工厂是否在内部使用
androidx.compose.ui.composed {},而不是标记为@Composable。(I3c4bc) - Semantics 参数 mergeAllDescendants 已重命名为 mergeDescendants。(Ib6250)
- 测试中的时间控制(TestAnimationClock 及其用法)现在是实验性的。(I6ef86,b/171378521)
- 移除了旧的 ui-test 模块及其存根。(I3a7cb)
- TextUnit.Inherit 已重命名为 TextUnit.Unspecified,以与其他单元保持一致。(Ifce19)
- Alignment 接口已更新并设为功能性接口。(I46a07,b/172311734)
- LayoutIdParentData 中的 id 已重命名为 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)以在组件中产生相同的效果。您可以使用 AmbientContentAlpha 直接提供值,而不是使用 ProvideEmphasis,并使用 ContentAlpha 中的新默认级别来替换旧的 EmphasisLevels。(Idf03e,b/159017896) - 添加 androidx.compose.material.AmbientContentColor 以替换 androidx.compose.foundation.AmbientContentColor。(I84f7b,b/172067770)
- 添加了 androidx.compose.material.Text 以替换 androidx.compose.foundation.Text 作为高层级的、可主题化的 Text 组件。对于不从主题中消费颜色/文本样式的基本文本组件,请使用 BasicText。(Ie6ae0)
- Textfields 添加了 maxLines。(Ib2a5b)
- 更新 TextFields 以接受 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 注解已移除。SubcomposeLayout 现在无需添加 @OptIn 即可使用。(I708ad)
- FirstBaseline 和 LastBaseline 已移至 androidx.compose.ui.layout 包。(Ied2e7)
- 更新了 Icon API,使其可以将 Color.Unspecified 作为可能的着色颜色,这将绘制所提供的资产或绘图器,而无需 ColorFilter。以前,尝试使用 Color.Unspecified 忽略着色会导致透明着色,最终什么也渲染不出来。(I049e2,b/171624632)
- relativePaddingFrom 已重命名为 paddingFrom。添加了 paddingFromBaseline 修饰符,作为指定布局边界到文本基线距离的便利方法。(I0440a,b/170633813)
- LaunchedTask 已重命名为 LaunchedEffect,以与 SideEffect 和 DisposableEffect API 保持一致。不允许使用不带 subject 参数的 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 接口,用于表示 Switch 在不同状态下使用的颜色。请参阅 SwitchConstants.defaultColors 以自定义这些颜色。(I93805)
- 添加了 ButtonElevation 和 ButtonColors 接口,用于表示按钮在不同状态下使用的高程和颜色。请参阅 ButtonConstants 中的默认函数以自定义这些参数。(Ic5b7b)
- 添加了 RadioButtonColors 接口,用于表示 RadioButton 在不同状态下使用的颜色。请参阅 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)
- 所有脚手架状态都标记为 @Stable。ScaffoldState 中的 drawerGesturesEnabled 已移至 Scaffold 本身。(I36645,b/168297016)
- 移除了 Scaffold lambda 参数中的可空类型,您可以使用 emptyContent() 来表示给定参数没有内容。(I2b318,b/157633857,b/158551084)
废弃了 contentColor() 和 currentTextStyle() API,并分别用 AmbientContentColor 和 AmbientTextStyle 环境替换它们。您可以像访问任何其他环境一样,通过在环境属性上使用
.current来访问当前值。此更改是为了保持一致性并避免有多种方法来完成同一件事。此外,为了更好地描述其目的,将一些环境属性重命名如下:- 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 重命名为 rememberBackdropScaffoldState,并添加了用于动画时钟的额外参数。将 BackdropScaffold 的参数 backdropScaffoldState 重命名为 scaffoldState。将 BackdropConstants 重命名为 BackdropScaffoldConstants。(Ib644d)
- 添加了实验性 BottomSheetScaffold 组件。(Ie02f0,b/148996320)
- 添加了实验性 ModalBottomSheetLayout 组件。(Ic209e,b/148996320)
- 将 ButtonConstants/FloatingActionButtonConstants.defaultAnimatedElevation 重命名为 defaultElevation,现在返回 Dp 值而不是 AnimatedValue。(I5f3ed)
Bug 修复
- 更新了许多 Graphics API
- 更新了缩放和旋转变换 API,使其接受单个 Offset 参数来表示枢轴坐标,而不是 DrawScope 和 DrawTransform 中的 x/y 坐标的单独浮点参数
- 移除了 Rect.expandToInclude 和 Rect.join 方法
- 更新了 Radius 文档,使其除了椭圆外还提及椭圆形
- 添加了文档,指出内联 Radius 类的公共构造函数不应直接调用,而应通过其函数构造函数实例化 Radius 对象
- 移除了查询 topRight、bottomRight、bottomCenter 等的 RoundRect API。
- 废弃了 Rect.shift,改用 Rect.translate
- 移除了 RoundRect.grow 和 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 的矩形的 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 不同,以前的 Box 的行为类似于 Column。(I94893,b/167680279)
- Box 装饰参数已废弃。如果您想在 Box 上添加装饰/填充,请改用修饰符(Modifier.background, Modifier.border, Modifier.padding)。(Ibae92,b/167680279)
- 更新了许多 Graphics API
- 更新了 DrawScope API,添加了作用域变换方法,以指示变换仅在回调内部应用,并在回调调用后移除
- 更新了 clipPath 文档,使其引用 Path 而不是 rounded rectangle
- 修复了 clipPath 中右侧参数文档的间距
- 将 DrawScope.drawCanvas 重命名为 drawIntoCanvas 并移除了 size 参数
- 将 inset 方法中的 dx/dy 参数重命名为 horizontal 和 vertical
- 添加了 inset 重载,为所有 4 个边界提供相同的 inset 值
- 移除了 inset 方法中指示 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 中添加了步骤。(Ia47b0)
- layout API 中 gravity 的用法已统一重命名为 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 和 RadioGroupItems 已移除。请改用 Row 和 RadioButton。(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。添加了 rememberSwipeableState 函数用于创建 SwipeableStates。(I2fc9c,b/163129614,b/163132293)
- 添加了带定位和正确队列的 Snackbar 支持。通过
SnackbarHostState.showSnackbarsuspend 函数访问。此外:- 添加了 SnackbarHost 组件。它根据状态托管 Snackbar,并负责 Snackbar 之间的过渡。
- 添加了 SnackbarHostState,允许控制 Snackbar、Snackbar 主机,并将其与 ScaffoldState 解耦。您也可以通过
scaffoldState.snackbarHostState访问此状态。 - 添加了 Snackbar 重载以支持 snackbarHostState 和 snackbar 本身之间的通用接口。(I79aaa)
- 为 IconButton 添加了 enabled 参数,并重新排序了 IconToggleButton 中的参数。(I0a941,b/161809385,b/161807956)
- 基于 String API 的 ListItem 版本已移除。请改用 slot 版本。(Ib8f57,b/161804681)
- 移除了已废弃的 FilledTextField 组件。请改用 TextField 以获取 Material Design 实现的 Filled 文本字段。(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)
- bottomBarSize、fabSize 及其他参数在 ScaffoldState 中不再可用。请在需要获取其尺寸的组件上改用 Modifier.onPosition。contentColor 和 Modifier 参数已添加到 Scaffold 中 (Ic6f7b, b/161811485, b/157174382)
- 为了与其他 API 保持一致,Tab 中的某些参数已重命名和重新排序 (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)
- Slider 拥有更多颜色以进行精细自定义 (I73e64, b/161810475)
- Card 的 color 参数已重命名为 backgroundColor (I01fc1, b/161809546)
- Snackbar 现在可自定义背景和内容颜色 (I238f2, b/161804381)
- Drawers 中已添加 modifier、backgroundColor、contentColor 和 scrimColor 自定义参数 (I23655, b/161804378)
- 为了清晰起见,
state { ... }可组合项现已弃用,建议改为明确调用remember { mutableStateOf(...) }。这减少了整体 API 表面和状态管理概念的数量,并与用于类属性委托的by mutableStateOf()模式相匹配。(Ia5727) - Button 的 padding 参数已重命名为 contentPadding (Id252e, b/161809394)
- 添加了实验性 Material 组件 SwipeToDismiss。(I129e5)
Bug 修复
- 移除了
onChildPositioned和OnChildPositionedModifier。开发者应改为在子布局上使用onPositioned和OnPositionedModifier。(I4522e, b/162109766) - 为 SemanticsPropertyKey 添加了 mergePolicy 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),并通过新环境在组件中访问主题对象,这与 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 被标记为 Experimental (Ic5fa0, b/161784800)
- Material FilledTextField 已重命名为 TextField,基础 TextField 已重命名为 BaseTextField,以便最简单的所需 API 易于发现和使用 (Ia6242, b/155482676)
Bug 修复
- OnChildPositioned 已弃用。请改为在子项上使用 OnPositioned。(I87f95, b/162109766)
- 解决广泛的 API 修复 (I077bc)
- 移除未使用的 OffsetBase 接口
- 对齐 Offset 和 IntOffset 类以具有一致的 API 表面
- 将 IntOffset.Origin 重命名为 IntOffset.Zero,以与 Offset API 保持一致
- 将 nativeCanvas 方法从 Canvas 接口移出,以支持消费者创建自己的 Canvas 实例
- 创建了存根 EmptyCanvas 类,将 DrawScope 重构为非空参数,而不是 lateinit,并确保字段的非空性
- 将 ClipOp 枚举重命名为 Pascal Case
- 将 FilterQuality 枚举重命名为 Pascal Case
- 将 StrokeJoin 枚举重命名为 Pascal Case
- 将 PointMode 枚举重命名为 Pascal Case
- 将 PaintingStyle 枚举重命名为 Pascal Case
- 将 PathFillType 枚举重命名为 Pascal Case
- 将 StrokeCap 枚举重命名为 Pascal Case
- 更新 DrawCache 实现以不再使用 lateinit 参数
- 更新 DrawScope 以不再对 fillPaint 和 strokePaint 内部参数使用延迟委托
- 更新 Image 可组合项以避免使用 Box,以减少开销
- 更新 Outline 类以具有 @Immutable 注释
- 更新 PathNode 以对每个路径指令具有 @Immutable 注释
- 更新 Vector 子组合以移除冗余的相等性条件检查,因为 Compose 已经处理它们
- 弃用了 Rect 伴随构造方法,改用函数构造函数
- 更新了 Brush 类和函数构造函数,添加了 @Immutable 和 @Stable API
- 将 VertexMode 枚举更新为 PascalCase
- 更新 DrawScope selectPaint 方法,如果笔触参数已更改,则有条件地覆盖画笔上的笔触参数
- 更新 Size 以添加解构 API,将 UnspecifiedSize 重命名为 Unspecified 并删除了未使用的旧方法
- 将对话框移动到 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-icons-extended,其中包含添加到 Material.io/icons 的最新图标 (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 表面和需要教授的概念
- 与其他同类工具包(Swift UI、React、Flutter)更紧密地对齐
- 可逆转的决定。我们可以随时在以后恢复
@Model。 - 消除了使用中的边缘情况和难以回答的关于配置
@Model的问题,这些问题我们需要处理 @Model数据类、equals、hashcode 等。- 如何让某些属性“被观察”而其他属性不被观察?
- 如何指定在观察中使用的结构相等性与引用相等性?
- 减少系统中的“魔术”。这将降低有人假设系统比实际更智能(例如,它知道如何区分列表)的可能性
- 使观察的粒度更直观。
- 改进从变量到类属性的重构能力
- 可能开辟了进行手工制作的 State 特定优化的可能性
- 与生态系统的其余部分更紧密地对齐,并减少了对不可变或我们“拥抱可变状态”的模糊性
迁移注意事项
@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 的属性委托和
mutableStateOfAPI 使这种方法更容易,它允许您在组合之外创建 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 中添加了 thresholds 参数,用于指定锚点之间的阈值。这被用于在底部抽屉中设置 56dp 的阈值。此外,BottomDrawerLayout 现在使用单独的 BottomDrawerState 枚举。(I533fa)
移除了先前弃用的 Modifier.ripple。Clickable 现在使用 ripple 作为默认指示(如果您的应用程序中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用 clickable 即可免费获得波纹指示。如果您需要自定义波纹的颜色/大小/边界参数,可以手动创建一个 RippleIndication 并将其作为 indication 参数传递给 clickable。(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。Clickable 现在使用 ripple 作为默认指示(如果您的应用程序中设置了 MaterialTheme {}),因此在大多数情况下,您只需使用 clickable 即可免费获得波纹指示。如果您需要自定义波纹的颜色/大小/边界参数,可以手动创建一个 RippleIndication 并将其作为 indication 参数传递给 clickable。(I101cd, b/155375067)
Scaffold API 已重构:部分参数已更名,并添加了新参数以实现更好的自定义。添加了 getter 以查询 Fab、TopBar 和 BottomBar 的尺寸 (I0e7ce)
在 ui-material 中添加了 DropdownMenu 组件,一个 Material Design 菜单实现。(I9bb3d)
允许使用 SoftwareKeyboardController 手动显示/隐藏软键盘 (Ifb9d6, b/155427736)
Modifier.indication 已添加到 foundation 包中。使用它来在自定义可交互元素上显示按下/拖动/其他指示。(I8425f, b/155287131)
CanvasScope 实现已整合,现在只剩下 DrawScope 和 ContentDrawScope。CanvasScope 已重命名为 DrawScope。DrawScope 已更新为实现 Density 接口并提供 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 和 Extended FAB 的默认颜色已更改为 MaterialTheme.colors.secondary。(I3b9b9, b/154118816)
将 API 中所有可为空的 Color 用法替换为不可为空的 Color,并使用 Color.Unset 而不是 null (Iabaa7)
将 EdgeInsets 重命名为 InnerPadding。将 Material Buttons 的 innerPadding 参数重命名为 paddding。(I66165)
Slider 现在是无状态的。用户将需要像其他任何控件一样,自行传递和更新状态。(Ia00aa)
StaticDrawer 已移除。如果需要,请使用带有 material-spec 宽度的 Box 代替 (I244a7)
添加了 Filled Text Field 的 Material Design 实现 (Ic75cd)
为 ListItem 添加了 modifier 参数,并重新排序了参数以促进 trailing lambda 主体 (I66e21)
为 Typography 添加了 defaultFontFamily 构造函数参数,允许指定用于任何未设置字体的 TextStyles 的默认字体。(I89d07)
暂时从 API 表面移除了 Material 数据表。(Iaea61)
重命名了 Divider 可组合项中的参数 (Ic4373)
子项 (Ia6d19)
移除了 MaterialTheme.emphasisLevels,请改为直接使用 EmphasisAmbient.current 检索强调级别 (Ib5e40)
形状主题系统已根据 Material Design 规范更新。现在您可以提供小型、中型和大型形状供大多数组件使用 (Ifb4d1)
将 MaterialTheme API(如 MaterialTheme.colors()、MaterialTheme.typography())更改为属性而非函数。从现有调用中移除括号,预期行为没有变化。(I3565a)
重构了 FloatingActionButton API,使其接受可组合的 lambda 而不是原语。请参阅更新后的示例以获取用法信息。(I00622)
为 Checkbox、Switch 和 Toggleable 添加了
enabled参数 (I41c16)Ripple 现在是一个 Modifier。虽然 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)
移除了带有 String 参数的 Snackbar API,改为使用接受可组合 lambda 的重载。有关用法信息,请参阅更新后的示例。(I55f80)
重构了 Tab API 以接受
text和iconlambda,(Ia057e)添加了 BottomNavigation 组件,有关用法信息请参阅文档和示例 (I731a0)
添加了 Icon、IconButton 和 IconToggleButton,移除了 AppBarIcon。您可以直接将 AppBarIcon 的现有用法替换为 IconButton,它们现在将具有正确的触摸目标。有关用法信息,请参阅示例;有关可以与这些组件直接使用的 Material Icons,请参阅 Icons。(I96849)
用不同的函数替换了 ButtonStyle 并移除了 text (string) 重载。有关用法信息,请参阅更新后的示例。(If63ab, b/146478620, b/146482131)
将
Border修饰符重命名为DrawBorder(I8ffcc)LayoutCoordinates 不再具有 position 属性。在考虑 LayoutModifiers、旋转或缩放时,position 属性没有意义。相反,开发者应使用 parentCoordinates 和 childToLocal() 来计算从一个 LayoutCoordinate 到另一个 LayoutCoordinate 的转换。
LayoutCoordinates 使用 IntPxSize 作为 size 属性,而不是 PxSize。布局使用整数像素大小进行布局,因此所有布局大小都应使用整数而不是浮点值。(I9367b)
ambients API 的重大更改。有关详细信息,请参阅日志和
Ambient<T>文档 (I4c7ee, b/143769776)Scaffold material 组件已添加。Scaffold 实现 (I7731b)
用 Border Modifier 替换了 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 expect 类的 Shader 内联类。将 NativeShader 重命名为 Shader。封装的 Shader 内联类没有为 API 表面增加任何有价值的东西,并且是一个内联类,因此直接使用 NativeShader 类。(I25e4d)
- Popups、Dialogs 和 Menus 现在继承上下文 MaterialTheme (Ia3665, b/156527485)
- Material DropdownMenu 现在可以滚动。(Ide699)
- 移除了 Layout() 函数度量块中的布局方向参数。但是,布局方向在回调内部通过度量范围对象可用。(Ic7d9d)
- 使用 AnimationSpec 而不是 AnimationBuilder 作为顶级 API,以阐明静态动画规范的概念 - 通过删除创建 AnimationSpecs(如 tween、spring)的 lambda 要求来改进转换 DSL。它们直接接受构造函数参数。- 改进 AnimationSpec 的整体易用性,开放构造函数而不是依赖构建器 - 将 KeyFrames 和 Tween 的持续时间和延迟更改为 Int。这消除了不必要的类型转换和方法重载(用于支持 Long 和 Int)。(Ica0b4)
- 当
enabled设置为 false 时,Switch 现在显示为禁用状态 (If4624, b/155941869, b/159331694) - Modifier.tag 已重命名为 Modifier.layoutId,以避免与 Modifier.testTag 混淆。(I995f0)
- 从 Placeable#get(AlignmentLine) 返回的对齐线 Int 位置现在是非空的。如果查询的对齐线缺失,将返回 AlignmentLine.Unspecified。(I896c5, b/158134875)
重构 Radius 类为内联类。移除了伴随创建方法,改为使用带默认参数的函数构造函数,使沿 Y 轴的半径与强制的 X 轴半径参数匹配。
更新 DrawScope.drawRoundRect 以消耗单个 Radius 参数,而不是沿 X 轴和 Y 轴的 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 修饰符 API 已更改:outlineShape 重命名为 shape,并具有 RectangleShape 默认值且现在不可为空;clipToOutline 重命名为 clip;clipToBounds 已移除,因为它与 clip == true 且使用 RectangleShape 相同 (I7ef11, b/155075735)
更新了公开 Canvas 的高级 Compose API,以公开 CanvasScope。这消除了消费者维护自己的 Paint 对象的需要。对于仍需要访问 Canvas 的消费者,他们可以使用 drawCanvas 扩展方法,该方法提供回调以使用底层 Canvas 发出绘图命令。(I80afd)
AlignmentLineOffset 可组合项已弃用,请改用 relativePaddingFrom() 修饰符。CenterAlignmentLine 可组合项已移除。(I60107)
WithConstraints trailing lambda API 已更改。现在,它不再是两个参数,而是有一个接收器作用域,除了约束和布局方向外,还提供 Dp 中的 minWidth、maxWidth、minHeight 和 maxHeight 属性 (I91b9a, b/149979702)
添加了 defaultMinSizeConstraints 布局修饰符,该修饰符仅在传入的相应约束未指定时(最小约束为 0,最大约束为无穷大)才为包装布局设置尺寸约束。(I311ea, b/150460257)
FocusManagerAmbient 已移除。请使用 FocusModifier.requestFocus 获取焦点。(Ic4826)
创建了 CanvasScope API,它封装了一个 Canvas 对象以公开无状态的声明式绘图 API 表面。转换包含在它们自己的接收器范围内,尺寸信息也作用于相应的 inset bounds。它不需要消费者维护自己的 Paint 状态对象来配置绘图操作。
添加了 CanvasScopeSample 并更新了演示应用程序以包含声明式图形演示 (Ifd86d)
为 TextField 添加了光标颜色自定义功能 (I6e33f)
与 TextField 一起使用的 TextFieldValue 现在可以在活动重新创建时保留,使用方式如下:
var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }(I5c3ce, b/155075724)将 LayoutModifier2 重命名为 LayoutModifier。(Id29f3)
移除了已弃用的 LayoutModifier 接口。(I2a9d6)
用 FocusNode 替换了 CoreTextField/TextField 的 focusIdentifier 参数,以便与焦点子系统集成。(I7ea48)
Layout 和 LayoutModifier2 中的固有测量函数现在具有 IntrinsicMeasureScope 接收器,该接收器提供具有隐式传播布局方向的固有查询 API。(Id9945)
添加了新的 Modifier.zIndex(),用于控制同一父布局中子项的绘制顺序。DrawLayerModifier 上的 elevation 属性已重命名为 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,使其预期垂直或水平对齐方式,而不是任何对齐方式。gravity 修饰符已更新为接受垂直或水平对齐方式。Row、Column 和 Stack 已更新为支持自定义连续对齐方式。(Ib0728)
创建了 PixelMap API 以支持从 ImageAsset 查询像素信息。(I69ad6)
移除了 ProvideContentColor,改为直接与
Providers一起使用 ContentColorAmbient (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 属性委托优化。调用方必须添加导入才能继续使用
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)
将 Modifier 的加号运算符替换为工厂扩展函数 (I225e4)
Draggable 已移至修饰符 (Id9b16, b/151959544)
ParentData 可组合项已弃用。您应该创建实现 ParentDataModifier 接口的修饰符,或者如果只是需要在度量块中标记布局子项以识别它们,则使用 LayoutTag 修饰符。(I51368, b/150953183)
Center 可组合项已弃用。它应该用 LayoutSize.Fill + LayoutAlign.Center 修饰符替换,或者用 Box 或 Stack 可组合项并应用合适的修饰符替换 (Idf5e0)
添加了 VectorPainter API 以替换现有的矢量图形子组合 API。子组合的结果是一个 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 已从常规可组合函数更改为返回 Modifier 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)
更改了 LayoutCoordinates,使 providedAlignmentLines 成为 Set 而不是 Map,并让 LayoutCoordinates 实现 get() 运算符以检索值。这使得修饰符更容易修改集合中的一个或多个值,而无需为每个修饰符创建新集合。(I0245a)
Scrollers 现在展现原生 Android 甩动动画行为。(I922af, b/147493715)
Constraints API 表面的改进 (I0fd15)