news 2026/7/22 9:07:05

HarmonyOS应用开发实战:萌宠日记 - 记录列表与状态标签

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 }) // 上下内边距 12vp

5.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: Record<string, 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 个原则:

  1. 三列清晰:日期、数值、状态三列,信息层级分明
  2. 状态可视化:使用颜色标签直观标识状态
  3. 固定列宽:日期列固定宽度,保证对齐
  4. 最后一项无分隔线:保持列表底部整洁
  5. 标题 + 操作按钮:标题行包含添加按钮,方便操作

10.2 萌宠日记记录列表总结

设计要素说明
列数3 列日期、体重、状态
日期列宽100vp固定
体重列layoutWeight(1)弹性
状态标签文字 + 背景色圆角 8vp
状态颜色动态绿/橙/红
分隔线#F0EBE3最后一项不显示

总结

本文从萌宠日记记录列表与状态标签实现出发,深入解析了列表展示的完整方法:

  1. 数据模型:WeightRecord 接口定义记录数据
  2. 三列布局:日期固定、体重弹性、状态自适应
  3. 状态标签:绿色背景 + 白色文字,圆角徽章
  4. 标题行:记录列表标题 + 添加按钮
  5. 列表间距:上下 12vp 内边距
  6. Divider 分隔线:条件渲染,最后一项不显示
  7. 数据驱动:添加记录自动更新列表
  8. 状态扩展:多种状态的颜色方案

下一篇我们将深入添加记录按钮设计,解析健康记录页中添加按钮的样式与交互。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • Row 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-row
  • Divider 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-divider
  • Button 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button
  • ForEach 使用: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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 9:06:35

VC++ ProE二次开发实战:从环境搭建到高级应用

1. 项目概述&#xff1a;为什么选择VC进行ProE二次开发&#xff1f;在机械设计、模具制造这些行当里混了十几年&#xff0c;Pro Engineer&#xff08;现在叫Creo Parametric&#xff09;和它的二次开发&#xff0c;一直是个绕不开的话题。很多朋友&#xff0c;尤其是刚入行的工…

作者头像 李华
网站建设 2026/7/22 9:06:14

【SystemVerilog 验证】第六章 随机化

一、本章概述1. 本章学习目标本章是 SystemVerilog 约束随机测试完整核心章节&#xff0c;全书共 45 张配图分层讲解随机语法、约束、回调、内联随机、软硬约束、数组随机、种子管理、工程架构&#xff0c;承接第五章面向对象类基础&#xff0c;是 UVM 激励生成底层核心。 完整…

作者头像 李华
网站建设 2026/7/22 9:04:39

Crawl4AI:开源智能爬虫工具的技术解析与应用实践

1. Crawl4AI项目概述Crawl4AI是一个开源的、专为LLM优化的网络爬虫和内容提取工具&#xff0c;由GitHub上拥有超过7万星标的活跃社区支持。这个项目最初源于开发者对现有商业化爬虫解决方案的不满——它们往往需要账户注册、API密钥和昂贵的费用&#xff0c;却仍然无法满足基本…

作者头像 李华
网站建设 2026/7/22 9:04:38

为什么又造一个 Excel 库?

生态里 Excel 读写方案已经很成熟了——EPPlus、ClosedXML、MiniExcel、NPOI&#xff0c;各有各的适用场景。Magicodes.IE.IO 走的是另一条路&#xff1a;零运行时依赖&#xff0c;从 ZIP 到 OOXML 全部自研&#xff0c;不依赖任何第三方 Excel 库。对于类库作者来说&#xff0…

作者头像 李华
网站建设 2026/7/22 9:02:27

2026全球轮胎市场研究报告

轮胎是由橡胶及多种增强材料制成的圆形柔性部件&#xff0c;用于安装在车辆的车轮轮辋上。轮胎是车辆与地面之间唯一的接触点&#xff0c;在行车过程中起着至关重要的作用&#xff0c;直接影响行驶的安全性、舒适性和性能表现。它不仅提供车辆的牵引力和制动力&#xff0c;还能…

作者头像 李华