HarmonyOS应用开发实战:萌宠日记 - 卡片式布局复用模式分析

发布时间:2026/9/13 17:57:21

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/9/13 0:07:51

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

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

2026/9/10 6:36:49

CentOS iso 镜像定制

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

2026/9/14 11:49:31

工业串口服务器选型指南:从Modbus轮询到MQTT上报的真实性能解析

1. 这份白皮书到底在解决什么问题?——不是参数罗列,而是现场工程师的“选型决策树”工业串口服务器这东西,说白了就是给老设备装上“网络身份证”的翻译官。你车间里那台用了十五年的PLC、温控仪、电表,它们只会用RS-485或RS-232…

2026/9/14 11:49:31

西门子PLC直控EtherCAT伺服实现零换控的技术解析

1. 为什么“零换控”不是宣传话术,而是产线改造的真实技术拐点西门子 PLC 直控 EtherCAT 伺服——这个标题里藏着一个被很多工厂工程师忽略的关键信号:“直控”二字,意味着控制链路从“PLC → 运动控制器 → 伺服驱动器”压缩为“PLC → 伺服…

2026/9/14 11:49:31

嵌入式系统错误码模块设计与优化实践

1. 嵌入式错误码模块的设计背景与价值在嵌入式系统开发中,错误处理一直是个容易被忽视却又至关重要的环节。我曾参与过一个工业控制项目,系统在运行三个月后突然死机,由于缺乏有效的错误追踪机制,团队花了整整两周才定位到是一个传…

2026/9/14 11:44:30

毕业论文高效写作:九大工具与避坑指南

1. 毕业论文写作痛点与工具需求分析 本科生撰写毕业论文时普遍面临三大核心痛点:时间紧迫、格式规范复杂、学术表达困难。传统写作模式下,学生需要花费大量时间在文献检索、数据整理、格式调整等基础工作上,真正用于核心研究的时间往往不足40…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码