第十一节HarmonyOS 常用容器组件2-List和Grid

一、List列表组件的使用

1、简介

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

2、List组件使用ForEeach渲染列表

     一个列表往往由多个相似的Item项组成,所以一个List组件中包含多个子组件ListItem来构成,这样会导致。所以,使用循环渲染ForEeach遍历数组的方式来构建列表,这样就可以大大减少重复代码。以下是简单是示例代码:

@Entry
@Component
struct Control_list {
  private listArr: string[] = ["苹果", "香蕉", "哈密瓜", "葡萄", "草莓", "桃子"]

  build() {
    Row() {
      Column() {
        List({ space: 10 }) {
          ForEach(this.listArr, (item: string) => {
            ListItem() {
              Text(item)
                .width('100%')
                .height(100)
                .fontSize(20)
                .fontColor(Color.White)
                .textAlign(TextAlign.Center)
                .borderRadius(10)
                .backgroundColor(0x007DFF)
            }
          }, item => item)
        }

      }
      .width('100%')
      .height('100%')
    }
    .height('100%')
    .padding(12)
    .height('100%')
    .backgroundColor(0xF1F3F5)
  }
}

效果如如下:

3、设置列表分割线

     List组件中子组件ListItem之间默认是没有分割线的,但是又有一些场景需要在两个子组件之间设置分割线,这时候您可以使用List组件的divider属性,

Divider属性包含四个参数:

  1. StrokeWidth:分割线的线宽。
  2. Color:分割线的颜色。
  3. StartMargin:分割线距离列表侧边起始端的距离。
  4. EndMargin:分割线距离列表侧边结束的距离。
List({ space: 10 }) {
  ForEach(this.listArr, (item: string) => {
    ListItem() {
      Text(item)
        .width('100%')
        .height(100)
        .fontSize(20)
        .fontColor(Color.White)
        .textAlign(TextAlign.Center)
        .borderRadius(10)
        .backgroundColor(0x007DFF)
    }
  }, item => item)
}
.divider({ strokeWidth: 2, color: Color.Red, startMargin: 16, endMargin: 16 })

4、List组件的滚动事件监听

     List组件提供了一系列的事件方法来监听列表的滚动,你可以根据业务的具体需要来监听某些事件。

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

示例代码:

@Entry
@Component
struct Control_list {
  private listArr: string[] = ["苹果", "香蕉", "哈密瓜", "葡萄", "草莓", "桃子", "西瓜", "凤梨", "菠萝", "荔枝"]

  build() {
    Row() {
      Column() {
        List({ space: 10 }) {
          ForEach(this.listArr, (item: string) => {
            ListItem() {
              Text(item)
                .width('100%')
                .height(100)
                .fontSize(20)
                .fontColor(Color.White)
                .textAlign(TextAlign.Center)
                .borderRadius(10)
                .backgroundColor(0x007DFF)
            }
          }, item => item)
        }
        .divider({ strokeWidth: 2, color: Color.Red, startMargin: 16, endMargin: 16 })
        .onScroll((scrollOffset: number, scrollState: ScrollState) => {
          console.info('zdm 滑动偏移量 scrollOffset' + scrollOffset)
          console.info('zdm 当前滑动状态 scrollState' + scrollState)
        })
        .onScrollIndex((start: number, end: number) => {
          console.info('zdm 滑动起始位置索引值 start' + start)
          console.info('zdm 滑动结束位置索引值 end' + end)
        })
        .onReachStart(() => {
          console.info('zdm 列表到达起始位置时触发 onReachStart')
        })
        .onReachEnd(() => {
          console.info('zdm 列表到达末尾位置时触发 onReachEnd')
        })
        .onScrollStop(() => {
          console.info('zdm 列表滑动停止时触发 onScrollStop')
        })

      }
      .width('100%')
      .height('100%')
    }
    .height('100%')
    .padding(12)
    .height('100%')
    .backgroundColor(0xF1F3F5)
  }
}

刚运行显示出页面时效果图:

此时打印日志:

列表向下滑动到底时,此期间日志:

……

五、设置List排列方向

     List组件里列表默认是按垂直方向(从上到下)排列的,如果这时您想让列表水平排列,您可以将list组件中listDirection属性设置为“Axis.Horizontal”。

.listDirection(Axis.Horizontal)
.listDirection(Axis.Vertical)

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

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

  • Horizonal:子组件ListItem在组件List中呈横向排列。

二、Grid网格组件使用

1、简介

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

2、使用ForEeach渲染网格布局

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

示例代码:

@Entry
@Component
struct ControlGrid {
  private listArr: string[] = ["苹果", "香蕉", "哈密瓜", "葡萄", "草莓", "桃子", "西瓜", "凤梨", "菠萝", "荔枝"]

  build() {
    Row() {
      Column() {
        Grid() {
          ForEach(this.listArr, (item: string) => {
            GridItem() {
              Text(item)
                .width('100%')
                .height('100%')
                .fontSize(20)
                .fontColor(Color.White)
                .textAlign(TextAlign.Center)
                .borderRadius(10)
                .backgroundColor(0x007DFF)
            }
          }, item => item)
        }
        .columnsTemplate('1fr 1fr 1fr 1fr')
        .rowsTemplate('1fr 1fr')
        .columnsGap(10)
        .rowsGap(10)
        .height(300)
        .backgroundColor(Color.Gray)

      }
      .width('100%')
      .height('100%')
    }
    .height('100%')
    .padding(12)
    .height('100%')
    .backgroundColor(0xF1F3F5)
  }
}

效果图:

        注意:示例代码中创建了10个GridItem列表项。同时设置columnsTemplate的值为'1fr 1fr 1fr 1fr',表示这个网格为4列,将Grid允许的宽分为4等分,每列占1份;rowsTemplate的值为'1fr 1fr',表示这个网格为2行,将Grid允许的高分为2等分,每行占1份。这样就构成了一个2行4列的网格列表,然后使用columnsGap设置列间距为10vp,使用rowsGap设置行间距也为10vp。(由于设置2行4列固定网格,这就导致只能显示出来8条,上述代码且不能滚动)。

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

        将示例代码中owsTemplate属性删除,由于高度已经是固定值了,所以就可以实现Grid列表的滚动:

上述是代码变动处。

修改后效果如:

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

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

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

相关文章

​Python Flask库:web开发神器

概要: Python是一种广泛应用的编程语言,它在Web开发领域中有着丰富的库和框架。其中,Flask是一款轻量级的Web应用框架,它简单而灵活,适用于从简单的静态网页到复杂的Web应用的开发。本文将详细介绍使用Python Flask库…

SpringBoot 项目 Jar 包加密,防止反编译

1场景 最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去。要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来。 2方案 第一种方案使用代码混淆 采用proguard-maven-plugin插件 在单模块中此方案还算简…

六要素超声波气象站气象监测小能手

随着科技的发展,人类对天气的掌控越来越强。六要素超声波气象站成为了现代气象预测的重要工具。本文将介绍这种气象站的特点、功能和应用,以及它如何改变我们对天气的预测和应对方式。 一、六要素超声波气象站简介 WX-CSQX6 六要素超声波气象站是一种集…

嵌入式学习---ARM中断控制系统

目录 外部事件与CPU的交互方式查询方式中断方式 什么是中断源S3C2440支持60个中断源FIQ和IRQ 中断处理流程将外设中断通知给CPUSUBSRCPND寄存器INTSUBMSK寄存器SRCPND寄存器INTMSK寄存器INTMOD寄存器INTPND寄存器 硬件中断处理是实时系统设计的最重要、最关键的问题。 外部事件…

PyTorch 基础篇(2):线性回归(Linear Regression)

# 包import torchimport torch.nn as nnimport numpy as npimport matplotlib.pyplot as plt # 超参数设置input_size 1output_size 1num_epochs 60learning_rate 0.001 # Toy dataset # 玩具资料:小数据集x_train np.array([[3.3], [4.4], [5.5], [6.71], [6.…

SpringSecurity6 | 默认用户生成(下)

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏&#xf…

MTU TCP-MSS(转载)

MTU MTU 最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。 是包或帧的最大长度,一般以字节记。如果MTU过大,在碰到路由器时…

kyuubi整合flink yarn application model

目录 概述配置flink 配置kyuubi 配置kyuubi-defaults.confkyuubi-env.shhive 验证启动kyuubibeeline 连接使用hive catalogsql测试 结束 概述 flink 版本 1.17.1、kyuubi 1.8.0、hive 3.1.3、paimon 0.5 整合过程中,需要注意对应的版本。 注意以上版本 姊妹篇 k…

tgf - 一个开箱即用的golang游戏服务器框架

tgf框架 tgf框架是使用golang开发的一套游戏分布式框架.属于开箱即用的项目框架,目前适用于中小型团队,独立开发者,快速开发使用.框架提供了一整套开发工具,并且定义了模块开发规范.开发者只需要关注业务逻辑即可,无需关心用户并发和节点状态等复杂情况. 使用介绍 创建业务逻辑…

JavaScript面向对象编程的奥秘揭秘:掌握核心概念与设计模式

​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-面向对象 目录 什么是面向对象? 类与对象的主要区别 创建…

python+pytest接口自动化(9)-cookie绕过登录(保持登录状态)

在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者&#xff0c…

气膜厂家怎样确保产品质量和售后服务?

气膜厂家作为一家专业生产气膜产品的企业,确保产品质量和提供良好的售后服务是我们的责任和使命。为了确保产品质量和售后服务的可靠性,我们采取了以下措施。 起初,我们严格按照国家标准和相关行业规范进行生产。气膜产品的质量是产品能否长…

编织魔法世界——计算机科学的奇幻之旅

文章目录 每日一句正能量前言为什么当初选择计算机行业计算机对自己人生道路的影响后记 每日一句正能量 人生就像赛跑,不在乎你是否第一个到达尽头,而在乎你有没有跑完全程。 前言 计算机是一个神奇的领域,它可以让人们创造出炫酷的虚拟世界…

Linux常用命令——as命令

在线Linux命令查询工具 as 汇编语言编译器 补充说明 as命令GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。 语法 as(选项)(参数)选项 -ac:忽略失败条件; -ad:忽略调试指令; -ah:包括…

nVisual能为数据中心解决什么问题?

nVisual通过可视化的管理方式,使数据中心管理者能够有效且高效地管理数据中心的资产、线缆、容量、变更;使数据中心管理者能够获得如下问题的答案,以便能够快速做出更好、更明智的决策: 1.资产管理 我们有什么&#x…

VMware Linux(Centos)虚拟机扩容根目录磁盘空间

给VMWare虚拟机根目录扩容,简单有效!_迷倒万千少女的Csir的博客-CSDN博客 https://blog.csdn.net/m0_64206944/article/details/131453844?spm1001.2014.3001.5506 上述链接融合参考下面文章 VMware Linux(Centos)虚拟机扩容根目录磁盘空间 centosli…

Redis quicklist源码+listpack源码(6.0+以上版本)

ziplist设计上的问题,每一次增删改都需要计算前面元素的空间和长度(prevlen),这种设计缺陷非常明显,一旦其中一个entry发生修改,以这个entry后面开始,全部需要重新计算prevlen,因此诞…

台灯哪个品牌比较好?适合考研党的台灯推荐

眼睛作为人体非常重要的器官之一,它承担着接受和感知光线的功能。然而,长时间暴露在强光下或者不适当的光线环境下可能会对眼睛健康造成一定的影响。许多学生党以及上班族可能深有体会,在日常读写以及长时间面对电子产品中,很容易…

数字文化大观:TikTok影响下的全球文娱

在数字时代的大潮中,社交媒体平台正成为全球文娱产业的重要引擎之一。而TikTok,作为一款以短视频为特色的社交应用,正深刻地改变着全球文娱的面貌。 本文将深入研究TikTok对全球文娱的影响,探讨数字文化在这一平台的催化下如何迅…

超大规模集成电路设计----CMOS组合逻辑门(六)

本文仅供学习,不作任何商业用途,严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----CMOS组合逻辑门(六) 6.1 静态CMOS设计6.1.1 互补CMOS6.1.1.1 互补…