HarmonyOS应用开发实战:萌宠日记 - 记录列表与状态标签
HarmonyOS应用开发实战萌宠日记 - 记录列表与状态标签前言记录列表是健康记录页中展示历史数据的核心组件。在萌宠日记的 HealthRecordPage 中记录列表以日期、体重值、状态标签三列布局展示每次的体重记录。状态标签使用绿色徽章标识“正常“状态让用户一目了然地掌握健康概况。本文将从萌宠日记的记录列表实现出发深入解析列表布局、状态标签设计、Divider 分割线以及数据驱动的列表渲染。一、记录列表整体设计1.1 数据结构// HealthRecordPage.ets — 体重记录数据结构 interface WeightRecord { date: string // 记录日期 weight: string // 体重值 status: string // 状态文字 statusColor: string // 状态颜色 } private weightRecords: WeightRecord[] [ { date: 2024-05-05, weight: 4.5 kg, status: 正常, statusColor: #4CAF50 }, { date: 2024-04-20, weight: 4.3 kg, status: 正常, statusColor: #4CAF50 }, { date: 2024-03-15, weight: 4.1 kg, status: 正常, statusColor: #4CAF50 } ]1.2 完整渲染// 记录列表 Column({ space: 12 }) { // 标题行 Row() { Text(记录列表) .fontSize(16) .fontWeight(FontWeight.Bold) .fontColor(#333333) Blank() Button( 记录) .fontSize(13) .fontColor(#F5A623) .backgroundColor(#FFF3E0) .borderRadius(16) .padding({ left: 12, right: 12, top: 4, bottom: 4 }) } .width(100%) // 列表项 ForEach(this.weightRecords, (record: WeightRecord) { Row() { Text(record.date) .fontSize(14) .fontColor(#666666) .width(100) Text(record.weight) .fontSize(14) .fontColor(#333333) .layoutWeight(1) Text(record.status) .fontSize(12) .fontColor(record.statusColor) .backgroundColor(#E8F5E9) .padding({ left: 8, right: 8, top: 2, bottom: 2 }) .borderRadius(8) } .width(100%) .padding({ top: 12, bottom: 12 }) // 分隔线 if (this.weightRecords.indexOf(record) this.weightRecords.length - 1) { Divider().color(#F0EBE3) } }) } .width(100%) .backgroundColor(#FFFFFF) .borderRadius(12) .padding({ left: 16, right: 16, top: 12, bottom: 8 })提示记录列表使用三列布局日期、体重、状态标签通过width(100)固定日期列宽度layoutWeight(1)让体重列撑满剩余空间状态标签在右侧固定显示。这是 ArkUI 中实现列表项等分布局的典型模式。二、列表项布局2.1 三列布局┌─────────────────────────────────────┐ │ 2024-05-05 4.5 kg [正常] │ │ 2024-04-20 4.3 kg [正常] │ │ 2024-03-15 4.1 kg [正常] │ └─────────────────────────────────────┘2.2 列宽分配列内容宽度控制说明日期记录日期width(100)固定宽度日期格式统一体重体重值layoutWeight(1)弹性自动撑满状态状态标签自适应内容宽度标签 背景色三、状态标签设计3.1 标签样式Text(record.status) .fontSize(12) // 小字号 .fontColor(record.statusColor) // 动态颜色绿色 .backgroundColor(#E8F5E9) // 浅绿色背景 .padding({ left: 8, right: 8, top: 2, bottom: 2 }) // 内边距 .borderRadius(8) // 圆角3.2 状态颜色方案状态文字色背景色语义正常#4CAF50绿色#E8F5E9浅绿健康偏瘦#FF9800橙色#FFF3E0浅橙注意偏胖#F44336红色#FFEBEE浅红警告四、标题行设计4.1 标题 添加按钮Row() { Text(记录列表) .fontSize(16) .fontWeight(FontWeight.Bold) Blank() Button( 记录) .fontSize(13) .fontColor(#F5A623) .backgroundColor(#FFF3E0) .borderRadius(16) .padding({ left: 12, right: 12, top: 4, bottom: 4 }) }五、列表项间距5.1 垂直间距Row() { // 列表项内容 } .width(100%) .padding({ top: 12, bottom: 12 }) // 上下内边距 12vp5.2 列表容器间距Column({ space: 12 }) { // 标题行 // 列表项 } .padding({ left: 16, right: 16, top: 12, bottom: 8 })六、Divider 分隔线6.1 条件渲染// 最后一项不显示分隔线 if (this.weightRecords.indexOf(record) this.weightRecords.length - 1) { Divider().color(#F0EBE3) }七、数据驱动7.1 添加记录// 添加新的体重记录 addWeightRecord(date: string, weight: string, status: string): void { const newRecord: WeightRecord { date: date, weight: ${weight} kg, status: status, statusColor: this.getStatusColor(weight) } // 插入到列表头部 this.weightRecords [newRecord, ...this.weightRecords] } // 根据体重判断状态 getStatusColor(weight: number): string { if (weight 4.0 weight 5.0) return #4CAF50 // 正常 if (weight 4.0) return #FF9800 // 偏瘦 return #F44336 // 偏胖 }八、状态标签的扩展8.1 多种状态// 根据状态动态生成标签 function getStatusTag(status: string, statusColor: string): void { Text(status) .fontSize(12) .fontColor(statusColor) .backgroundColor(getStatusBgColor(statusColor)) .padding({ left: 8, right: 8, top: 2, bottom: 2 }) .borderRadius(8) } // 获取状态背景色 function getStatusBgColor(color: string): string { const bgMap: Recordstring, string { #4CAF50: #E8F5E9, // 绿色 → 浅绿 #FF9800: #FFF3E0, // 橙色 → 浅橙 #F44336: #FFEBEE, // 红色 → 浅红 } return bgMap[color] || #F5F5F5 }九、无障碍适配Row() { Text(record.date).fontSize(14) Text(record.weight).fontSize(14) Text(record.status).fontSize(12) } .accessibilityText(${record.date}体重${record.weight}状态${record.status})十、最佳实践10.1 记录列表设计原则有序列表 — 记录列表设计的 5 个原则三列清晰日期、数值、状态三列信息层级分明状态可视化使用颜色标签直观标识状态固定列宽日期列固定宽度保证对齐最后一项无分隔线保持列表底部整洁标题 操作按钮标题行包含添加按钮方便操作10.2 萌宠日记记录列表总结设计要素值说明列数3 列日期、体重、状态日期列宽100vp固定体重列layoutWeight(1)弹性状态标签文字 背景色圆角 8vp状态颜色动态绿/橙/红分隔线#F0EBE3最后一项不显示总结本文从萌宠日记的记录列表与状态标签实现出发深入解析了列表展示的完整方法数据模型WeightRecord 接口定义记录数据三列布局日期固定、体重弹性、状态自适应状态标签绿色背景 白色文字圆角徽章标题行记录列表标题 添加按钮列表间距上下 12vp 内边距Divider 分隔线条件渲染最后一项不显示数据驱动添加记录自动更新列表状态扩展多种状态的颜色方案下一篇我们将深入添加记录按钮设计解析健康记录页中添加按钮的样式与交互。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源Row 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-rowDivider 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-dividerButton 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-buttonForEach 使用https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-foreach颜色使用规范https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/color-usage列表性能优化https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/list-optimization无障碍开发https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/accessibility-kit交互反馈https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/interaction-feedback

相关新闻

CLion插件开发实战:自动检测C++项目GPL许可证污染

CLion插件开发实战:自动检测C++项目GPL许可证污染

1. 项目概述:为什么我们需要一个GPL污染检测插件?如果你是一名C程序员,尤其是在商业公司或对开源合规有严格要求的团队里工作,那么“GPL污染”这个词很可能让你心头一紧。它不是指代码里有病毒,而是指你的专有&#xf…

2026/10/23 13:09:23 阅读更多 →
HarmonyOS应用开发实战:萌宠日记 - 健康记录分类导航设计

HarmonyOS应用开发实战:萌宠日记 - 健康记录分类导航设计

HarmonyOS应用开发实战:萌宠日记 - 健康记录分类导航设计 前言 健康记录 是 萌宠日记 的核心功能模块之一,用于记录宠物的 体重、疫苗、驱虫、体检 等健康数据。在 HealthRecordPage 中,我们使用 分类导航 设计,通过 5 个图标分类…

2026/10/25 15:59:16 阅读更多 →
基于Unity 3D的智能交通仿真系统:从游戏引擎到交通实验室

基于Unity 3D的智能交通仿真系统:从游戏引擎到交通实验室

1. 项目概述:一个能“跑”起来的城市沙盘最近在GitHub上闲逛,发现了一个挺有意思的玩意儿,一个基于Unity 3D开发的智能交通系统开源项目。说实话,第一眼看到“智能交通系统”这词儿,我脑子里蹦出来的要么是那种动辄几百…

2026/10/23 19:42:31 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →