19.[HarmonyOS NEXT Column案例二(下)] 时间线组件的详细实现与样式定制

简介: 在上一篇教程中,我们介绍了Column组件的reverse属性及其在时间线应用中的基本用法。本篇将深入探讨时间线中各个子组件的实现细节,包括ForEach循环渲染、Row布局、Text组件的样式设置,以及如何通过这些组件构建一个完整的时间线界面。


项目已开源,开源地址: https://gitcode.com/nutpi/HarmonyosNextCaseStudyTutorial , 欢迎fork & star

案例演示


1. 引言

在上一篇教程中,我们介绍了Column组件的reverse属性及其在时间线应用中的基本用法。本篇将深入探讨时间线中各个子组件的实现细节,包括ForEach循环渲染、Row布局、Text组件的样式设置,以及如何通过这些组件构建一个完整的时间线界面。

2. ForEach循环渲染消息列表

在时间线应用中,需要渲染多条消息,这时可以使用ForEach进行循环渲染。

2.1 ForEach的基本用法

在我们的案例中,ForEach的使用如下:

ForEach(this.messages.reverse(), (msg:string, index) => {
    // 渲染每条消息
}, (msg:string) => msg)

2.2 ForEach参数详解

ForEach接受三个参数:

参数

类型

描述

第一个参数

数组

要遍历的数据源,这里是反转后的消息数组

第二个参数

回调函数

定义如何渲染每个数组元素,接收当前元素和索引作为参数

第三个参数

回调函数

为每个元素生成唯一标识符,用于优化渲染性能

2.3 唯一标识符的重要性

ForEach的第三个参数用于生成唯一标识符,这对于列表渲染的性能优化非常重要:

(msg:string) => msg

在本例中,直接使用消息字符串作为唯一标识符。在实际应用中,如果数据是对象数组,通常会使用对象的唯一ID属性作为标识符。

3. Row布局实现消息项

每条消息项使用Row组件实现水平布局,包含时间戳和消息内容两部分。

3.1 Row组件的基本结构

Row({ space: 8 })
{
    // 时间戳
    Text(msg.split(': ')[0])
        .fontSize(12)
        .fontColor(0x666666)
        .width(80)
        .textAlign(TextAlign.Start)
        .textOverflow({ overflow:TextOverflow.MARQUEE })
    // 消息内容
    Text(msg.split(': ')[1])
        .fontSize(14)
        .lineHeight(1.5)
        .flexGrow(1)
        .textOverflow({ overflow:TextOverflow.MARQUEE })
}
.width('100%')
.padding(12)
.backgroundColor(index % 2 === 0 ? 0xF5F5F5 : 0xFFFFFF) // 交替背景色
.borderRadius(8)

3.2 Row组件参数详解

参数/属性

作用

space

8

设置子组件之间的水平间距为8vp

width

'100%'

设置Row宽度占父容器的100%

padding

12

设置内边距为12vp

backgroundColor

条件表达式

根据索引设置交替背景色

borderRadius

8

设置边框圆角为8vp

3.3 交替背景色的实现

交替背景色是列表显示的常用技巧,可以提高可读性。在我们的案例中,通过索引的奇偶性来设置不同的背景色:

.backgroundColor(index % 2 === 0 ? 0xF5F5F5 : 0xFFFFFF) // 交替背景色
  • 当索引为偶数时,背景色为浅灰色(0xF5F5F5)
  • 当索引为奇数时,背景色为白色(0xFFFFFF)

4. Text组件样式定制

时间线中的每条消息包含两个Text组件:时间戳和消息内容,它们有不同的样式设置。

4.1 时间戳Text组件

// 时间戳
Text(msg.split(': ')[0])
    .fontSize(12)
    .fontColor(0x666666)
    .width(80)
    .textAlign(TextAlign.Start)
    .textOverflow({ overflow:TextOverflow.MARQUEE })

4.1.1 时间戳Text组件属性详解

属性

作用

fontSize

12

设置字体大小为12vp,较小的字体适合时间戳

fontColor

0x666666

设置字体颜色为深灰色,使其不太突兀

width

80

设置固定宽度为80vp,保证时间戳对齐

textAlign

TextAlign.Start

设置文本左对齐

textOverflow

{ overflow:TextOverflow.MARQUEE }

设置文本溢出时显示为跑马灯效果

4.2 消息内容Text组件

// 消息内容
Text(msg.split(': ')[1])
    .fontSize(14)
    .lineHeight(1.5)
    .flexGrow(1)
    .textOverflow({ overflow:TextOverflow.MARQUEE })

4.2.1 消息内容Text组件属性详解

属性

作用

fontSize

14

设置字体大小为14vp,比时间戳大,突出主要内容

lineHeight

1.5

设置行高为字体大小的1.5倍,提高可读性

flexGrow

1

设置弹性增长系数为1,使其占据剩余空间

textOverflow

{ overflow:TextOverflow.MARQUEE }

设置文本溢出时显示为跑马灯效果

4.3 文本溢出处理

TextOverflow是处理文本溢出的重要属性,在我们的案例中,使用了MARQUEE(跑马灯)效果:

.textOverflow({ overflow:TextOverflow.MARQUEE })

TextOverflow枚举值包括:

枚举值

描述

CLIP

裁剪溢出的文本

ELLIPSIS

用省略号表示溢出的文本

MARQUEE

跑马灯效果,文本会滚动显示

NONE

不处理溢出文本,可能导致文本超出容器边界

5. 布局技巧与样式一致性

在时间线设计中,保持布局合理和样式一致性是提升用户体验的关键。

5.1 间距规范

元素

间距

消息项之间

16vp(通过Column的space参数设置)

时间戳与消息内容之间

8vp(通过Row的space参数设置)

消息项内边距

12vp(通过Row的padding设置)

列表与屏幕边缘

24vp(通过Column的padding设置)

5.2 字体规范

元素

字体大小

字体颜色

时间戳

12vp

深灰色(0x666666)

消息内容

14vp

默认颜色(黑色)

5.3 颜色规范

元素

颜色

十六进制值

偶数项背景

浅灰色

0xF5F5F5

奇数项背景

白色

0xFFFFFF

时间戳文字

深灰色

0x666666

消息内容文字

黑色

默认

5.4 圆角规范

消息项统一使用8vp的圆角,保持视觉一致性。

6. 完整代码分析

让我们回顾完整的TimelineExample组件代码:

@Component
export struct TimelineExample {
    private messages: string[] = [
        '2025-05-30 15:45: 您好,欢迎使用HarmonyOS NEXT!',
        '2025-05-30 15:40: 系统已为您更新最新通知',
        '2025-05-30 15:35: 您的订单已发货'
    ]
    build() {
        Column({ space: 16 })
             { // 固定高度,模拟列表容器
            ForEach(this.messages.reverse(), (msg:string, index) => { // 反转数组保持渲染顺序
                Row({ space: 8 })
                {
                    // 时间戳
                    Text(msg.split(': ')[0])
                        .fontSize(12)
                        .fontColor(0x666666)
                        .width(80)
                        .textAlign(TextAlign.Start)
                        .textOverflow({ overflow:TextOverflow.MARQUEE })
                    // 消息内容
                    Text(msg.split(': ')[1])
                        .fontSize(14)
                        .lineHeight(1.5)
                        .flexGrow(1)
                        .textOverflow({ overflow:TextOverflow.MARQUEE })
                }
                .width('100%')
                .padding(12)
                .backgroundColor(index % 2 === 0 ? 0xF5F5F5 : 0xFFFFFF) // 交替背景色
                .borderRadius(8)
            }, (msg:string) => msg)
        }.width('100%')
        .padding({ top: 24, left: 24, right: 24 })
        .reverse(true) // 子组件反向排列(新消息在上)
        .height('80%')
    }
}

6.1 代码结构分析

  1. 组件定义:使用@Component装饰器定义TimelineExample自定义组件
  2. 数据定义:定义messages字符串数组存储消息数据
  3. 布局容器:使用Column组件创建垂直布局,并设置reverse为true
  4. 循环渲染:使用ForEach循环渲染消息列表,并反转数组
  5. 消息项布局:使用Row组件创建水平布局,包含时间戳和消息内容
  6. 样式设置:为每个组件设置适当的样式属性
  7. 交替背景:根据索引设置交替背景色

6.2 实现要点总结

  1. 反向排列的两种方式
  • Column的reverse属性:控制子组件的排列方向
  • 数组的reverse()方法:控制数据的顺序
  1. 灵活的布局嵌套
  • Column作为外层容器,垂直排列消息项
  • Row作为消息项容器,水平排列时间戳和内容
  1. 样式的统一与区分
  • 统一的间距、圆角规范
  • 区分的字体大小、颜色设置
  1. 交互体验的优化
  • 交替背景色提高可读性
  • 文本溢出处理确保信息完整显示

7. 总结

通过本教程的两个部分,我们详细讲解了如何使用Column组件的reverse属性构建反向排列的时间线,包括:

  1. Column组件的reverse属性及其应用
  2. 数据处理与反转技巧
  3. ForEach循环渲染消息列表
  4. Row布局实现消息项
  5. Text组件的样式定制
  6. 布局技巧与样式一致性
相关文章
|
3月前
|
API 开发者 索引
HarmonyOS API 15 新晋导航点组件Indicator详解
本节介绍HarmonyOS API 15新增的导航点组件Indicator的特性和用法,支持圆点和数字两种导航样式。示例基于DevEco Studio 5.0.5,展示如何不依赖Swiper组件独立显示导航点。通过IndicatorComponentController控制翻页,设置初始索引、样式、循环、总数及方向等属性,并处理索引变化事件。代码示例详细解析各属性与事件的功能,适用于API Version 15及以上版本,支持ArkTS卡片和元服务使用。源码托管于《跟老卫学HarmonyOS开发》GitHub仓库。
63 1
|
3月前
|
开发者 容器
HarmonyOS Next快速入门:Button组件
本教程摘自《HarmonyOS Next快速入门》,聚焦HarmonyOS应用开发中的Button组件。Button支持胶囊、圆形和普通三种类型,可通过子组件实现复杂功能,如嵌入图片或文字。支持自定义样式(边框弧度、文本样式、背景色等)及点击事件处理。示例代码展示了不同类型按钮的创建与交互逻辑,助开发者快速上手。适合HarmonyOS初学者及对UI组件感兴趣的开发者学习。
432 0
|
3月前
|
开发者
HarmonyOS Next快速入门:Image组件
本教程摘自《HarmonyOS Next快速入门》,专注于HarmonyOS应用开发中的Image组件使用。Image组件支持多种图片格式(如png、jpg、svg等),可渲染本地资源、网络图片、媒体库文件及PixelMap像素图。通过设置`objectFit`属性,实现不同缩放类型;利用`fillColor`属性调整矢量图颜色。示例代码涵盖本地、网络及资源图片的加载与样式设置,同时需在`module.json5`中声明网络权限以加载外部资源。适合开发者快速掌握HarmonyOS图像展示功能。
418 0
|
3月前
|
监控 JavaScript 前端开发
🎉 Harmony OS Next里的Web组件:网页加载的全流程掌控手册
本文详细解析了Harmony OS Next中ArkUI Web组件的九大生命周期回调,帮助开发者全面掌控网页加载流程。从组件初始化到加载完成,再到异常处理与性能优化,每个阶段都配有具体代码示例和注意事项。内容涵盖关键回调(如aboutToAppear、onPageBegin)的使用场景、网页加载进度监控(FCP/FMP/LCP)、以及前端页面优化实践。通过本文,开发者可以高效管理网页加载过程,提升应用性能与用户体验。
181 0
|
3月前
|
开发者
鸿蒙开发:资讯项目实战之项目初始化搭建
目前来说,我们的资讯项目只是往前迈了很小的一步,仅仅实现了项目创建,步虽小,但概念性的知识很多,这也是这个项目的初衷,让大家不仅仅可以掌握日常的技术开发,也能让大家理解实际的项目开发知识。
鸿蒙开发:资讯项目实战之项目初始化搭建
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
3月前
|
缓存 JavaScript IDE
鸿蒙开发:基于最新API,如何实现组件化运行
手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!
118 0
鸿蒙开发:基于最新API,如何实现组件化运行
|
3月前
|
SQL 弹性计算 数据库
鸿蒙5开发宝藏案例分享---优化应用时延问题
鸿蒙性能优化指南来了!从UI渲染到数据库操作,6大实战案例助你提升应用流畅度。布局层级优化、数据加载并发、数据库查询提速、相机资源延迟释放、手势识别灵敏调整及转场动画精调,全面覆盖性能痛点。附赠性能自检清单,帮助开发者高效定位问题,让应用运行如飞!来自华为官方文档的精华内容,建议收藏并反复研读,共同探讨更多优化技巧。
|
3月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
126 0
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。