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/7/22 9:07:10 阅读更多 →
HarmonyOS应用开发实战:萌宠日记 - 健康记录分类导航设计

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

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

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

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

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

2026/7/22 9:07:10 阅读更多 →

最新新闻

青云对象存储Python SDK实战:从安装到应用开发

青云对象存储Python SDK实战:从安装到应用开发

1. 青云对象存储Python SDK实战指南 作为云计算基础设施的重要组成部分,对象存储服务近年来已成为开发者存储和管理海量非结构化数据的首选方案。青云QingCloud作为国内领先的云服务提供商,其对象存储服务凭借高可靠性和易用性获得了广泛认可。本文将基于…

2026/7/22 9:51:27 阅读更多 →
Codex 0.134版本记忆功能优化解析与实践

Codex 0.134版本记忆功能优化解析与实践

1. Codex 0.134版本的核心改进解析 Codex作为OpenAI推出的代码生成工具,在开发者社区中一直备受关注。最新发布的0.134版本虽然看似只是一个小版本更新,但却解决了一个长期困扰用户的核心痛点——记忆功能的不稳定性。这个改进看似微小,实则对…

2026/7/22 9:51:27 阅读更多 →
Blender到Unity FBX导出终极方案:解决材质丢失、动画扭曲与坐标转换

Blender到Unity FBX导出终极方案:解决材质丢失、动画扭曲与坐标转换

1. 项目概述:为什么我们需要一个“终极”导出插件? 如果你同时使用Blender和Unity进行3D内容创作,无论是独立游戏开发、影视动画制作还是建筑可视化,那么“从Blender导出FBX到Unity”这个流程,大概率是你工作流中一个既…

2026/7/22 9:51:27 阅读更多 →
寻梦丝路手游官网下载:寻梦丝路最新官方下载渠道及新手避坑指南

寻梦丝路手游官网下载:寻梦丝路最新官方下载渠道及新手避坑指南

《寻梦丝路》,是由瀛超手游独家运营的正版丝路题材 MMORPG 手游,以盛唐丝绸之路为背景,复刻经典端游丝路传说核心玩法,打造沉浸式西域冒险与商贸体验。游戏1:1复刻丝绸之路标志性场景,涵盖长安朱雀大街、大雁塔、西域戈…

2026/7/22 9:51:27 阅读更多 →
韧性测试调研

韧性测试调研

首先需对文章主题初步分类,然后再分析文章要点,直观整理。 近期要开始看韧性测试相关内容,不写综述,调研→思考→调研→实践,注意认真思考细节。 对象描述 韧性测试的对象包括? 网络服务(net…

2026/7/22 9:51:27 阅读更多 →
漫映AI智能体是什么?它能为短剧和漫剧创作做什么

漫映AI智能体是什么?它能为短剧和漫剧创作做什么

在漫映的全产业链生态中,AI智能体是支撑整个内容生产体系的核心技术引擎,也是区别于普通创作工具的关键所在。很多人会把它等同于AI画图、AI剪视频的工具集合,但实际上,漫映AI智能体是一套覆盖创作全链路、具备工业化生产能力的技…

2026/7/22 9:50:27 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻