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

HarmonyOS ArkTS List组件和Grid组件的使用(五)

简介

ArkUI提供了List组件和Grid组件,开发者使用List和Grid组件能够很轻松的完成一些列表页面。常见的列表有线性列表(List列表)和网格布局(Grid列表):

在这里插入图片描述

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属性包含四个参数:
在这里插入图片描述

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来监听列表的滚动。

相关文章:

  • 【开源】基于微信小程序的音乐平台
  • unity DontDestroyOnLoad后跳转场景后不会出现重复物体
  • linux rsyslog综合实战2
  • 没收到Win11 23H2正式版的推送怎么升级到23H2
  • Android 10-13鼠标右键返回功能适配
  • 观察者模式的运用——消息队列
  • 代码随想录算法训练营第三十一天| 455 分发饼干 376 摆动序列 53 最大子数组和
  • 探索 Material 3:全新设计系统和组件库的介绍
  • js进阶笔记之构造函数
  • 如何在 ASP.NET Core 中使用 Quartz.NET
  • adb server version (19045) doesn‘t match this client (41); killing.的解决办法
  • 华为ac+fit漫游配置案例
  • 计算机算法分析与设计(24)---分支限界章节复习
  • 苍穹外卖—解决前端时间属性显示问题
  • TS类型全解
  • 5、React组件事件详解
  • Django 博客开发教程 8 - 博客文章详情页
  • es6--symbol
  • Java基本数据类型之Number
  • js
  • Mysql数据库的条件查询语句
  • MySQL主从复制读写分离及奇怪的问题
  • php ci框架整合银盛支付
  • Redis的resp协议
  • session共享问题解决方案
  • 订阅Forge Viewer所有的事件
  • 前嗅ForeSpider采集配置界面介绍
  • Nginx实现动静分离
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #mysql 8.0 踩坑日记
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (pytorch进阶之路)扩散概率模型
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (翻译)terry crowley: 写给程序员
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)理解angular中的module和injector,即依赖注入
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (转)fock函数详解
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET CORE Aws S3 使用
  • .Net Core webapi RestFul 统一接口数据返回格式