鸿蒙应用开发 构建列表页面

简介

在我们常用的手机应用中,经常会见到一些数据列表,如设置页面、通讯录、商品列表等。下图中两个页面都包含列表,“首页”页面中包含两个网格布局,“商城”页面中包含一个商品列表。

上图中的列表中都包含一系列相同宽度的列表项,连续、多行呈现同类数据,例如图片和文本。常见的列表有线性列表(List 列表)和网格布局(Grid 列表):

为了帮助开发者构建包含列表的应用,ArkUI 提供了 List 组件和 Grid 组件,开发者使用 List 和 Grid 组件能够很轻松的完成一些列表页面。

List 组件的使用

List 组件简介

List 是很常用的滚动类容器组件,一般和子组件 ListItem 一起使用,List 列表中的每一个列表项对应一个 ListItem 组件。

使用 ForEeach 渲染列表

列表往往由多个列表项组成,所以我们需要在 List 组件中使用多个 ListItem 组件来构建列表,这就会导致代码的冗余。使用循环渲染(ForEach)遍历数组的方式构建列表,可以减少重复代码,示例代码如下:

@Entry  
@Component  
struct ListDemo {  
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
  
  build() {  
    Column() {  
      List({ space: 10 }) {  
        ForEach(this.arr, (item: number) => {  
          ListItem() {  
            Text(`${item}`)  
              .width('100%')  
              .height(100)  
              .fontSize(20)  
              .fontColor(Color.White)  
              .textAlign(TextAlign.Center)  
              .borderRadius(10)  
              .backgroundColor(0x007DFF)  
          }  
        }, item => item)  
      }  
    }  
    .padding(12)  
    .height('100%')  
    .backgroundColor(0xF1F3F5)  
  }  
}  

效果图如下:

设置列表分割线

List 组件子组件 ListItem 之间默认是没有分割线的,部分场景子组件 ListItem 间需要设置分割线,这时候您可以使用 List 组件的 divider 属性。divider 属性包含四个参数:

  • strokeWidth: 分割线的线宽。
  • color: 分割线的颜色。
  • startMargin:分割线距离列表侧边起始端的距离。
  • endMargin: 分割线距离列表侧边结束端的距离。

31baf14e712ca7849ba8175d1e54a46d_640_wx_fmt=png&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1.png

List 列表滚动事件监听

List 组件提供了一系列事件方法用来监听列表的滚动,您可以根据需要,监听这些事件来做一些操作:

  • onScroll:列表滑动时触发,返回值 scrollOffset 为滑动偏移量,scrollState 为当前滑动状态。
  • onScrollIndex:列表滑动时触发,返回值分别为滑动起始位置索引值与滑动结束位置索引值。
  • onReachStart:列表到达起始位置时触发。
  • onReachEnd:列表到底末尾位置时触发。
  • onScrollStop:列表滑动停止时触发。

使用示例代码如下:

List({ space: 10 }) {  
  ForEach(this.arr, (item) => {  
    ListItem() {  
      Text(`${item}`)  
        ...  
    }  
  }, item => item)  
}  
.onScrollIndex((firstIndex: number, lastIndex: number) => {  
  console.info('first' + firstIndex)  
  console.info('last' + lastIndex)  
})  
.onScroll((scrollOffset: number, scrollState: ScrollState) => {  
  console.info('scrollOffset' + scrollOffset)  
  console.info('scrollState' + scrollState)  
})  
.onReachStart(() => {  
  console.info('onReachStart')  
})  
.onReachEnd(() => {  
  console.info('onReachEnd')  
})  
.onScrollStop(() => {  
  console.info('onScrollStop')  
})  

`### 设置 List 排列方向

List 组件里面的列表项默认是按垂直方向排列的,如果您想让列表沿水平方向排列,您可以将 List 组件的 listDirection 属性设置为 Axis.Horizontal。

listDirection 参数类型是 Axis,定义了以下两种类型:

  • Vertical(默认值):子组件 ListItem 在 List 容器组件中呈纵向排列。

  • Horizontal:子组件 ListItem 在 List 容器组件中呈横向排列。

Grid 组件的使用

Grid 组件简介

Grid 组件为网格容器,是一种网格列表,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。Grid 组件一般和子组件 GridItem 一起使用,Grid 列表中的每一个条目对应一个 GridItem 组件。

使用 ForEach 渲染网格布局

和 List 组件一样,Grid 组件也可以使用 ForEach 来渲染多个列表项 GridItem,我们通过下面的这段示例代码来介绍 Grid 组件的使用。

@Entry  
@Component  
struct GridExample {  
  // 定义一个长度为16的数组  
  private arr: string[] = new Array(16).fill('').map((_, index) => `item ${index}`);  
  
  build() {  
    Column() {  
      Grid() {  
        ForEach(this.arr, (item: string) => {  
          GridItem() {  
            Text(item)  
              .fontSize(16)  
              .fontColor(Color.White)  
              .backgroundColor(0x007DFF)  
              .width('100%')  
              .height('100%')  
              .textAlign(TextAlign.Center)  
          }  
        }, item => item)  
      }  
      .columnsTemplate('1fr 1fr 1fr 1fr')  
      .rowsTemplate('1fr 1fr 1fr 1fr')  
      .columnsGap(10)  
      .rowsGap(10)  
      .height(300)  
    }  
    .width('100%')  
    .padding(12)  
    .backgroundColor(0xF1F3F5)  
  }  
}  

示例代码中创建了 16 个 GridItem 列表项。同时设置 columnsTemplate 的值为’1fr 1fr 1fr 1fr’,表示这个网格为 4 列,将 Grid 允许的宽分为 4 等分,每列占 1 份;rowsTemplate 的值为’1fr 1fr 1fr 1fr’,表示这个网格为 4 行,将 Grid 允许的高分为 4 等分,每行占 1 份。这样就构成了一个 4 行 4 列的网格列表,然后使用 columnsGap 设置列间距为 10vp,使用 rowsGap 设置行间距也为 10vp。示例代码效果图如下:

上面构建的网格布局使用了固定的行数和列数,所以构建出的网格是不可滚动的。然而有时候因为内容较多,我们通过滚动的方式来显示更多的内容,就需要一个可以滚动的网格布局。我们只需要设置 rowsTemplate 和 columnsTemplate 中的一个即可。

将示例代码中 GridItem 的高度设置为固定值,例如 100;仅设置 columnsTemplate 属性,不设置 rowsTemplate 属性,就可以实现 Grid 列表的滚动:

Grid() {  
  ForEach(this.arr, (item: string) => {  
    GridItem() {  
      Text(item)  
        .height(100)  
        ...  
    }  
  }, item => item)  
}  
.columnsTemplate('1fr 1fr 1fr 1fr')  
.columnsGap(10)  
.rowsGap(10)  
.height(300)  

此外,Grid 像 List 一样也可以使用 onScrollIndex 来监听列表的滚动。

为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

鸿蒙 (Harmony OS)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门?:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……


http://www.niftyadmin.cn/n/5309374.html

相关文章

图片处理相关网站(图片分辨率、尺寸修改、AI扩图等)

分享一些免费的可进行图片的各种处理的网站,包括图片分辨率、尺寸修改、AI扩图等,持续增加中。。。 1.photokit.com 可进行图片分辨率、尺寸、压缩等修改。 免费在线图片编辑器 - 在线抠图、改图、修图、美图 - PhotoKit.comPhotoKit是一款免费的…

lombok注解 @Data使用在继承类上时出现警告解决

一、警告问题 1、Data注解 Data 包含了 ToString、EqualsAndHashCode、Getter / Setter和RequiredArgsConstructor的功能。 当使用 Data注解时,则有了 EqualsAndHashCode注解(即EqualsAndHashCode(callSuperfalse)),那么就会在此…

【温故而知新】JavaScript数据结构详解

一、概念 JavaScript是一种弱类型的编程语言,它提供了一些内置的数据结构来存储和组织数据。 在计算机科学中,数据结构是一种特定的方式来组织和存储数据,以便于有效地访问和修改数据。在JavaScript中,数据结构是指相互之间存在…

c++ asio: udp server and client demo

一、server 端 创建udp::socket,用于收发数据 1)需要创建一个io_context对象,初始化socket对象 2)创建一个udp::endpoint对象,指定协议版本(v4,v6)和端口号,初始化socket…

新世纪研究生公共英语教材 听说

新世纪研究生公共英语教材 听说 Lesson One MusicLesson Two HolidaysLesson Three EconomyLesson Four EducationLesson Five Life on CampusLesson Six AnimalsLesson Seven HealthLesson Eight YouthLesson Nine FoodsLesson Ten Introducing Foreign UniversitiesLesson El…

【基础篇】十二、引用计数法 可达性分析算法

文章目录 1、Garbage Collection2、方法区的回收3、堆对象回收4、引用计数法5、可达性分析算法6、查看GC Root对象 1、Garbage Collection C/C,无自动回收机制,对象不用时需要手动释放,否则积累导致内存泄漏: Java、C#、Python、…

Android AAudio

文章目录 基本概念启用流程基本流程HAL层对接数据流计时模型调试 基本概念 AAudio 是 Android 8.0 版本中引入的一种音频 API。 AAudio 提供了一个低延迟数据路径。在 EXCLUSIVE 模式下,使用该功能可将客户端应用代码直接写入与 ALSA 驱动程序共享的内存映射缓冲区…

专为Mac用户设计的思维导图软件MindNode 2023 for Mac助您激发创意!

在现代快节奏的生活中,我们经常需要整理思绪、规划项目、记录灵感。而思维导图作为一种高效的思维工具,能够帮助我们更好地整理和展现思维。现在,我们介绍一款强大而直观的思维导图软件——MindNode 2023 for Mac,助您拓展思维边界…