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 仓库: