Compose Multiplatform 1.6.0 新特性
以下是 Compose Multiplatform 1.6.0 版本的主要亮点:
重大变更
全新优化的资源 API
iOS 无障碍功能基础支持
全平台 UI 测试 API
弹窗、对话框和下拉菜单的独立平台视图
Jetpack Compose 与 Material 3 的变更合并
稳定版框架中的 Kotlin/Wasm 构件
已知问题:缺失依赖项
依赖项
当前版本的 Compose Multiplatform 基于以下 Jetpack Compose 库构建:
重大变更
默认裁剪带行高设置的文本内边距
随着对 LineHeightStyle.Trim 的支持加入,Compose Multiplatform 在文本内边距裁剪方式上与 Android 保持了一致。详情参见 该拉取请求。
这与 1.6.0-alpha01 版本 中 compose.material 的变更一致:
Android 平台默认将
includeFontPadding参数设为false。关于此变更的深入讨论,请参阅 Compose Multiplatform 中不实现此标志的说明。默认行高样式已改为
Trim.None和Alignment.Center。Compose Multiplatform 现已支持LineHeightStyle.Trim并以Trim.None作为默认值。Typography的TextStyle中显式添加了lineHeight,这导致了 下一个重大变更。
MaterialTheme 中使用 fontSize 需指定 lineHeight
若在 MaterialTheme 中为 Text 组件设置 fontSize 属性但未包含 lineHeight ,实际行高将不会随字体调整。现在每次设置 fontSize 时都必须显式指定 lineHeight 属性。
Jetpack Compose 现 建议 不要直接设置字体大小:
资源组织新方案
若您曾在 Compose Multiplatform 1.6.0 预览版中使用资源 API,请查阅 当前版本文档 :1.6.0-beta01 变更了资源文件在项目目录中的存储方式。
跨平台特性
优化的资源 API(全平台)
新实验性 API 新增对字符串和字体的支持,使您能更便捷地在通用 Kotlin 代码中共享和访问资源:
资源可按其设计用途的特定设置或约束进行组织,支持:
区域设置
图像分辨率
暗色与亮色主题
现为每个项目生成
Res对象以简化资源访问。
关于资源限定符及新 API 的深度解析,请参阅 图像与资源。
UI 测试 API(实验性,全平台)
原本仅支持桌面和 Android 的 Compose Multiplatform UI 测试实验性 API,现已扩展至全平台。您可以编写并运行通用测试,验证应用 UI 在框架支持平台上的行为。该 API 使用与 Jetpack Compose 相同的查找器、断言、操作和匹配器。
配置指南及测试示例详见 测试 Compose Multiplatform UI。
Jetpack Compose 与 Material 3 的变更(全平台)
Jetpack Compose 1.6.1
合并最新 Jetpack Compose 版本提升了全平台性能。详情参见 Android 开发者博客公告。
其他重要特性:
默认字体内边距变更仅对 Android 目标生效,但需注意其 副作用。
鼠标选区功能已支持其他目标,1.6.0 版本起包含 Android。
暂未移植至 Compose Multiplatform 的 Jetpack Compose 特性:
多平台拖放 。当前仅 Android 可用,桌面平台可使用现有 API
Modifier.onExternalDrag。
JetBrains 团队正致力于在后续版本中引入这些特性。
Compose Material 3 1.2.0
版本亮点:
新增实验性组件
Segmented Button,支持单选和多选。扩展色彩集,提供更多表面选项以强化 UI 信息层级。
实现说明:
ColorScheme对象现为不可变。若需修改颜色,需使用 copy 方法。表面颜色现提供多个选项,实现更灵活的色彩管理。
Material 3 变更详情见 Material Design 博客发布说明。
弹窗、对话框和下拉菜单的独立平台视图(iOS、桌面)
某些场景下,弹窗元素(如工具提示和下拉菜单)不应受初始可组合画布或应用窗口限制。这在可组合视图未占满屏幕但需显示警告对话框时尤为重要。1.6.0 版本提供了可靠实现方案。
注意:弹窗和对话框仍无法在边界外绘制内容(如最外层容器的阴影)。
iOS(稳定版)
iOS 平台默认启用此功能。如需恢复旧行为,将 platformLayers 参数设为 false:
桌面(实验性)
桌面平台需设置 compose.layers.type 系统属性。支持值:
WINDOW:将Popup和Dialog创建为独立无边框窗口。COMPONENT:在同一窗口内创建为独立 Swing 组件。需开启离屏渲染(compose.swing.render.on.graphics设为true,参见 1.5.0 版本说明 )。注意离屏渲染仅适用于ComposePanel组件。
使用示例:
文本装饰线样式支持(iOS、桌面、Web)
现可通过 PlatformTextStyle 类设置文本下划线样式。
虚线样式设置示例:
支持实线、双线、点线、虚线和波浪线样式。完整选项见 源代码。
访问系统安装字体(iOS、桌面、Web)
现可通过 SystemFont 类加载系统字体:
桌面平台可仅通过字体族名加载所有样式:
iOS 专项
无障碍支持
Compose Multiplatform for iOS 现支持残障人士以与原生 iOS UI 相同的舒适度交互:
屏幕阅读器和 VoiceOver 可访问 Compose UI 内容
支持与原生 UI 相同的导航和交互手势
详见 iOS 无障碍功能支持。
可组合视图透明度调整
ComposeUIViewController 新增配置选项,支持透明背景:
SelectionContainer 中双击/三击选文本
此前 iOS 平台仅支持在输入框通过多点触控选择文本,现扩展至 SelectionContainer 内的 Text 组件。
与 UIViewController 互操作
新增 UIKitViewController 函数,支持在 Compose UI 中嵌入原生视图控制器。
文本框光标原生行为
光标定位更精准,长按拖动行为与 iOS 原生一致。
桌面专项
实验性混合互操作改进
SwingPanel 现支持非矩形裁剪和层级叠加:
支持圆角裁剪和阴影效果
Compose 内容可覆盖 Swing 组件
启用方式:
已知限制见 拉取请求说明。
Web 专项
稳定版支持 Kotlin/Wasm 构件
稳定版框架现支持 Wasm 目标,需 Kotlin 1.9.22+。
已知问题:缺失依赖项
默认配置可能缺少以下库:
依赖 Compose Multiplatform 1.6.0-beta02 的库不兼容 1.6.0,需降级或等待更新
AndroidX 相关库需添加 Google Maven 仓库: