Compose Multiplatform 1.6.0:资源、UI 测试、iOS 辅助功能和预览注解 | Kotlin Blog
记得加关注, Kotlin 之路不迷路!
Kotlinlang.org
Compose Multiplatform 是由 JetBrains 开发的声明式 UI 框架,允许开发者跨平台共享 UI 实现。1.6.0 版本搭载多项强劲功能,同时与最新 Kotlin 版本以及 Google 最新 Jetpack Compose 更新¹中的更改兼容。
-
Compose Multiplatform 使用入门
https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-getting-started.html
这个版本的 Compose Multiplatform:
-
改进了资源管理库。
-
引入了 UI 测试 API。
-
添加了 iOS 辅助功能支持。
-
带来了许多功能和改进。
有关所显著更改的说明,请参阅我们的 Compose Multiplatform 1.6.0 最新变化²页面或 GitHub 上的版本说明³。
目录
通用资源 API
Compose Multiplatform 1.6.0 中最大且最受期待的更改是改进的用于共享和访问通用 Kotlin 代码资源的 API。此 API 现在允许在 Compose Multiplatform 应用程序中包含和访问更多类型的资源。
资源作为 commonMain
源集的一部分组织在多个目录中:
-
composeResources/drawable
包含图像 -
composeResources/font
包含字体 -
composeResources/values
包含字符串(strings.xml
格式) -
composeResources/files
包含其他文件。
Compose Multiplatform 为所有资源类型(不包括 files
目录)生成类型安全访问器。例如,将矢量图像 compose-multiplatform.xml
放入 composeResources/drawable
目录后,您可以使用生成的 Res
对象在 Compose Multiplatform 代码中访问它:
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import kotlinproject.composeapp.generated.resources.*
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.painterResource
@OptIn(ExperimentalResourceApi::class)
@Composable
fun Logo() {
Image(
painterResource(Res.drawable.compose_multiplatform),
contentDescription = "CMP Logo"
)
}
新的资源 API 还允许为不同用例提供同一资源的变体,包括区域设置、屏幕密度或主题。无论是本地化文本、更改深色模式下的图标颜色,还是根据屏幕分辨率提供替代图像,您都可以向目录名称添加限定符来表达这些限制。
要详细了解资源限定符以及 Compose Multiplatform 1.6.0 中新资源 API 的深入概述,请参阅官方文档⁴!
用于 UI 测试的通用 API
UI 测试有助于确保应用程序按预期运行。在 Compose Multiplatform 1.6.0 中,我们引入了一个实验性 API,允许您为 Compose Multiplatform 编写通用 UI 测试,验证应用程序用户界面在框架支持的不同平台上的行为。
例如,您可能想确保自定义组件以正确前缀显示信息字符串:
@Composable
fun MyInfoComposable(info: String, modifier: Modifier) {
Text(modifier = modifier, text = "[IFNO] $info")
}
在最新版本的 Compose Multiplatform 中,您可以使用 UI 测试验证组件在呈现时是否为文本正确添加了前缀。为此,您可以使用与 Android 上的 Jetpack Compose⁵ 相同的查找器、断言、操作和匹配器。按照文档⁶中的设置说明进行操作后,您可以编写测试来确保正确添加前缀:
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.runComposeUiTest
...
class InformationTest {
@OptIn(ExperimentalTestApi::class)
@Test
fun shouldPrefixWithInfoTag() = runComposeUiTest {
setContent {
MyInfoComposable("Important things!", modifier = Modifier.testTag("info"))
}
onNodeWithTag("info").assertTextContains("[INFO]", substring = true)
}
}
在任何目标平台上运行此测试都会显示测试结果(在本例中可以帮助您发现并纠正拼写错误!):
iOS 辅助功能支持
Compose Multiplatform for iOS 现在可以让残障人士以与原生 UI 相同的舒适度与 Compose UI 进行交互:
-
屏幕阅读器和 VoiceOver 可以访问 Compose Multiplatform UI 的内容。
-
Compose Multiplatform UI 支持使用与原生 UI 相同的手势进行导航和交互。
Compose Multiplatform 语义数据自动映射到辅助功能树中,使这一切成为现实。您还可以将此数据提供给辅助功能服务,并将其用于 XCTest 框架的测试。
有关当前辅助功能支持的实现和限制的详细信息,请参阅文档页面⁷。
@Preview annotation for Fleet
在 1.6.0 中,Compose Multiplatform 引入了通用 @Preview
注解(先前仅适用于 Android 和桌面版)。JetBrains Fleet(从 Fleet 1.31⁸ 开始)支持此注解。将 @Preview
添加到 @Composable
函数,您将能够通过装订区域图标打开预览:
使用通过 Kotlin Multiplatform 向导⁹生成的项目尝试一下!
Fleet 目前为不带形参的 @Composable
函数支持 @Preview
注解。要使用此通用注解,应将实验性 compose.components.uiToolingPreview
库添加到依赖项(而不是用于桌面和 Android 的 compose.uiTooling
)。
弹出窗口、对话框和下拉菜单的单独平台视图
将 Compose Multiplatform 与 SwiftUI 混合时,您可能只想使用 Compose 呈现屏幕的部分微件。从版本 1.6 开始,在这些场景中创建 Dialog
、Popup
或 Dropdown
可组合项时,它们可以扩展到单个微件的范围之外,甚至扩展到整个屏幕!
这也适用于桌面目标,不过目前仍为实验性功能 ¹⁰。
其他主要变化
要了解此版本中包含的其他更改:
-
参阅 Compose Multiplatform 1.6.0 最新变化²页面,其中更详细地讨论了 1.6.0 中引入的改进和功能。
-
GitHub 上的 Compose Multiplatform 版本说明³包含 1.6.0 合并拉取请求的详尽列表。
更多文章和视频
-
Compose Multiplatform 使用入门 – 教程
https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-getting-started.html
-
使用 Compose Multiplatform 为 iOS、Android 和桌面构建应用 – 视频
https://www.youtube.com/live/IGuVIRZzVTk?si=x5EH-ztI6gT2JM4c
相关链接:
1. Jetpack Compose 更新:
https://developer.android.com/jetpack/compose
2. Compose Multiplatform 1.6.0 最新变化:
https://www.jetbrains.com/help/kotlin-multiplatform-dev/whats-new-compose-1-6-0.html
3. GitHub 上的版本说明:
https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.6.0
4. 官方文档:
https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html
5. Android 上的 Jetpack Compose:
https://developer.android.com/jetpack/compose/testing
6. 文档:
https://jetbrains.com/help/kotlin-multiplatform-dev/compose-test.html
7. 文档页面:
https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-ios-accessibility.html
8. Fleet 1.31:
https://blog.jetbrains.com/fleet/2024/02/fleet-1-31-improved-markdown-experience-additional-run-configuration-macros-support-for-vitest-and-more/
9. Kotlin Multiplatform 向导:
https://kmp.jetbrains.com/
10. 实验性功能:
https://www.jetbrains.com/help/kotlin-multiplatform-dev/whats-new-compose-1-6-0.html#separate-platform-views-for-popups-dialogs-and-dropdowns-ios-desktop
本博文英文原作者:Sebastian Aigner、Aleksey Zamulla
这就是 Kotlin 编程语言
简洁、跨平台、且有趣!
本文分享自微信公众号 - JetBrains(JetBrainsChina)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2024 开源数据工程生态系统全景图
作者 | ALIREZA SADEGHI 翻译 | Debra Chen 简介 虽然生成式人工智能和ChatGPT带来的沸沸扬扬的炒作令科技界为之一振,但在数据工程领域,2023年仍然是一个令人振奋和充满活力的一年,数据工程生态系统变得更加多样化和复杂化,系统中的所有层面都在不断创新和演进。 随着各种开源工具、框架和解决方案的持续涌现,数据工程师的选择也越来越多!在这样快速变化的环境中,紧跟最新技术和趋势的重要性不言而喻。选择合适的工具来完成合适的工作是一项至关重要的技能,确保在不断变化的数据工程挑战面前保持效率和相关性。 作为一名资深数据工程师和顾问,我一直密切关注着数据工程趋势,我想在2024年初向大家介绍开源数据工程生态系统,包括识别关键的活跃项目和重要工具,让大家在这个充满活力的技术领域中能够做出明智的决策。 为什么要再出一份生态全景图? 为什么我要再出一份数据生态系统全景图呢?虽然有类似的周期性报告,比如著名的MAD Landscape、数据工程现状和Reppoint开源Top25,但我做的这份全景图专注于仅适用于数据平台和数据工程生命周期的开源工具。MAD Landscap...
- 下一篇
MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新
在 MySQL 8.0.12 中,我们引入了一种新的 DDL 算法,该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列,这是来自腾讯游戏的贡献。 然后在 MySQL 8.0.29 中,我们添加了在表中任意位置添加(或删除)列的可能性。 在这篇文章中,我想重点讨论盲目使用此功能时可能发生的一些危险。 默认算法 从 MySQL 8.0.12 开始,对于任何支持的 DDL,默认算法是 INSTANT。这意味着 ALTER 语句只会修改数据字典中表的元数据。在操作的准备和执行阶段,不会对表进行独占元数据锁,表数据不受影响,使得操作是即时的。 另外两种算法是 COPY 和 INPLACE,Online DDL 操作参见手册。 然而,即使支持操作,Online DDL 也存在限制:一个表支持 64 次即时更改。到限制后,需要“重建”该表。 如果在 ALTER 语句(DDL 操作)期间未指定算法,则会默默地选择适当的算法。当然,如果没有预料到,这可能会导致生产中出现噩梦般的情况。 始终指定算法 因此,第一个建议始终是指定算法,即使它是执行 DDL 时的默认算法。当指定算法时,如果 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境