发布者:Jolanda Verhoef – 开发者关系工程师
今天,作为 Compose 2025年4月物料清单 (BOM) 的一部分,我们发布了 Jetpack Compose(Android 的现代原生 UI 工具包,已被众多开发者采用)的 1.8 版本。此版本包含新功能,如自动填充 (autofill)、多项文本改进、可见性跟踪 (visibility tracking) 以及为可组合项 (composable) 的大小和位置添加动画的新方法。它还稳定了许多实验性 API 并修复了若干错误。
要使用今天的版本,请将你的 Compose BOM 版本升级至 2025.04.01
:
implementation(platform("androidx.compose:compose-bom:2025.04.01"))
注意: 如果你未使用物料清单 (Bill of Materials),请确保同时升级 Compose Foundation 和 Compose UI。否则,自动填充功能将无法正常工作。
自动填充 (Autofill)
自动填充 是一项简化数据输入的服务。它使用户无需手动输入每个细节即可填写表单、登录屏幕和结账流程。现在,你可以将此功能集成到你的 Compose 应用程序中。
在 Compose 文本字段中设置自动填充非常简单:
- 设置语义内容类型 (Semantics contentType):使用
Modifier.semantics
并为你的文本字段设置适当的contentType
。例如:TextField( state = rememberTextFieldState(), modifier = Modifier.semantics { contentType = ContentType.Username } )
- 处理保存凭据(用于新的或更新的信息):
a. 通过导航隐式保存:如果用户离开页面,commit()
将自动调用——无需编写代码!
b. 通过按钮显式保存:要在用户提交表单时(例如点击按钮)触发保存凭据,需检索本地AutofillManager
并调用commit()
。
有关如何在应用程序中实现自动填充的完整详细信息,请参阅 Compose 中的自动填充文档。
文本 (Text)
现在,在容器内放置文本时,你可以在 BasicText 中使用 autoSize
参数,让文本大小自动适应容器大小:
Box {
BasicText(
text = "Hello World",
maxLines = 1,
autoSize = TextAutoSize.StepBased()
)
}
你可以通过设置最小和/或最大字体大小以及定义步长来 自定义 调整大小。Compose Foundation 1.8 包含这个新的 BasicText
重载,Material 1.4 也将很快跟进一个更新的 Text
重载。
此外,Compose 1.8 通过新的 TextOverflow.StartEllipsis 或 TextOverflow.MiddleEllipsis 选项增强了文本溢出处理功能,允许你在文本行的开头或中间显示省略号。
val text = "This is a long text that will overflow"
Column(Modifier.width(200.dp)) {
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
Text(text, maxLines = 1, overflow = TextOverflow.StartEllipsis)
Text(text, maxLines = 1, overflow = TextOverflow.MiddleEllipsis)
}
最后,我们扩展了 AnnotatedString 中对 HTML 格式化的支持,增加了对项目符号列表的支持:
Text(
AnnotatedString.fromHtml(
"""
<h1>HTML content</h1>
<ul>
<li>Hello,</li>
<li>World</li>
</ul>
""".trimIndent()
)
)
可见性跟踪 (Visibility tracking)
Compose UI 1.8 引入了一个新的修饰符:onLayoutRectChanged。此 API 解决了现有 onGloballyPositioned
修饰符解决的许多用例;但是,它的开销要小得多。onLayoutRectChanged
修饰符可以根据用例需求对回调进行防抖 (debounce) 和节流 (throttle),当它被添加到 LazyColumn
或 LazyRow
中的项目时有助于提高性能。
这个新的 API 解锁了依赖于可组合项在屏幕上可见性的功能。Compose 1.9 将在此底层 API 上添加更高级别的抽象,以简化常见用例。
为可组合项边界添加动画 (Animate composable bounds)
去年我们推出了共享元素过渡,它可以为应用程序中的内容添加流畅的动画。1.8 版本的动画模块将 LookaheadScope 升级为稳定版,包含大量性能和稳定性改进,并包含一个新的修饰符 animateBounds。当在 LookaheadScope
内部使用时,此修饰符会在其可组合项的大小和屏幕位置发生变化时自动为其添加动画:
Box(
Modifier
.width(if(expanded) 180.dp else 110.dp)
.offset(x = if (expanded) 0.dp else 100.dp)
.animateBounds(lookaheadScope = this@LookaheadScope)
.background(Color.LightGray, shape = RoundedCornerShape(12.dp))
.height(50.dp)
) {
Text("Layout Content", Modifier.align(Alignment.Center))
}
提高 API 稳定性 (Increased API stability)
Jetpack Compose 利用 @Experimental
注解来标记可能在各个版本中发生变化的 API,这些功能需要超过库的 alpha 期才能稳定。我们收到了你们的反馈,许多功能被标记为实验性已有一段时间且没有变化,这带来了一种不稳定的感觉。我们正在积极致力于稳定现有的实验性 API——在 UI 和 Foundation 模块中,我们已将实验性 API 的数量从 1.7 版本的 172 个减少到 1.8 版本的 70 个。我们计划在未来的版本中继续这种跨模块的稳定化趋势。
弃用上下文流式行和列 (Deprecation of contextual flow rows and columns)
作为减少实验性注解工作的一部分,我们识别出了在近期版本中添加的、对其用例而言并非最佳解决方案的 API。这导致了决定弃用在 Foundation 1.7 中添加的实验性 ContextualFlowRow 和 ContextualFlowColumn API。如果你需要已弃用的功能,我们目前的建议是复制实现并根据需要进行调整,同时我们正在制定计划,未来推出能更好覆盖这些功能的组件。
相关的 API FlowRow 和 FlowColumn 现已稳定;然而,在上个版本中添加的新 overflow
参数现在已被弃用。
核心功能的改进和修复 (Improvements and fixes for core features)
根据开发者的反馈,我们在核心库中发布了一些特别受欢迎的功能和错误修复:
- 测试中的无障碍检查:在你的 Espresso 测试中使用 enableAccessibilityChecks 来自动测试应用程序中常见的无障碍问题。
- 使对话框铺满整个屏幕:当全屏显示时,对话框现在会考虑屏幕的完整尺寸,并将绘制在系统栏后面。
- 更轻松地测试 ClickableText:使用新的测试断言 performFirstLinkClick 验证用户点击链接时的正确行为。
- 允许自定义过度滚动 (overscroll):所有列表现在都有新的重载,允许你传递一个 OverscrollEffect。
原文地址:https://android-developers.googleblog.com/2025/04/whats-new-in-jetpack-compose-april-25.html
版权声明
禁止一切形式的转载-禁止商用-禁止衍生 申请授权