发布时间:2026/7/21 22:32:03
HarmonyOS应用开发实战:萌宠日记 - 卡片式布局复用模式分析 前言卡片式布局是萌宠日记中最核心的 UI 设计模式。从首页的宠物信息卡片、今日记录卡片、健康提醒卡片到宠物档案页的基本信息卡片、成长记录卡片再到社区页的活动横幅卡片、帖子卡片— 整个应用中有10 余处使用了卡片式设计。本文将从萌宠日记中所有卡片的使用出发深入解析卡片组件的复用模式、通用样式封装、差异化配置以及如何通过组件化设计实现“一处定义、多处复用“。一、卡片使用全景1.1 所有卡片清单页面卡片名称用途关键差异化首页宠物信息卡片展示宠物头像和信息头像 64×64有编辑按钮首页今日记录卡片展示日记摘要有缩略图文本截断首页健康提醒卡片健康事项列表列表项有倒计时档案页头部卡片宠物头像和信息头像 80×80更大档案页基本信息卡片标签-值列表有 Divider 分隔线档案页成长记录卡片成长阶段网格4 列网格布局社区活动横幅卡片活动推广按钮 文案社区帖子卡片用户动态头像 正文 图片统计日记数量卡片统计数据柱状图 数字统计心情分布卡片饼图 图例图表 百分比统计活动统计卡片活动次数图标 数字1.2 卡片通用样式// 所有卡片的通用样式 // 背景色白色 // 圆角16vp // 阴影轻微 // 内边距16vp // 统一的卡片容器 Column() { // 卡片内容 } .width(100%) .backgroundColor(#FFFFFF) .borderRadius(16) .shadow({ radius: 4, color: #10000000, offsetY: 2 })提示萌宠日记中所有卡片都遵循白色背景 16vp 圆角 轻微阴影的统一视觉规范。但部分卡片如今日记录卡片、健康提醒卡片没有使用阴影以保持视觉层次上的区分。二、通用卡片组件封装2.1 基础卡片组件// 通用卡片组件 Component export struct Card { Prop backgroundColor: string #FFFFFF Prop borderRadius: number 16 Prop paddingValue: number 16 Prop hasShadow: boolean true build() { Column() { // 卡片内容通过 BuilderParam 传入 if (this.content) { this.content() } } .width(100%) .backgroundColor(this.backgroundColor) .borderRadius(this.borderRadius) .padding(this.paddingValue) .shadow( this.hasShadow ? { radius: 4, color: #10000000, offsetY: 2 } : undefined ) } BuilderParam content?: () void }2.2 使用示例// 使用通用卡片组件 Card({ paddingValue: 16 }) { Column({ space: 12 }) { Text(基本信息).fontSize(16).fontWeight(FontWeight.Bold) // 列表内容... } }三、卡片组件参数化3.1 参数设计interface CardConfig { backgroundColor?: string // 背景色默认白色 borderRadius?: number // 圆角默认 16 paddingValue?: number // 内边距默认 16 hasShadow?: boolean // 是否有阴影默认 true marginValue?: Margin // 外边距 onClick?: () void // 点击事件 }3.2 不同卡片的配置卡片backgroundColorborderRadiushasShadowpaddingValue宠物信息卡片白色16true16今日记录卡片白色12false16健康提醒卡片白色12false16活动横幅卡片白色16true16统计卡片白色16true16帖子卡片白色16true16四、卡片内容的复用4.1 标题行复用// 卡片标题行 — 多处复用 Builder CardTitle(title: string, action?: { label: string, onClick: () void }) { Row() { Text(title) .fontSize(16) .fontWeight(FontWeight.Bold) .fontColor(#333333) Blank() if (action) { Text(action.label) .fontSize(14) .fontColor(#F5A623) .onClick(action.onClick) } } .width(100%) }4.2 使用示例// 基本信息卡片 Column({ space: 12 }) { CardTitle(基本信息) // 列表内容... } // 健康提醒卡片 Column({ space: 12 }) { CardTitle(健康提醒, { label: , onClick: () {} }) // 提醒列表... } // 统计卡片 Column({ space: 12 }) { CardTitle(日记数量) // 统计内容... }五、卡片内边距与外边距5.1 边距分类// 卡片内边距 — 内容与卡片边框的距离 .padding(16) // 卡片外边距 — 卡片与周围元素的距离 .margin({ left: 16, right: 16, bottom: 16 })5.2 边距规范边距类型默认值说明卡片内边距16vp内容与卡片边框卡片左右外边距16vp卡片与屏幕边缘卡片上下间距16vp卡片之间的垂直间距标题与内容间距12vp卡片内标题与内容的间距六、卡片阴影策略6.1 阴影使用场景// 有阴影的卡片 — 突出显示 .shadow({ radius: 4, color: #10000000, offsetY: 2 }) // 宠物信息卡片、活动横幅、统计卡片、帖子卡片 // 无阴影的卡片 — 内容展示 // 今日记录卡片、健康提醒卡片6.2 阴影设计原则卡片类型阴影设计意图独立卡片有阴影从页面背景中突出列表项卡片无阴影减少视觉噪点嵌套卡片无阴影避免阴影叠加七、卡片布局的组件化7.1 组件拆分CardContainer卡片容器 ├── CardTitle标题行 ├── CardContent内容区 │ ├── InfoList信息列表 │ ├── GridLayout网格布局 │ └── ChartContent图表内容 └── CardFooter底部操作区7.2 组件复用关系// 宠物档案页 CardContainer CardTitle InfoList // 统计页 CardContainer CardTitle ChartContent // 社区页 CardContainer CardTitle PostContent八、卡片复用收益8.1 代码量对比实现方式代码量维护成本一致性重复编写每条卡片 15-20 行高低组件封装基础组件 30 行 使用 5 行低高8.2 复用统计复用维度复用次数说明卡片容器样式10 次所有卡片标题行组件6 次带标题的卡片阴影配置5 次独立卡片16vp 内边距10 次所有卡片九、卡片性能优化9.1 渲染性能优化策略说明避免嵌套过深卡片容器嵌套不超过 3 层使用 Builder 复用避免重复创建组件实例条件渲染阴影等属性按需渲染轻量组件卡片内容使用轻量组件9.2 卡片在列表中的性能// 在列表中使用卡片时使用 LazyForEach 优化 LazyForEach(this.cardData, (item: CardData) { ListItem() { Card({ hasShadow: true }) { // 卡片内容 } } }, (item: CardData) item.id)十、最佳实践10.1 卡片设计原则有序列表 — 卡片设计的 5 个原则统一视觉规范所有卡片使用相同的背景色、圆角、阴影风格组件化封装将卡片容器封装为通用组件减少重复代码参数化配置通过参数控制卡片样式差异阴影、圆角、内边距内容与容器分离卡片容器只负责样式内容由 BuilderParam 传入差异化恰到好处不同卡片在统一风格下保留差异化特征10.2 萌宠日记卡片复用总结卡片类型容器标题内容阴影宠物信息卡片Card无头像 信息✅今日记录卡片CardCardTitle文本 缩略图❌健康提醒卡片CardCardTitle列表项❌基本信息卡片CardCardTitle标签-值列表✅成长记录卡片CardCardTitle网格布局✅活动横幅卡片Card无文案 按钮✅帖子卡片Card无头像 正文 图片✅统计卡片CardCardTitle图表 数字✅总结本文从萌宠日记的卡片式布局复用出发深入解析了卡片组件化的完整方法卡片全景10 处卡片使用覆盖所有主要页面通用组件封装Card 组件 BuilderParam 内容插槽参数化配置backgroundColor、borderRadius、hasShadow 等标题行复用CardTitle Builder 复用 6 次边距规范统一的 16vp 内边距和外边距阴影策略独立卡片有阴影列表项无阴影组件拆分CardContainer → CardTitle → CardContent复用收益减少代码量、提升一致性、降低维护成本卡片式布局的组件化复用是萌宠日记保持 UI 一致性和开发效率的关键设计模式。下一篇我们将深入宠物信息数据结构设计解析宠物数据模型的设计与演进。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源Component 自定义组件https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-create-custom-componentsBuilderParam 装饰器https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-builderparamProp 装饰器https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-prop卡片设计指南https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/design-cards阴影属性https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-shadow-effect组件化设计https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/component-based-design布局基础https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkui-layout性能优化https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/performance-optimization

相关新闻

2026/7/21 22:27:02

C++实现独立事件概率计算:从数学原理到工程实践

在实际编程竞赛和算法练习中,我们经常会遇到一类问题:给定一系列事件发生的概率,需要计算特定事件组合(如“至少发生一个”或“都不发生”)的概率。这类问题不仅考察对概率论基础公式的理解,更考验将数学逻…

2026/7/21 22:27:02

CentOS iso 镜像定制

CentOS iso 镜像定制 内核 kernelimages/pxeboot/vmlinuz 根文件系统 initrdimages/pxeboot/initrd.img 开机引导系统安装的内核(vmlinuz)及RAM镜像(initrd.img),在引导系统时会载入内存,给系统的安装提供一个Linux安装引导平台&a…

2026/7/22 1:32:52

全排列回溯经典-计算机考试—东方仙盟

一、题目描述给定一个数组 a[] {1,2,3...n}&#xff0c;利用回溯算法输出数组的所有全排列。例如 1 2 3 的全排列&#xff1a;123、132、213、231、312、321算法思想&#xff1a;回溯、深度优先、标记已使用数字二、完整代码#include <stdio.h>// n: 总个数 // k: 当前正…

2026/7/22 1:32:52

教学 Agent 设计:不是回答所有问题,而是引导学生思考

教学 Agent 设计&#xff1a;不是回答所有问题&#xff0c;而是引导学生思考 一、个性化深度引言 如果教学 Agent 只是一个"更友好的搜索引擎"&#xff0c;学生问什么它就答什么&#xff0c;那它的价值约等于一个免费的家教——帮你解答作业&#xff0c;但不会提升你…

2026/7/22 1:32:52

计算机联结技术:从硬件协同到数据流动的全面解析

1. 项目概述&#xff1a;计算机联结时代的来临"计算机的未来在于联结"这个标题直指当下技术发展的核心趋势。作为一名从业十余年的技术观察者&#xff0c;我亲眼见证了从单机运算到万物互联的演进过程。联结&#xff08;Connectivity&#xff09;正在重塑计算机技术的…

2026/7/22 1:32:52

亿级数据点的渲染突围:ECharts 增量渲染与降采样实战

亿级数据点的渲染突围&#xff1a;ECharts 增量渲染与降采样实战 一、千万点一屏&#xff0c;浏览器为什么不干了 三千万条指标点一次性推到前端。首屏加载超过 12 秒&#xff0c;拖动一下图表直接转圈两秒。这事我们去年在时序监控大屏上踩过&#xff0c;老板盯了五分钟进度…

2026/7/22 1:32:52

深入解析TI C2000 EMIF:SDRAM刷新机制与异步接口配置实战

1. 项目概述&#xff1a;为什么需要深入理解EMIF的SDRAM与异步接口&#xff1f;在嵌入式系统&#xff0c;尤其是基于TI C2000系列&#xff08;如TMS320F2837xS&#xff09;这类实时控制器的项目中&#xff0c;外部存储器接口&#xff08;EMIF&#xff09;往往是性能与稳定性的关…

2026/7/22 1:27:52

Dify与n8n对比:AI应用开发与自动化流程工具选择指南

1. 工具定位的本质差异&#xff1a;从基因看能力边界当我们需要在Dify和n8n之间做出选择时&#xff0c;首先要理解它们的"基因差异"。就像选择汽车和轮船——它们都能带你到达目的地&#xff0c;但适用的环境完全不同。n8n诞生于2019年&#xff0c;最初的设计目标就是…

2026/7/20 6:33:00

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/22 0:02:17

抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具

抓包代理链路下的 TLS 指纹变化分析&#xff1a;为什么调试环境会影响访问结果 摘要 在网页调试、接口联调、自动化巡检和授权采集排查中&#xff0c;抓包是常见手段。但很多开发者会遇到一个现象&#xff1a;正常访问页面时没有问题&#xff0c;一进入抓包或代理调试环境&…

2026/7/22 0:02:17

微信QQ聊天记录误删恢复与备份方案全指南

1. 聊天记录误删的常见场景与恢复思路作为一名长期关注数据安全的技术博主&#xff0c;我处理过上百起聊天记录误删的求助案例。手机误操作、系统升级失败、设备损坏是三大常见诱因。上周就遇到用户更新微信时断电&#xff0c;导致近两年的工作群聊记录全部消失的极端案例。不同…

2026/7/22 0:02:17

2026最新8款个人AI编程免费工具深度实测

作为一名全栈独立开发者&#xff0c;我最近半年一直在折腾副业项目&#xff0c;每个月在AI编程工具上的订阅费算下来其实也不算便宜。作为个人开发者&#xff0c;我们追求的就是用最少的成本获得最高效的开发体验。TRAE 基础版免费&#xff0c;字节跳动出品的国内首款 AI 原生 …

2026/7/21 20:02:44

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…