当前位置: 首页 > news >正文

HarmonyOS应用开发实战:萌宠日记 - 基本信息列表与 Divider 分隔线

HarmonyOS应用开发实战:萌宠日记 - 基本信息列表与 Divider 分隔线

前言

萌宠日记宠物档案页中,基本信息列表标签-值的键值对形式展示宠物的生日、到家日、体重、性格、绝育情况等核心数据。列表项之间使用Divider 分隔线进行视觉分割,既保持了信息的清晰度,又维持了卡片布局的简洁性。

本文将从萌宠日记的基本信息列表实现出发,深入解析 Divider 组件的使用、列表项布局、数据驱动渲染,以及分隔线设计的视觉原则。

一、基本信息列表整体设计

1.1 数据模型

// PetProfilePage.ets — 基本信息数据结构 interface BasicInfoItem { label: string // 标签名(如"生日") value: string // 标签值(如"2022-02-14") } private basicInfo: BasicInfoItem[] = [ { label: '生日', value: '2022-02-14' }, { label: '到家日', value: '2022-04-20' }, { label: '体重', value: '4.5 kg' }, { label: '性格', value: '活泼、黏人、贪吃' }, { label: '绝育情况', value: '已绝育' } ]

1.2 列表渲染

// 基本信息卡片 Column({ space: 12 }) { // 标题 Text('基本信息') .fontSize(16) .fontWeight(FontWeight.Bold) .fontColor('#333333') .width('100%') // 列表项 ForEach(this.basicInfo, (item: BasicInfoItem) => { Row() { Text(item.label) .fontSize(14) .fontColor('#999999') .width(80) Blank() Text(item.value) .fontSize(14) .fontColor('#333333') .textAlign(TextAlign.End) } .width('100%') .padding({ top: 12, bottom: 12 }) // 分隔线(除最后一项外) if (this.basicInfo.indexOf(item) < this.basicInfo.length - 1) { Divider() .color('#F0EBE3') } }) } .width('100%') .backgroundColor('#FFFFFF') .borderRadius(16) .padding({ left: 16, right: 16, top: 16, bottom: 8 }) .shadow({ radius: 4, color: '#10000000', offsetY: 2 })

提示:Divider 分隔线使用条件渲染— 通过indexOf判断当前项是否为最后一项,只有非最后一项才渲染分隔线。这样最后一项下方就不会有多余的分隔线,保持了卡片底部的整洁。

二、列表项布局

2.1 标签-值布局

Row() { Text(item.label) // 左侧标签 .fontSize(14) .fontColor('#999999') .width(80) // 固定宽度,保证对齐 Blank() // 弹性占位 Text(item.value) // 右侧值 .fontSize(14) .fontColor('#333333') .textAlign(TextAlign.End) } .width('100%') .padding({ top: 12, bottom: 12 })

2.2 布局结构

┌─────────────────────────────────────┐ │ 生日 2022-02-14 │ │ 到家日 2022-04-20 │ │ 体重 4.5 kg │ │ 性格 活泼、黏人、贪吃 │ │ 绝育情况 已绝育 │ └─────────────────────────────────────┘

三、Divider 组件详解

3.1 核心属性

Divider() .color('#F0EBE3') // 分隔线颜色:米色 .height(1) // 分隔线高度:1vp(默认) .width('100%') // 宽度:100%(默认) .margin({ top: 0, bottom: 0 }) // 外边距(默认 0)

3.2 Divider 属性对照表

属性类型默认值萌宠日记配置说明
colorColor系统默认'#F0EBE3'米色,与主题色系协调
heightLength1未配置(默认 1vp)线条粗细
widthLength'100%'未配置(默认 100%)线条宽度
marginMargin{ top: 0, bottom: 0 }未配置外边距
verticalbooleanfalse未配置是否垂直方向

3.3 Divider 颜色选择

// 分隔线颜色应与背景色协调 Divider().color('#F0EBE3') // 米色,与白色背景和暖色主题协调

四、条件渲染分隔线

4.1 条件判断

ForEach(this.basicInfo, (item: BasicInfoItem) => { // 列表项内容 Row() { ... } // 条件渲染分隔线 if (this.basicInfo.indexOf(item) < this.basicInfo.length - 1) { Divider().color('#F0EBE3') } })

4.2 渲染效果

生日 2022-02-14 ────────────────────────────────────── ← 分隔线(有) 到家日 2022-04-20 ────────────────────────────────────── ← 分隔线(有) 体重 4.5 kg ────────────────────────────────────── ← 分隔线(有) 性格 活泼、黏人、贪吃 ────────────────────────────────────── ← 分隔线(有) 绝育情况 已绝育 ← 无分隔线(最后一项)

五、标签宽度对齐

5.1 固定宽度对齐

Text(item.label) .width(80) // 标签固定宽度 80vp,保证所有标签左对齐

5.2 对齐方式对比

对齐方式代码效果适用场景
固定宽度width(80)标签宽度一致,值右对齐标签文字长度差异不大
百分比width('30%')按比例分配大屏设备
自适应不设宽度内容宽度标签文字长度相近

六、卡片标题设计

6.1 标题样式

Text('基本信息') .fontSize(16) .fontWeight(FontWeight.Bold) .fontColor('#333333') .width('100%')

6.2 卡片标题规范

卡片标题字号字重颜色说明
基本信息16fpBold深灰档案页
成长记录16fpBold深灰档案页
今日记录16fpBold深灰首页
健康提醒16fpBold深灰首页
体重变化16fpBold深灰健康记录页

七、卡片内边距

7.1 内边距设计

.padding({ left: 16, right: 16, top: 16, bottom: 8 })
方向说明
16vp与卡片左边框距离
16vp与卡片右边框距离
16vp标题与卡片上边框距离
8vp最后一项与卡片下边框距离

7.2 底部留白

底部padding: 8vp而非16vp,是因为最后一项的padding-bottom已经提供了 12vp 的间距,加上 8vp 的卡片内边距,总间距为 20vp,视觉上刚好合适。

八、数据驱动渲染

8.1 ForEach 渲染

ForEach(this.basicInfo, (item: BasicInfoItem) => { // 列表项内容 })

8.2 数据修改

// 修改基本信息数据 updatePetInfo(label: string, newValue: string): void { const index = this.basicInfo.findIndex(item => item.label === label) if (index !== -1) { this.basicInfo[index] = { ...this.basicInfo[index], value: newValue } // @State 驱动 UI 自动更新 } }

九、其他 Divider 使用场景

9.1 萌宠日记中的 Divider 使用

页面使用位置颜色
宠物档案页基本信息列表项之间#F0EBE3
首页日记标题和内容之间#F0EBE3
个人中心菜单项之间#F0EBE3
健康记录记录列表项之间#F0EBE3

9.2 分隔线设计原则

// 水平分隔线(默认) Divider().color('#F0EBE3') // 垂直分隔线 Divider() .vertical(true) .height(20) .color('#F0EBE3')

十、最佳实践

10.1 分隔线设计原则

有序列表 — Divider 使用的 5 个原则:

  1. 颜色柔和:分隔线颜色不宜过深,使用#F0EBE3等浅色
  2. 细线为主:默认高度 1vp 即可,过粗会显得笨重
  3. 最后一项不分隔:最后一项下方不渲染分隔线
  4. 间距适当时不用分隔线:如果间距足够区分,可以省略分隔线
  5. 与背景色协调:分隔线颜色应与背景色和主题色协调

10.2 萌宠日记基本信息列表总结

设计要素说明
标签宽度80vp固定宽度,左对齐
值对齐右对齐textAlign(TextAlign.End)
标签字号14fp灰色
值字号14fp深灰色
列表项间距上下 12vppadding top/bottom
分隔线颜色#F0EBE3米色
分隔线高度1vp细线

总结

本文从萌宠日记基本信息列表实现出发,深入解析了 Divider 分隔线和列表项布局的完整方法:

  1. 数据模型:BasicInfoItem 接口定义标签-值结构
  2. 列表渲染:ForEach 动态渲染 5 项基本信息
  3. 标签-值布局:Row + Blank + 固定宽度实现左右分布
  4. Divider 组件:color、height、width、vertical 属性
  5. 条件渲染:indexOf 判断最后一项,避免多余的 Divider
  6. 卡片标题:16fp Bold 的卡片标题样式规范
  7. 内边距设计:左右 16vp,上下差异化
  8. 数据驱动:@State 驱动 UI 自动更新

Divider 虽小,但在列表布局中起着重要的视觉分割作用,合理使用能让界面更加清晰有序。

下一篇我们将深入成长记录卡片网格布局,解析档案页中成长记录区块的实现。

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


相关资源:

  • Divider 组件参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-divider
  • ForEach 使用:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-foreach
  • Blank 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-blank
  • Row 组件参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-row
  • Text 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text
  • @State 装饰器:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-state
  • 卡片设计指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/design-cards
  • 布局基础:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkui-layout
http://www.jsqmd.com/news/1241665/

相关文章:

  • 多因子量化交易策略:技术指标、情绪分析与资金流向融合实战
  • Claude5大模型自主恢复机制与内部语言解析
  • 长沙回收百达翡丽,表友如何避开恶意压价不良商家 - 一日一测评
  • 上海宇舶中国官方售后服务网点|官方服务电话及地址权威公示(2026年7月最新) - 亨得利售后服务官网
  • 【Runway面部替换实战指南】:20年AI视觉工程师亲授5大避坑法则与实时替换精度提升87%的秘钥
  • 多核DSP内存管理实战:MPAX配置、DMA优化与系统级调试
  • 从本地生活到AI安全:三个技术项目的实战之路
  • 同为 Agentic AI,为何单人跑通的项目一上团队协作就崩盘?
  • TI微控制器ESM模块:ERROR引脚时序、寄存器配置与故障处理实战
  • 2026年TOP5全自动焊接成型一体机:行业领先者如何脱颖而出?
  • 计算机毕业设计之基于SpringBoot的特色乡村综合展示平台的设计与实现
  • springboot篮球俱乐部管理系统
  • Unity URP渲染管线中材质变粉问题的成因与系统化解决方案
  • 车门侧面围度引导测量:硬件参数+四步算法详解
  • C语言高级指针技术与回调机制实战解析
  • Take Your Time:集成化2D开发工具提升资源管理与动画制作效率
  • Codebase-Memory:大模型时代AI编程助手的代码记忆优化方案
  • 嵌入式网络驱动开发:EMAC/MDIO接收控制与中断管理寄存器详解
  • 跨平台iOS应用下载终极指南:用ipatool在任意系统获取IPA文件
  • TI C6472/TCI6486 DSP电源设计:从架构选型到PCB布局的工程实践
  • 多平台直播推流调度系统架构:从单路到多路分发
  • Spring Data JPA核心原理与高效实践指南
  • 新疆承插管件采购怎么选厂家?老牌管道企业唐工管道值得信赖 - 米諾
  • Windows系统搭建OpenHarmony开发环境:WSL2配置指南
  • 2026年基础清洁补水护肤线下购买渠道推荐10家:正规合规服务商盘点、选型逻辑与避坑FAQ全解析 - U渠道
  • 嵌入式系统开发及应用(高级)交互式教程
  • Claude Code Loop Engineering:AI编程的人机协同闭环实践
  • Unity复古酒吧场景资产包:从PBR材质到交互实现的完整开发指南
  • 外包驻场开发如何做好需求沟通、任务管理和工作复盘
  • 热键查看神器,免费使用