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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/171678.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创新无界:通义灵码在测试过程中展现的独特魅力

通义灵码基于通义大模型,提供代码智能生成、研发智能问答能力。本文就来介绍下通义灵码在测试过程中的应用。 操作手册: 通义灵码, 阿里云提供的一款基于通义大模型的智能编码辅助工具_云效-阿里云帮助中心 1. 什么是通义灵码 是阿里云出品的一款基于通…

【紫光同创PCIE教程】——使用WinDriver驱动紫光PCIE

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注www.meyesemi.com) 紫光的logos系列的PGL50H/PGL100H、logos-2全系列都集成gen24的PCIE硬核,且官方也提供了例程。 紫光的PCIE用起来还是挺方便的…

你真的了解 Cookie 和 Session 吗?

文章目录 Cookie 和 Session总结 Cookie 和 Session cookie HTTP cookie(web cookie、browser cookie)是服务器发送给用户 web 浏览器的一小段数据。浏览器可能会存储 cookie,并在以后的请求中将其发送回同一台服务器。通常,HTTP …

山西电力市场日前价格预测【2023-11-22】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-22)山西电力市场全天平均日前电价为13.55元/MWh。其中,最高日前电价为243.27元/MWh,预计出现在18:00。最低日前电价为0.00元/MWh,预计出现…

系统之家U盘重装系统Win10方法步骤

用户发现自己电脑上的Win10系统出现问题了,想要通过重装系统来解决问题。但是,用户还不清楚具体重新安装Win10系统的步骤,接下来小编给大家详细介绍利用U盘完成Win10系统重装的方法,在这里用户需要下载系统之家装机大师软件&#…

Linux fork和vfork函数用法

fork和vfork是用于创建新进程的函数,在Linux的C语言编程中非常常见。 fork函数 fork函数是用于创建一个新的进程,新进程是调用进程的副本。新进程将包含调用进程的地址空间、文件描述符、栈和数据。在fork之后,父进程和子进程将并发执行。 …

AR眼镜方案—单目光波导AR智能眼镜

光波导技术是一项具有前沿意义的技术,它能够将光线反射180度,使得眼镜框架内置的MicroLED屏幕的图像通过多次反射与扩散后准确地传递到人眼中。采用MicroLED显示技术的AR智能眼镜不仅体积显著缩小,屏幕只有0.68英寸大小,并且还能够…

企业数字化转型所需的数据在哪里找?企业数据运营有什么用?

现阶段,越来越多企业考虑数字化转型。特别是中小型企业,他们察觉到:数字化转型的关键在于数据的运营。只有通过数据的有效管理和不断挖掘,企业才可以更好地了解市场需求,优化业务流程,提高决策效率&#xf…

SAP smartform和ALV如何使用图片 如何下载SE78上传的图片到本地

原文链接1:https://mp.weixin.qq.com/s/gb3LCoDLNhZGnpplG68cyA 原文链接2:https://mp.weixin.qq.com/s/iFFhGwFEK93QiddR1biXyA 1.如何在SMARTFORM中打印图片 在使用SmartForms进行打印单据开发时候,经常需要将公司的LOGO、公司印章、管理人…

CTF/AWD竞赛标准参考书+实战指南

随着网络安全问题日益凸显,国家对网络安全人才的需求持续增长,其中,网络安全竞赛在国家以及企业的人才培养和选拔中扮演着至关重要的角色。 在数字化时代,企业为了应对日益增长的攻击威胁,一般都在大量部署安全产品、…

ACREL DC energy meter Application in Indonesia

安科瑞 华楠 Abstract: This article introduces the application of Acrel DC meters in base station in Indonesia.The device is measuring current,voltage and energy together with hall current sensor. 1.Project Overview This company is located in Indonesia a…

leetcode:415. 字符串相加(模拟竖式计算)

一、题目 链接: 415. 字符串相加 - 力扣(LeetCode) 函数原型:char* addStrings(char* num1, char* num2) 二、思路: 本题本质是将两个字符型数字相加,字符型数字相加就一定需要进行字符与数字的相互转换 详…

媒体格式转换软件Permute 3 mac中文版软件特点

Permute mac是一款媒体格式转换软件,可以帮助用户快速地将各种音频、视频和图像文件转换成所需格式,并提供了一些常用工具以便于用户进行编辑和处理。 Permute mac软件特点 - 支持大量格式:支持几乎所有常见的音频、视频和图像格式&#xff…

Demo 题记

Demo 1 输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出 #输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出 c float(input("请输入摄氏温度:"))print("对应的华氏温度为%.2f"%(9…

redis---非关系型数据库

关系数据库与非关系型数据库 redis非关系型数据库,又名缓存型数据库。数据库类型:关系型数据库和非关系型数据库关系型数据库是一 个机构化的数据库,行和列。 列:声明对象。 行:记录对象属性。 表与表之间的的关联。 sql语句&…

俄罗斯方块摆烂

package 俄罗斯方块;import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener;import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import ja…

ZYNQ_project:lcd_pic_400x400

在lcd液晶屏上显示400x400像素的图片, 像素信息通过电脑的串口调试助手,发送给fpga,存储在例化的双端口ram中, 在要显示图像区域,读取ram中的像素信息。 模块框图: 时序图: 代码:…

电脑开不了机怎么办?三招帮你成功解决!

电脑是我们日常工作和生活的重要工具,但有时候它们也会出现开机问题。当电脑无法启动时,可能会让人感到焦虑,电脑开不了机怎么办?不必担心,通常有多种方法可以解决这些问题。本文将介绍三种常见的方法,以帮…

你真的会写简历吗?软件测试简历修改包装...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、简历重要性以及…