- 屏蔽作者: 0warn0error
- 举报
jym,后续来了,老板被我炒了。(打码打的真累)
收起
查看大图
向左旋转
向右旋转
分享
672
847
- #每天一个知识点#
CMP跨端共享UI介绍和原理解读
CMP(Compose Multiplatform)由JetBrains打造,基于Jetpack Compose声明式语法构建跨端共享UI体系,支持Android、iOS、桌面、Web多平台复用,和Flutter全自绘像素路线有着本质区别。CMP的核心是**一份Compose UI定义,多平台差异化渲染**,并不生成SwiftUI或原生View业务代码,以此实现布局、组件、动效、状态逻辑的跨端复用。
底层依托Compose组合函数与快照状态机制:@Composable函数描述UI结构,采用组合模型替代类继承;快照系统自动追踪状态依赖,状态变更时触发局部重组,只刷新变化节点,控制渲染开销。Android端直接复用Jetpack Compose成熟渲染链路,对接原生View体系;iOS、桌面、Web端切换对应渲染后端,依托Skia完成组件绘制。
它最大优势是语法与Jetpack Compose完全同源,Android开发者上手几乎无门槛。同时提供expect/actual机制,作为原生能力桥接:主体UI保持共享,平台特有能力(系统控件、专属交互、硬件接口)可单独封装,做到UI统一的前提下,保留平台原生体验,不会强行抹平HIG、M3这类平台设计范式差异。
短板同样清晰:iOS侧并非原生控件渲染,无障碍、系统手势适配需要额外投入;生态体量、成熟度不及原生与Flutter,复杂定制场景坑点更多。CMP更适合深耕Compose栈、多端UI视觉一致性要求高,又需要灵活接入少量原生能力的项目,是兼顾开发效率、声明式设计思想的跨端UI方案。3 赞 · 0 评论 - 想转型 Agent 研发,不知道怎么系统学习怎么办?3 赞 · 3 评论
- #每天一个知识点#
**Material 3(Material You)** 是 Google 设计系统的演进版,核心原则为**个性化、自适应与表现力**:界面从用户壁纸提取主题色,随屏幕尺寸灵活重组,并通过形状与动效传递情感。其最具革命性的特性是**动态取色**:算法基于 HCT 颜色空间,从单一壁纸种子色生成明暗两套完整方案,自动保障对比度与无障碍要求。与此同时,M3 用**语义角色**取代硬编码色值,组件只引用 `primary`、`onSurface`、`surfaceContainer` 等约 26 个角色名,换主题时无需改动组件代码。**色调表面**替代重阴影:层级越高,表面越向主色靠拢,以色彩而非投影表达深度。形状上,按钮默认为全圆角,卡片可用 12dp、对话框可用 28dp 等令牌化圆角;动效则引入弹簧物理,使交互更具“活性”。最简代码示例如下。
**Compose 示例**:
```kotlin
FilledButton(onClick = { /* 提交 */ }) { Text("提交") }
ExtendedFloatingActionButton(
onClick = { /* 新建 */ },
icon = { Icon(Icons.Default.Add, null) },
text = { Text("新建项目") }
)
```
**解读**:`FilledButton` 承担当前上下文的主操作(如提交),而 `ExtendedFloatingActionButton` 专用于“创建新事物”,二者在 M3 强调层级中位置不同,不可混用。更关键的是,组件颜色全部来自 `MaterialTheme.colorScheme` 的角色,不出现 `#FF6200` 这类字面色值——这正是 M3 将设计系统从“皮肤”升级为“语义框架”的实质:品牌色、动态壁纸、明暗模式都只是角色解析的不同输入,视觉一致性由角色关系保证,而非由固定像素保证。2 赞 · 1 评论