【鸿蒙软件开发】ArkUI容器组件之Grid(网格布局)

news2024/11/25 16:26:18

文章目录

  • 前言
  • 一、Grid
    • 1.1 子组件
      • GridItem是什么
        • 子组件
        • 接口
        • 属性
        • 事件
        • 示例代码
    • 1.2 接口
      • 参数
    • 1.3 属性
    • 1.4 Grid的几种布局模式
    • 1.5 GridDirection枚举说明
    • 1.6事件
      • ItemDragInfo对象说明
    • 1.7 示例代码
  • 总结


前言

Grid容器组件:网格容器,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。


一、Grid

网格容器,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。

说明
该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

1.1 子组件

包含GridItem子组件。

说明
Grid子组件的索引值计算规则:

按子组件的顺序依次递增。
if/else语句中,只有条件成立分支内的子组件会参与索引值计算,条件不成立分支内的子组件不计算索引值。
ForEach/LazyForEach语句中,会计算展开所有子节点索引值。
if/else/ForEach/LazyForEach发生变化以后,会更新子节点索引值。
Grid子组件的visibility属性设置为Hidden或None时依然会计算索引值。
Grid子组件的visibility属性设置为None时不显示,但依然会占用子组件对应的网格。
Grid子组件设置position属性,会占用子组件对应的网格,子组件将显示在相对Grid左上角偏移position的位置。该子组件不会随其对应网格滚动,在对应网格滑出Grid显示范围外后不显示。

GridItem是什么

网格容器中单项内容容器。

说明
该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

可以包含子组件。

接口

使用下面这个即可创建一个GridItem了,他没有参数

GridItem()
属性

名称: rowStart
参数类型: number
描述: 指定当前元素的起始行号。

名称: rowEnd
参数类型: number
描述: 指定当前元素的终点行号。

名称: columnStart
参数类型: number
描述: 指定当前元素的起始列号。

名称: columnEnd
参数类型: number
描述: 指定当前元素的终点列号。

名称: forceRebuild (已废弃)
参数类型: boolean
描述: 设置在触发组件构建时是否重新创建此节点。从API version 9开始,该选项已被废弃。GridItem会根据自身属性和子组件的变化自行决定是否需要重新创建,无需设置。默认值为false。

名称: selectable
参数类型: boolean
描述: 指定当前GridItem元素是否可以被鼠标框选。需要注意,外层Grid容器的鼠标框选必须开启,GridItem的框选才会生效。默认值为true。

说明
起始行号、终点行号、起始列号、终点列号生效规则如下:

rowStart/rowEnd合理取值范围为0总行数-1,columnStart/columnEnd合理取值范围为0总列数-1。
只有在设置columnTemplate和rowTemplate的Grid中,设置合理的rowStart/rowEnd/columnStart/columnEnd四个属性的GridItem才能按照指定的行列号布局。
在设置columnTemplate和rowTemplate的Grid中,单独设置行号rowStart/rowEnd或列号columnStart/columnEnd的GridItem会占用指定的行数(rowEnd-rowStart+1)或列数(columnEnd-columnStart+1)。
在只设置columnTemplate的Grid中设置列号columnStart/columnEnd的GridItem按照指定的列数布局。
在只设置rowTemplate的Grid中设置行号rowStart/rowEnd的GridItem按照指定的行数布局。
columnTemplate和rowTemplate都不设置的Grid中GridItem的行列号属性无效。

事件

GridItem元素被鼠标框选的状态改变时触发下面这个回调函数。

onSelect(event: (isSelected: boolean) => void)

isSelected:进入鼠标框选范围即被选中返回true, 移出鼠标框选范围即未被选中返回false。

示例代码
// xxx.ets
@Entry
@Component
struct GridItemExample {
  @State numbers: string[] = Array.apply(null, { length: 16 }).map(function (item, i) {
    return i.toString()
  })

  build() {
    Column() {
      Grid() {
        GridItem() {
          Text('4')
            .fontSize(16)
            .backgroundColor(0xFAEEE0)
            .width('100%')
            .height('100%')
            .textAlign(TextAlign.Center)
        }.rowStart(1).rowEnd(2).columnStart(1).columnEnd(2) // 同时设置合理的行列号

        ForEach(this.numbers, (item) => {
          GridItem() {
            Text(item)
              .fontSize(16)
              .backgroundColor(0xF9CF93)
              .width('100%')
              .height('100%')
              .textAlign(TextAlign.Center)
          }
        }, item => item)

        GridItem() {
          Text('5')
            .fontSize(16)
            .backgroundColor(0xDBD0C0)
            .width('100%')
            .height('100%')
            .textAlign(TextAlign.Center)
        }.columnStart(1).columnEnd(4) // 只设置列号,不会从第1列开始布局
      }
      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
      .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
      .width('90%').height(300)
    }.width('100%').margin({ top: 5 })
  }
}

在这里插入图片描述

我们主要需要理解他这些属性的含义,我们可以通过图片来了解。如下:
在这里插入图片描述

1.2 接口

我们使用下面这个接口,可以创建一个Grid布局

Grid(scroller?: Scroller)

在这里插入图片描述

参数

参数名:scroller
参数类型:Scroller
是否需要填写:否
作用:可滚动组件的控制器。用于与可滚动组件进行绑定。

说明:
不允许和其他滚动类组件绑定同一个滚动控制对象。

1.3 属性

除支持通用属性外,还支持以下属性:

名称: columnsTemplate
参数类型: string
描述: 设置当前网格布局的列数,不设置时默认为1列。例如,‘1fr 1fr 2fr’ 表示将父组件分成3列,将父组件允许的宽度分为4等份,其中第一列占1份,第二列占1份,第三列占2份。如果设置为’0fr’,则该列的宽度为0,GridItem不会显示。如果设置为其他非法值,GridItem会显示为固定1列。

名称: rowsTemplate
参数类型: string
描述: 设置当前网格布局的行数,不设置时默认为1行。例如,‘1fr 1fr 2fr’ 表示将父组件分成3行,将父组件允许的高度分为4等份,其中第一行占1份,第二行占1份,第三行占2份。如果设置为’0fr’,则该行的高度为0,GridItem不会显示。如果设置为其他非法值,GridItem会显示为固定1行。

名称: columnsGap
参数类型: Length
描述: 设置列与列之间的间距。默认值为0。如果设置为小于0的值,将按默认值显示。

名称: rowsGap
参数类型: Length
描述: 设置行与行之间的间距。默认值为0。如果设置为小于0的值,将按默认值显示。

名称: scrollBar
参数类型: BarState
描述: 设置滚动条的状态。默认值为BarState.Off。

名称: scrollBarColor
参数类型: string | number | Color
描述: 设置滚动条的颜色。

名称: scrollBarWidth
参数类型: string | number
描述: 设置滚动条的宽度。宽度设置后,滚动条的正常状态和按压状态的宽度均为指定的宽度值。默认值为4vp。

名称: cachedCount
参数类型: number
描述: 设置预加载的GridItem的数量,仅在LazyForEach中生效。默认值为1。设置缓存后,会在Grid的显示区域上下各缓存cachedCount * 列数个GridItem。LazyForEach超出显示和缓存范围的GridItem会被释放。

名称: editMode
参数类型: boolean
描述: 设置Grid是否进入编辑模式,允许拖拽Grid组件内部的GridItem。默认值为false。

名称: layoutDirection (8+)
参数类型: GridDirection
描述: 设置布局的主轴方向。默认值为GridDirection.Row。

名称: maxCount (8+)
参数类型: number
描述: 当layoutDirection是Row/RowReverse时,表示可显示的最大列数;当layoutDirection是Column/ColumnReverse时,表示可显示的最大行数。默认值为Infinity。

名称: minCount (8+)
参数类型: number
描述: 当layoutDirection是Row/RowReverse时,表示可显示的最小列数;当layoutDirection是Column/ColumnReverse时,表示可显示的最小行数。默认值为1。

名称: cellLength
参数类型: number
描述: 当layoutDirection是Row/RowReverse时,表示一行的高度;当layoutDirection是Column/ColumnReverse时,表示一列的宽度。默认值为第一个元素的大小。

名称: multiSelectable
参数类型: boolean
描述: 是否开启鼠标框选。默认值为false,其中false表示关闭框选,true表示开启框选。

名称: supportAnimation
参数类型: boolean
描述: 是否支持动画。目前支持GridItem的拖拽动画。默认值为false。

1.4 Grid的几种布局模式

Grid组件根据rowsTemplate、columnsTemplate属性的设置情况,可分为以下三种布局模式:

rowsTemplate、columnsTemplate同时设置:
Grid只展示固定行列数的元素,其余元素不展示,且Grid不可滚动。
此模式下以下属性不生效:layoutDirection、maxCount、minCount、cellLength。
Grid的宽高没有设置时,默认适应父组件尺寸。
Gird网格列大小按照Gird自身内容区域大小减去所有行列Gap后按各个行列所占比重分配。
GridItem默认填满网格大小。

rowsTemplate、columnsTemplate仅设置其中的一个:
元素按照设置的方向进行排布,超出Grid显示区域后,Grid可通过滚动的方式展示。
如果设置了columnsTemplate,Gird滚动方向为垂直方向,主轴方向为垂直方向,交叉轴方向为水平方向。
如果设置了rowsTemplate,Gird滚动方向为水平方向,主轴方向为水平方向,交叉轴方向为垂直方向。
此模式下以下属性不生效:layoutDirection、maxCount、minCount、cellLength。
网格交叉轴方向尺寸根据Gird自身内容区域交叉轴尺寸减去交叉轴方向所有Gap后按所占比重分配。
网格主轴方向尺寸取当前网格交叉轴方向所有GridItem高度最大值。

rowsTemplate、columnsTemplate都不设置:
元素在layoutDirection方向上排布,列数由Grid的宽度、首个元素的宽度、minCount、maxCount、columnsGap共同决定。
行数由Grid高度、首个元素高度、cellLength、rowsGap共同决定。超出行列容纳范围的元素不显示,也不能通过滚动进行展示。
此模式下仅生效以下属性:layoutDirection、maxCount、minCount、cellLength、editMode、columnsGap、rowsGap。
当前layoutDirection设置为Row时,先从左到右排列,排满一行再排一下一列。剩余高度不足时不再布局,整体内容顶部居中。
当前layoutDirection设置为Column时,先从上到下排列,排满一列再排一下一列,剩余宽度度不足时不再。整体内容顶部居中。

1.5 GridDirection枚举说明

Row(行):
描述:主轴布局方向沿水平方向布局,即自左往右先填满一行,再去填下一行。
布局方向:水平方向

Column(列):
描述:主轴布局方向沿垂直方向布局,即自上往下先填满一列,再去填下一列。
布局方向:垂直方向

RowReverse(反向行):
描述:主轴布局方向沿水平方向反向布局,即自右往左先填满一行,再去填下一行。
布局方向:水平方向,反向

ColumnReverse(反向列):

描述:主轴布局方向沿垂直方向反向布局,即自下往上先填满一列,再去填下一列。
布局方向:垂直方向,反向
这些描述指导了布局中元素在主轴方向上的排列方式,可以帮助你更好地理解和使用它们。

说明
Grid组件通用属性clip的默认值为true。

1.6事件

除支持通用事件外,还支持以下事件:

1、函数原型:

onScrollIndex(event: (first: number) => void)

在这里插入图片描述

功能描述:当当前网格显示的起始位置的项目发生变化时触发此事件。

2、函数原型:

onItemDragStart(event: (event: ItemDragInfo, itemIndex: number) => (() => any) | void)

在这里插入图片描述

功能描述:当开始拖拽网格元素时触发此事件。函数返回值为 void 表示不允许拖拽。

3、函数原型:

onItemDragEnter(event: (event: ItemDragInfo) => void)

在这里插入图片描述

功能描述:当拖拽进入某个网格元素的范围时触发此事件。

4、函数原型:

onItemDragMove(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number) => void)

在这里插入图片描述

功能描述:当拖拽在某个网格元素的范围内移动时触发此事件。

5、函数原型:

onItemDragLeave(event: (event: ItemDragInfo, itemIndex: number) => void)

在这里插入图片描述

功能描述:当拖拽离开某个网格元素的范围时触发此事件。

6、函数原型:

onItemDrop(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => void)

在这里插入图片描述

功能描述:当绑定了此事件的网格元素可作为拖拽释放目标,且拖拽在网格元素内停止时触发。

ItemDragInfo对象说明

这个对象有下列这些成员:

名称: x
类型: number
描述: 当前拖拽点的x坐标。

名称: y
类型: number
描述: 当前拖拽点的y坐标。

1.7 示例代码

// xxx.ets
@Entry
@Component
struct GridExample {
  @State Number: String[] = ['0', '1', '2', '3', '4']
  scroller: Scroller = new Scroller()

  build() {
    Column({ space: 5 }) {
      Grid() {
        ForEach(this.Number, (day: string) => {
          ForEach(this.Number, (day: string) => {
            GridItem() {
              Text(day)
                .fontSize(16)
                .backgroundColor(0xF9CF93)
                .width('100%')
                .height('100%')
                .textAlign(TextAlign.Center)
            }
          }, day => day)
        }, day => day)
      }
      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
      .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
      .columnsGap(10)
      .rowsGap(10)
      .width('90%')
      .backgroundColor(0xFAEEE0)
      .height(300)

      Text('scroll').fontColor(0xCCCCCC).fontSize(9).width('90%')
      Grid(this.scroller) {
        ForEach(this.Number, (day: string) => {
          ForEach(this.Number, (day: string) => {
            GridItem() {
              Text(day)
                .fontSize(16)
                .backgroundColor(0xF9CF93)
                .width('100%')
                .height(80)
                .textAlign(TextAlign.Center)
            }
          }, day => day)
        }, day => day)
      }
      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
      .columnsGap(10)
      .rowsGap(10)
      .onScrollIndex((first: number) => {
        console.info(first.toString())
      })
      .width('90%')
      .backgroundColor(0xFAEEE0)
      .height(300)
      Button('next page')
        .onClick(() => { // 点击后滑到下一页
          this.scroller.scrollPage({ next: true })
        })
    }.width('100%').margin({ top: 5 })
  }
}

在这里插入图片描述


总结

Grid容器组件:网格容器,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php对字符串中的特殊符号进行过滤的方法

1、使用htmlspecialchars函数&#xff1a;此函数将特殊字符转换为对应的HTML实体。示例代码如下&#xff1a; $str "<script>alert(XSS)</script>"; $filtered_str htmlspecialchars($str); echo $filtered_str; 输出&#xff1a; <script>ale…

四阶龙格库塔与元胞自动机

龙格库塔法参考&#xff1a; 【精选】四阶龙格库塔算法及matlab代码_四阶龙格库塔法matlab_漫道长歌行的博客-CSDN博客 龙格库塔算法 Runge Kutta Method及其Matlab代码_龙格库塔法matlab_Lzh_023016的博客-CSDN博客 元胞自动机参考&#xff1a; 元胞自动机&#xff1a;森林…

线性表(顺序表,单链表,双链表,循环链表,静态链表)

目录 1.线性表的定义1.几个重要的概念2.逻辑结构 2.线性表的基本操作3.顺序表&#xff08;线性表的顺序存储&#xff09;1.静态分配2.动态分配3.顺序表的特点4.顺序表的基本操作1.插入2.删除3.查找1.按位查找2.按值查找 4.链表&#xff08;线性表的链式存储&#xff09;1.单链表…

HackTheBox-Starting Point--Tier 1---Funnel

文章目录 一 题目二 实验过程三 利用SSH隧道3.1 本地端口转发 一 题目 Tags FTP、PostgreSQL、Reconnaissance、Tunneling、Password Spraying、Port Forwarding、Anonymous/Guest Access、Clear Text Credentials译文&#xff1a;FTP、PostgreSQL、侦察、隧道技术、密码喷洒…

【笔记】判断高电平,低电平和方波的几种方法

读取某一个上拉电平信号&#xff0c;它可能输出是低电平&#xff0c;可能是高电平&#xff0c;可能是方波&#xff0c;并且这个方波不知道频率何占空比&#xff0c;那么如何来通过程序来判断呢&#xff1f;高电平和低电平都好说&#xff0c;利用HAL库读取即可&#xff0c;如下&…

在云上jupylab(codelab)常用的shell命令

1、切换当前文件目录位置&#xff1a; %cd /project/train/ 2、删除目标文件夹和文件夹下面的内容&#xff0c;注意这个r是不能少的&#xff1a; !rm -r /project/train/src_repo/dataset 3、创建数据集相关文件夹 !mkdir /project/train/src_repo/dataset 4、复制指定…

Pytorch tensor 数据类型快速转换三种方法

目录 1 通用,简单&#xff0c;CPU/GPU tensor 数据类型转换 2 tensor.type()方法 CPU tensor 数据类型转换 GPU tensor 数据类型转换 3 tensor.to() 方法,CPU/GPU tensor 数据类型转换 1 通用,简单&#xff0c; CPU/GPU tensor 数据类型转换 tensor.double()&#xff1a;…

Educational Codeforces Round 157 (A--D)视频详解

Educational Codeforces Round 157 &#xff08;A--D&#xff09;视频详解 视频链接A题代码B题代码C题代码D题代码 视频链接 Educational Codeforces Round 157 &#xff08;A–D&#xff09;视频详解 A题代码 #include<bits/stdc.h> #define endl \n #define deb(x)…

高频SQL50题(基础版)-2

文章目录 主要内容一.SQL练习题1.577-员工奖金代码如下&#xff08;示例&#xff09;: 2.1280-学生们参加各科测试的次数代码如下&#xff08;示例&#xff09;: 3.570-至少有5名直接下属的经理代码如下&#xff08;示例&#xff09;: 4.1934-确认率代码如下&#xff08;示例&a…

C#,数值计算——偏微分方程,Relaxation的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Relaxation { private Relaxation() { } public static void sor(double[,] a, double[,] b, double[,] c, double[,] d, double[,] e, double[,] f, double[,] u, double rjac) …

大型Bat面试知识总结分享—AMS在Android起到什么作用?简单的分析下Android的源码

面试官: AMS在Android起到什么作用&#xff0c;简单的分析下Android的源码 心理分析&#xff1a;这道题在发生在大多数场景下。面对这道题 很多求职很茫然&#xff0c;不知道该如何说起。AMS本身比较复杂难以理解。工作多年也很难弄清AMS的作用&#xff0c;其实我们大可从以下几…

企业数字化转型与供应链效率-基准回归复刻(2007-2022年)

参照张树山&#xff08;2023&#xff09;的做法&#xff0c;本团队对来自统计与决策《企业数字化转型与供应链效率》一文中的基准回归部分进行复刻。文章实证检验企业数字化转型对供应链效率的影响。用年报词频衡量上市公司数字化转型程度&#xff0c;以库存周转天数来衡量供应…

大数据疫情分析及可视化系统 计算机竞赛

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

西门子S7-200SMART 通过向导实现S7通信的具体组态步骤示例

西门子S7-200SMART 通过向导实现S7通信的具体组态步骤示例 具体步骤可参考以下内容: 打开编程软件STEP7-Micro/WIN SMART在“工具”菜单的“向导”"区域单击"Get/Put"按钮,启动PUT/GET向导, 在弹出的“Get/Put”向导界面种添加操作步骤名称并添加注释。 点…

洛谷P1102 A-B数对 详细解析及AC代码

P1102 A-B数对 前言题目题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码经典二分&#xff08;O(nlgn)&#xff09;酷炫哈希&#xff08;O(n)&#xff09; 后话额外测试用例样例输入 #2样例输出 #2 王婆卖瓜 题目来源 前言 酷&…

OpenAI 年度大戏即将揭晓,5 大剧透全方位曝光

北京时间 11 月 7 日凌晨 2 点&#xff0c;2023 年度最受关注的 AI 活动 OpenAI DevDay 将正式揭晓。2022 年 11 月&#xff0c;OpenAI 正式发布了 ChatGPT&#xff0c;这个改变整个 AI 发展进程和轨迹的颠覆性产品。OpenAI 选择在 ChatGPT 发布一周年之际举行这次活动&#xf…

Git 基础知识回顾及 SVN 转 Git 自测

背景 项目开发过程中使用的版本控制工具是 SVN&#xff0c;Git 多有耳闻&#xff0c;以前也偶尔玩过几次&#xff0c;但是工作中不用&#xff0c;虽然本地也有环境&#xff0c;总是不熟练。 最近看一本网络开源技术书时&#xff0c;下载源码部署了一下&#xff0c;又温故了一…

socket编程中的EINTR是什么?

socket编程中的EINTR是什么? 在socket编程中&#xff0c;我们时常在accept/read/write等接口调用的异常处理的部分看到对于EINTR的处理&#xff0c;例如下面这样的语句&#xff1a; repeat: if(read(fd, buff, size) < 0) {if(errno EINTR)goto repeat;elseprintf("…

时间序列预测中的数据分析->周期性、相关性、滞后性、趋势性、离群值等特性的分析方法

本文介绍 本篇文章给大家介绍的是&#xff0c;当我们在进行有关时间序列相关的工作或者实验时&#xff0c;需要对数据进行的一些数据分析操作(包括周期性、相关性、滞后性、趋势性、离群值等等分析)的方法。在本篇文章中会以实战的形式进行讲解&#xff0c;同时提供运行代码和…

求1~100000之间所有的“水仙花数”,并输出

这里所指的水仙花数&#xff0c;并不是严格意义上的水仙花数&#xff0c;我们先查看一下水仙花数是什么 水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数、阿姆斯壮…