55. [HarmonyOS NEXT 实战案例二] 新闻资讯网格列表(上)

简介: HarmonyOS NEXT提供了强大的布局组件,其中GridRow和GridCol组件不仅可以用于实现传统的网格布局,还可以用于创建列表布局。在本教程中,我们将详细讲解如何使用GridRow和GridCol组件实现新闻资讯列表布局,这种布局常见于新闻、资讯类应用的首页或分类页面。

[HarmonyOS NEXT 实战案例二] 新闻资讯网格列表(上)

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

效果演示

img_c318711c.png

1. 概述

HarmonyOS NEXT提供了强大的布局组件,其中GridRow和GridCol组件不仅可以用于实现传统的网格布局,还可以用于创建列表布局。在本教程中,我们将详细讲解如何使用GridRow和GridCol组件实现新闻资讯列表布局,这种布局常见于新闻、资讯类应用的首页或分类页面。

2. 数据结构设计

在实现新闻资讯列表之前,我们需要先定义新闻项的数据结构。在本案例中,我们定义了一个NewsItemType接口,包含新闻标题、摘要和图片资源:

interface NewsItemType {
   
    title: string;
    summary: string;
    image: ResourceStr;
}

这个接口定义了新闻项的基本属性:

  • title:新闻标题,字符串类型
  • summary:新闻摘要,字符串类型
  • image:新闻配图资源,ResourceStr类型

3. 数据准备

在组件内部,我们准备了一个新闻数据数组,包含4条新闻信息:

private newsItems:NewsItemType[] = [
    {
    title: 'HarmonyOS 4.0发布', summary: '全新分布式能力升级', image: $r("app.media.big1") },
    {
    title: '华为开发者大会', summary: '2023年HDC即将召开', image: $r("app.media.big31") },
    {
    title: '智能家居新趋势', summary: '全屋智能解决方案', image: $r("app.media.big30") },
    {
    title: '移动办公新时代', summary: '超级终端带来高效体验', image: $r("app.media.big27") }
]

这里使用了$r资源引用方式来引用应用资源目录下的图片资源。

4. 布局实现

4.1 整体布局结构

新闻资讯列表的整体结构如下:

Column() {
   
    GridRow({
    columns: 1 }) {
   
        ForEach(this.newsItems, (item:NewsItemType) => {
   
            GridCol({
    span: 1 }) {
   
                // 新闻项内容
            }
        })
    }
}
.width('100%')
.padding(12)

整体布局使用了Column组件作为容器,内部使用GridRow和GridCol组件实现列表布局。最外层的Column设置了100%宽度和12的内边距。

4.2 GridRow配置

在本案例中,GridRow组件的配置比较简单:

GridRow({
    columns: 1 })

参数说明:

  • columns: 1:设置网格为1列布局,这样每个新闻项都会占据整行宽度

4.3 GridCol配置

GridCol组件的配置也很简单:

GridCol({
    span: 1 })

参数说明:

  • span: 1:设置该列占用1个网格单元,即整行宽度

4.4 新闻项实现

每个新闻项的内部结构如下:

Row() {
   
    Image(item.image)
        .width(100)
        .height(80)
        .objectFit(ImageFit.Cover)
        .borderRadius(4)

    Column() {
   
        Text(item.title)
            .fontSize(16)
            .fontWeight(FontWeight.Bold)
            .margin({
    left: 12 })

        Text(item.summary)
            .fontSize(14)
            .margin({
    left: 12, top: 4 })
    }
    .alignItems(HorizontalAlign.Start)
}
.padding(12)
.borderRadius(8)
.margin({
    bottom: 8 })
.backgroundColor('#FFFFFF')

新闻项使用Row组件水平排列以下元素:

  1. 新闻配图:使用Image组件,设置100宽度、80高度、Cover填充模式和4vp的圆角
  2. 新闻内容:使用Column组件垂直排列标题和摘要
    • 标题:使用Text组件,设置16的字体大小、粗体字重和12vp的左边距
    • 摘要:使用Text组件,设置14的字体大小、12vp的左边距和4vp的上边距

整个新闻项设置了12vp的内边距、8vp的圆角、8vp的底部边距和白色背景。

5. 布局效果分析

5.1 列表布局特点

本案例中的列表布局具有以下特点:

特点 描述
列数 1列
排列方式 垂直排列
内边距 12vp

5.2 新闻项特点

每个新闻项具有以下特点:

特点 描述
布局方式 水平排列(左图右文)
背景色 #FFFFFF(白色)
圆角 8vp
内边距 12vp
底部边距 8vp
图片尺寸 100×80
图片圆角 4vp
标题字体大小 16
标题字体粗细 粗体
摘要字体大小 14

6. 完整代码

以下是新闻资讯列表的完整代码:

interface NewsItemType {
   
    title: string;
    summary: string;
    image: ResourceStr;
}

@Component
export struct NewsGrid {
   
    private newsItems:NewsItemType[] = [
        {
    title: 'HarmonyOS 4.0发布', summary: '全新分布式能力升级', image: $r("app.media.big1") },
        {
    title: '华为开发者大会', summary: '2023年HDC即将召开', image: $r("app.media.big31") },
        {
    title: '智能家居新趋势', summary: '全屋智能解决方案', image: $r("app.media.big30") },
        {
    title: '移动办公新时代', summary: '超级终端带来高效体验', image: $r("app.media.big27") }
    ]

    build() {
   
        Column() {
   
            GridRow({
    columns: 1 }) {
   
                ForEach(this.newsItems, (item:NewsItemType) => {
   
                    GridCol({
    span: 1 }) {
   
                        Row() {
   
                            Image(item.image)
                                .width(100)
                                .height(80)
                                .objectFit(ImageFit.Cover)
                                .borderRadius(4)

                            Column() {
   
                                Text(item.title)
                                    .fontSize(16)
                                    .fontWeight(FontWeight.Bold)
                                    .margin({
    left: 12 })

                                Text(item.summary)
                                    .fontSize(14)
                                    .margin({
    left: 12, top: 4 })
                            }
                            .alignItems(HorizontalAlign.Start)
                        }
                        .padding(12)
                        .borderRadius(8)
                        .margin({
    bottom: 8 })
                        .backgroundColor('#FFFFFF')
                    }
                })
            }
        }
        .width('100%')
        .padding(12)
    }
}

7. 与传统列表组件的比较

7.1 GridRow vs List

HarmonyOS NEXT提供了专门的List组件用于创建列表,那么为什么在本案例中我们选择使用GridRow和GridCol组件呢?下面是两者的比较:

特性 GridRow + GridCol List + ListItem
布局灵活性 高,可以轻松实现复杂布局 中,主要适用于简单列表
响应式支持 原生支持断点响应 需要额外处理
性能 适用于项目数量较少的场景 适用于大量数据的场景,有懒加载优化
滚动特性 需要配合Scroll组件使用 内置滚动功能
动画效果 需要自定义实现 内置多种动画效果

7.2 适用场景

GridRow和GridCol组件适用于以下场景:

  • 需要在不同屏幕尺寸下调整列数的响应式布局
  • 列表项布局复杂,需要更灵活的布局控制
  • 列表项数量较少,不需要懒加载优化

List组件适用于以下场景:

  • 大量数据的长列表,需要懒加载优化
  • 需要内置滚动、刷新等功能
  • 需要使用内置的列表动画效果

在本案例中,我们选择使用GridRow和GridCol组件,主要是为了展示这些组件在列表布局中的应用,以及它们提供的布局灵活性。

8. 总结

本教程详细讲解了如何使用HarmonyOS NEXT的GridRow和GridCol组件实现新闻资讯列表布局。通过合理的数据结构设计和布局配置,我们实现了一个简洁、美观的新闻列表页面。在下一篇教程中,我们将继续深入探讨如何优化这个布局,并添加更多交互功能。

相关文章
|
8天前
|
JavaScript 开发者 索引
鸿蒙应用开发从入门到实战(九):ArkTS渲染控制
ArkTS拓展了TypeScript,可以结合ArkUI进行渲染控制,是的界面设计具有可编程性。本文简要描述鸿蒙应用开发中的条件渲染和循环渲染。
|
5天前
|
数据安全/隐私保护 开发者
鸿蒙应用开发从入门到实战(十一):ArkUI组件Text&TextInput
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解文本组件Text和TextInput的使用。
|
4天前
|
开发者
鸿蒙应用开发从入门到实战(十二):ArkUI组件Button&Toggle
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解按钮组件Button和Toggle的使用。
|
9天前
|
JavaScript
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法
ArkUI除系统预置的组件外,还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。
|
6天前
|
存储 编解码 JSON
鸿蒙应用开发从入门到实战(十):ArkUI图片组件Image
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Image图片组件的使用。
|
10天前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
59 0
|
10天前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
87 0
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
2月前
|
安全 JavaScript API
鸿蒙开发核心要素
鸿蒙开发核心要素
|
3月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
133 0