Jetpack Compose 1.8 新增了 12 个新特性

Jetpack Compose 1.8: 12项新功能将彻底改变你构建用户界面的方式

迄今为止最大的Compose更新带来了原生自动填充, 智能动画以及让构建Android用户界面如同魔法般轻松的功能

你是否曾希望文本字段能自动填充? 或者动画能预测未来? Jetpack Compose 1.8 刚刚发布,其中包含听起来像科幻小说但实际运作如日常魔法般流畅的功能.

本次更新包含自动填充, 文本优化, 可见性追踪,以及调整@Composable大小和位置的新动画方式. 但最值得关注的是: Compose 团队已将实验性 API 从 1.7 版本的 172 个减少到 1.8 版本的 70 个------实验性 API 数量几乎减少了 50%. 你的代码现在稳定性大幅提升.

自动填充革命: 因为没人喜欢手动输入密码

还记得上次在移动设备上手动输入邮箱和密码的经历吗? 痛苦吧? Compose 1.8 终于带来了真正可用的原生自动填充支持.

自动填充是一项简化数据输入的服务. 它允许用户无需手动输入每个细节即可填写表单, 登录界面和结账流程.

现在它有多简单:

ini 复制代码
TextField(
    state = rememberTextFieldState(),
    modifier = Modifier.semantics { 
        contentType = ContentType.Username 
    }
)

就只有这些. 只需指定一个 contentType,Compose 就会处理剩下的部分------即使你的应用在后台运行. 自动填充框架会自动用黄色背景突出显示已填充的字段,就像在 View 系统中一样.

但等等,还有更多. 你可以处理多种内容类型,甚至在自动填充发生时获得回调:

ini 复制代码
Switch(
    modifier = Modifier.semantics {
        contentType = ContentType.EmailAddress
        onAutofillText { text ->
            firstLetterE = text.startsWith("E", ignoreCase = true)
            true
        }
    },
    checked = firstLetterE,
    onCheckedChange = { firstLetterE = it }
)

真正适配的文本: AutoSize 变革者

你是否曾因文本在不同屏幕尺寸下被截断或显示过小而烦恼? 这些日子将要一去不复返了.

BasicText 中,当将文本放置于容器内时,可使用 autoSize 参数,使文本自动适配容器大小.

ini 复制代码
BasicText(
    text = "This text will magically resize itself!",
    maxLines = 1,
    autoSize = TextAutoSize.StepBased(
        minFontSize = 12.sp,
        maxFontSize = 24.sp,
        stepSize = 2.sp
    )
)

你的文本现在会自行调整大小. 无需手动计算字体大小或复杂的响应式设计逻辑. 只需设置约束条件,即可见证魔法发生.

智能省略号: 当文本变得富有创意

是否希望在文本开头或中间显示省略号,而不仅仅是结尾? Compose 1.8 通过新增 TextOverflow.StartEllipsisTextOverflow.MiddleEllipsis 选项,允许你在文本行开头或中间显示省略号.

ini 复制代码
Text(
    text = "This is a very long text that will show ellipsis in the middle",
    overflow = TextOverflow.MiddleEllipsis,
    maxLines = 1
)

现在你的文件路径和长用户名可以更智能地显示.

预测未来的动画

如果你的动画能预见未来会怎样? 借助 LookaheadScope 中的新 Modifier.animateBounds,它们确实可以做到.

1.8 动画模块将 LookaheadScope 升级为稳定版本,包含多项性能和稳定性改进,并新增了 Modifier.animateBounds.

less 复制代码
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))
    }
}

Modifier可自动动画化大小和位置变化. 无需手动设置动画,无需复杂状态管理. 只需平滑, 预测性的动画,它们在到达目标位置前就已知晓方向.

可见性追踪: 终于知道用户实际看到的内容

厌倦了使用临时解决方案来追踪@Composable是否可见? Compose UI 1.8 中引入了新的Modifier onLayRectChanged,它解决了 onGloballyPositioned 无法处理的多个用例,且开销更低.

这解锁了强大的功能,例如:

  • 分析追踪用户实际看到的界面
  • 性能优化屏幕外内容
  • 智能加载图片和视频
  • 广告展示追踪

此新 API 解锁了依赖于@Composable屏幕可见性的功能. Compose 1.9 将为该低级 API 添加更高层次的抽象,以简化常见用例.

触觉反馈功能升级

希望应用程序响应更灵敏? Compose 1.8 支持更多类型的触觉反馈: Confirm, ContextClick, GestureEnd, GestureThresholdActivate, Reject, SegmentFrequentTick, SegmentTick, ToggleOn, ToggleOff, VirtualKey.

ini 复制代码
val haptics = LocalHapticFeedback.current

Button(
    onClick = { 
        haptics.performHapticFeedback(HapticFeedbackType.Confirm)
        // Handle click
    }
) {
    Text("Tap me!")
}

你的按钮, 开关和手势现在拥有触觉反馈,让交互体验更显高端.

真正有效的焦点管理

使用键盘和辅助工具进行导航变得更加顺畅. 多焦点 API 现已稳定,包括 Modifier.focusRestorer(), onEnteronExit FocusProperties. 你现在可以在调用 requestFocus 时指定 FocusDirection.

这意味着:

  • 更好的电视应用支持,支持方向导航
  • 改进的辅助功能,支持屏幕阅读器
  • 更智能的焦点恢复,当从其他屏幕返回时

你将真正感受到的性能提升

最新稳定版本包含对多个子系统(包括语义, 焦点和文本优化)的重大重写和改进. 最棒的是,你只需升级 Compose 依赖项即可获得这些功能,无需进行任何代码更改.

Compose 团队在后台进行了大量工作:

  • 更快的文本渲染,支持后台预加载
  • 更智能的懒加载布局预加载
  • 可暂停的合成,将工作负载分布到多个帧
  • 减少卡顿,提升滚动和动画流畅性

AnnotatedString中的HTML支持

需要从后端显示富文本? AnnotatedString中的HTML格式支持已扩展,现在你可以直接在Compose中处理更多HTML格式,无需复杂解析.

现代 Android 的对话框改进

全屏对话框现在会显示在系统栏之后. 你的对话框现在看起来现代且 edge-to-edge,就像用户期望的现代 Android 应用一样.

辅助功能测试实现自动化

构建可访问的应用程序现在更容易,因为测试中内置了辅助功能检查. 测试中的辅助功能检查使你能够通过自动化的辅助功能测试构建更可访问的应用程序 UI. 在用户发现之前识别无障碍问题.

API 稳定性: 基础架构更加强固

最大的新闻可能是最无聊的. Compose 团队正在积极稳定现有实验性 API------在 UI 和基础模块中,Compose 团队已将实验性 API 从 1.7 版本的 172 个减少到 1.8 版本的 70 个.

这意味着:

  • 未来的更新中破坏性更改会更少
  • 生产代码中更高的可靠性
  • 新功能的更快采用

部分 API 已被废弃(ContextualFlowRowContextualFlowColumn),但 FlowRowFlowColumn 现已稳定且性能更佳.

核心要点: 为何这至关重要

Jetpack Compose 1.8 不仅仅是又一次更新------它是 Compose 真正成为任何应用生产就绪的时刻. 凭借原生自动填充, 预测性动画和坚如磐石的 API 稳定性,现在正是全面采用 Compose 的最佳时机.

仅开发者体验的改进------从自动文本缩放到无缝自动填充------就能节省你大量重复代码的时间. 但真正的收益在于用户体验: 更流畅的动画, 更好的无障碍支持,以及用户对现代 Android 应用所期待的精良交互.

要开始使用,只需更新你的 BOM:

less 复制代码
implementation(platform("androidx.compose:compose-bom:2025.04.01"))

你最期待尝试 Compose 1.8 的哪个功能?

好吧, 今天的内容就分享到这里啦!

一家之言, 欢迎拍砖!

Happy Coding! Stay GOLDEN!

相关推荐
Kapaseker8 小时前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴8 小时前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭19 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab20 小时前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe1 天前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农1 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少1 天前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker1 天前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋1 天前
Android 协程时代,Handler 应该退休了吗?
android
火柴就是我2 天前
让我们实现一个更好看的内部阴影按钮
android·flutter