第十节HarmonyOS 常用容器组件4-Grid与GridItem

news2024/9/19 13:46:40

1、描述

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

  1. 子组件

包含GridItem子组件。

3、接口

Grid(scroller?: Scroller)

4、参数

参数名

参数类型

必填

描述

scroller

Scroller

可滚动组件的控制器。用于与可滚动组件进行绑定。

5、属性

名称

参数类型

描述

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

GridDirection

设置布局的主轴方向。默认值:GridDirection.Row。

maxCount

number

当layoutDriection是Row/RowReverse时,表示可显示的最大列数。当layoutDriection是Column/ColumnReverse时,表示可显示的最大行数。

默认值:Infinity。

minCount

number

当layoutDriection是Row/RowReverse时,表示可显示的最小列数。当layoutDriection是Column/ColumnReverse时,表示可显示的最小行数。

默认值:1。

cellLength

number

当layoutDirection是Row/RowReverse时,表示一行的高度。当layoutDirection是Column/ColumnReverse时,表示一列的宽度。

默认值:第一个元素的大小

multiSelectable

boolean

是否开启鼠标框选。

默认值:false。

supportAnimation

boolean

是否支持动画。当前支持GridItem拖拽动画。默认值:flase。

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

1、rowsTemplate、columnsTemplate同时设置:

(1)、Grid只展示固定行列数的元素,其余元素不展示,且Grid不可滚动。

(2)、此模式下以下属性不生效:layoutDirection、maxCount、minCount、cellLength。

(3)、Grid的宽高没有设置时,默认适应父组件尺寸。

(4)、Gird网格列大小按照Gird自身内容区域大小减去所有行列Gap后按各个行列所占比重分配。

(5)、GridItem默认填满网格大小。

(6)、此模式下GridItem同时设置了rowStart、columnStart,会用设置的rowStart、columnStart所在位置摆放GridItem。如果这个位置已经有GridItem则会发生重叠。

(7)、如果GridItem设置了rowStart、columnStart其中一个,会从上一个GridItem布局位置开始遍历寻找满足rowStart或columnStart的空闲位置摆放,如果无满足条件的空闲位置,则不布局该GridItem。

(8)、如果GridItem的rowStart、columnStart属性都没有设置,会从上一个GridItem布局位置开始遍历寻找空闲位置摆放,如果没有空闲位置,则不布局该GridItem。

(9)、如果GridItem的rowEnd有设置,但是rowStart没有设置,当做rowStart已经设置,并且和rowEnd设置为相同值。如果GridItem的columnEnd有设置,但是columnStart没有设置,当做columnStart已经设置,并且和columnEnd设置为相同值。

2、rowsTemplate、columnsTemplate仅设置其中的一个:

(1)、元素按照设置的方向进行排布,超出Grid显示区域后,Grid可通过滚动的方式展示。

(2)、如果设置了columnsTemplate,Gird滚动方向为垂直方向,主轴方向为垂直方向,交叉轴方向为水平方向。

(3)、如果设置了rowsTemplate,Gird滚动方向为水平方向,主轴方向为水平方向,交叉轴方向为垂直方向。

(4)、此模式下以下属性不生效:layoutDirection、maxCount、minCount、cellLength。

(5)、网格交叉轴方向尺寸根据Gird自身内容区域交叉轴尺寸减去交叉轴方向所有Gap后按所占比重分配。

(6)、网格主轴方向尺寸取当前网格交叉轴方向所有GridItem高度最大值。

(7)、此模式下GridItem同时设置了rowStart、columnStart,会用设置的rowStart、columnStart所在位置摆放GridItem。如果这个位置已经有GridItem则会发生重叠。

(8)、如果GridItem设置了rowStart、columnStart其中一个,会从上一个GridItem布局位置开始遍历寻找满足rowStart或columnStart的空闲位置摆放。

(9)、如果GridItem的rowStart、columnStart属性都没有设置,会从上一个GridItem布局位置开始遍历寻找空闲位置摆放。

(10)、如果GridItem的rowEnd有设置,但是rowStart没有设置,当做rowStart已经设置,并且和rowEnd设置为相同值。如果GridItem的columnEnd有设置,但是columnStart没有设置,当做columnStart已经设置,并且和columnEnd设置为相同值。

3、rowsTemplate、columnsTemplate都不设置:

(1)、元素在layoutDirection方向上排布,列数由Grid的宽度、首个元素的宽度、minCount、maxCount、columnsGap共同决定。

(2)、行数由Grid高度、首个元素高度、cellLength、rowsGap共同决定。超出行列容纳范围的元素不显示,也不能通过滚动进行展示。

(3)、此模式下仅生效以下属性:layoutDirection、maxCount、minCount、cellLength、editMode、columnsGap、rowsGap。

(4)、当前layoutDirection设置为Row时,先从左到右排列,排满一行再排一下一列。剩余高度不足时不再布局,整体内容顶部居中。

(5)、当前layoutDirection设置为Column时,先从上到下排列,排满一列再排一下一列,剩余宽度度不足时不再。整体内容顶部居中。

(6)、此模式下GridItem的rowStart、columnStart不生效。

6、GridDriection枚举说明:

名称

描述

Row

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

Column

主轴布局方向沿垂直方向布局,即自上往下先填满一列,再去填下一列。

RowReverse

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

ColumnReverse

主轴布局方向沿垂直方向反向布局,即自下往上先填满一列,再去填下一列。

7、事件

名称

功能描述

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

当前网格显示的起始位置Item发生变化时触发。first:当前显示的网格起始位置的索引。

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

喀什拖动网格元素时触发。

- event: 见ItemDragInfo对象说明。

- itemIndex: 被拖拽网格元素索引值。

说明:

返回void表示不能拖拽。

手指长按GridItem时触发该事件。

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

拖拽进入网格元素范围内时触发。

- event: 见ItemDragInfo对象说明。

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

拖拽在网格元素范围内移动时触发。

- event: 见ItemDragInfo对象说明。

- itemIndex: 拖拽起始位置。

- insertIndex: 拖拽插入位置。

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

拖拽离开网格元素时触发。

- event: 见ItemDragInfo对象说明。

- itemIndex: 拖拽离开的网格元素索引值。

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

绑定该事件的网格元素可作为拖拽释放目标,当在网格元素内停止拖拽时触发。

- event: 见ItemDragInfo对象说明。

- itemIndex: 拖拽起始位置。

- insertIndex: 拖拽插入位置。

- isSuccess: 是否成功释放。

7.1、子组件GridItem

描述:网格布局中单项内容容器。

子组件:可以包含子组件。

接口:GridItem()

属性:

名称

参数类型

描述

rowStart

number

指定当前元素起始行号。

rowEnd

number

指定当前元素终点行号。

columnStart

number

指定当前元素起始列号。

columnEnd

number

指定当前元素终点列号。

forceRebuild(deprecated)

boolean

设置在触发组件build时是否重新创建此节点。

从API version9开始废弃。GridItem会根据自身属性和子组件变化自行决定是否需要重新创建,无需设置。

默认值:false

selectable8+

boolean

当前GridItem元素是否可以被鼠标框选。

> 说明:

> 外层Grid容器的鼠标框选开启时,GridItem的框选才生效。

默认值:true

说明:

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

(1)、rowStart/rowEnd合理取值范围为0~总行数-1,columnStart/columnEnd合理取值范围为0~总列数-1。

(2)、只有在设置columnTemplate和rowTemplate的Grid中,设置合理的rowStart/rowEnd/columnStart/columnEnd四个属性的GridItem才能按照指定的行列号布局。

(3)、在设置columnTemplate和rowTemplate的Grid中,单独设置行号rowStart/rowEnd或列号columnStart/columnEnd的GridItem会占用指定的行数(rowEnd-rowStart+1)或列数(columnEnd-colum nStart+1)。

(4)、在只设置columnTemplate的Grid中设置列号columnStart/columnEnd的GridItem按照指定的列数布局。

(5)、在只设置rowTemplate的Grid中设置行号rowStart/rowEnd的GridItem按照指定的行数布局。

(6)、columnTemplate和rowTemplate都不设置的Grid中GridItem的行列号属性无效。

事件:

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

功能描述:GridItem元素被鼠标框选的状态改变时触发回调。

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

8、示例

@Entry
@Component
struct GridPage {
  @State message: string = '网格容器,由行和列分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。';
  @State gridList: String[] = ['0', '1', '2', '3', '4'];
  scroller: Scroller = new Scroller(); // 控制器

  build() {
    Column({ space: 5 }) {
      Grid() {
        ForEach(this.gridList, (day: string) => {
          ForEach(this.gridList, (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.gridList, (day: string) => {
          ForEach(this.gridList, (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 })
  }
}

9、效果图

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

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

相关文章

安科瑞智能断路器产品介绍【可监可控 远程操控 短路保护】

开发背景 过去几年智慧用电的产品应用中,大多数只安装于进线测。主要存在以下几个问题:难定位,不知道具体哪个回路出线问题,排查困难;出线过载或线缆温度过高无法知晓;即使是出线回路安装了的场景&#xf…

uniapp+uview 学习笔记(二)—— H5开发

文章目录 前言一、开发步骤1.创建项目2.安装组件库并导入使用3.封装请求4.国际化5.打包 总结 前言 本文主要介绍使用uniapp框架和uview组件库进行H5开发,需要用到的开发工具为HBuilder X。 一、开发步骤 1.创建项目 打开HBuilder X,在顶部栏目选择 新…

英国教育部学生信息中心

你是否曾因学历无法得到国内雇主的认可而感到困扰?别担心,英国教育部学校信息中心为你解忧!作为英国政府官方认可的学历认证机构,其权威性和可靠性广受认可,为留学生求职提供了强大的支持。 一、打破求 职困境:学历真实性认证的重要性 在求职过程中,学历的真实性和有效性是雇…

电脑照片分辨率怎么调?这款dpi修改工具好用

许多考试平台在上传证件照片的时候,大多都会对图片分辨率有具体要求,但是如果遇上手上的图片分辨率达不到要求,那么怎么改图片分辨率呢?可以利用专业的dpi修改工具来处理,比如今天分享的就是一个在线修改图片分辨率的方…

积鼎CFD发动机燃烧仿真,实现航空航天发动机内部燃烧过程的流体仿真

航空航天发动机中的燃烧现象是一种复杂的物理化学过程,包括流动、雾化、相变、传热传质、点火熄火、化学反应、污染物排放、热声振荡和冷却等多个过程,加上燃烧的非定常性和高湍流度,使得准确模拟燃烧过程变得异常困难。在传统CFD模拟需要考虑…

javaSwing推箱子游戏

一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。在人类…

扩展学习|数字经济与公共管理的相关论文(管理世界)

一是如何建立与数字经济时代相适应的政府监管体制机制? 问题一和二来源:[1]王岭.数字经济时代中国政府监管转型研究[J].管理世界,2024,40(03):110-126204127.DOI:10.19744/j.cnki.11-1235/f.2024.0027. (1)数字经济时代政府监管转…

ByteTrack多目标跟踪——YOLOX详解

文章目录 1 before train1.1 dataset1.2 model 2 train2.1 Backbone2.2 PAFPN2.3 Head2.3.1 Decoupled Head2.3.2 anchor-free2.3.3 标签分配① 初步筛选② simOTA 2.3.4 Loss计算 项目地址: ByteTrack ByteTrack使用的检测器是YOLOX,是一个目前非常流行…

在 NVIDIA DGX Cloud 上使用 H100 GPU 轻松训练模型

近期,我们正式宣布推出 DGX 云端训练 (Train on DGX Cloud) 服务,这是 Hugging Face Hub 上针对企业 Hub 组织的全新服务。 通过在 DGX 云端训练,你可以轻松借助 NVIDIA DGX Cloud 的高速计算基础设施来使用开放的模型。这项服务旨在让企业 H…

vue2 项目运行 浏览器自动打开 vue项目启动如何自动打开浏览器 vue2取消浏览器自动打开浏览器,vue2关闭自动打开浏览器

1. 找到package.json 2. 找到scripts 在后面添加 --open即可: 3. 运行npm run serve 运行之后,就可以自动打开默认浏览器 4. 同理,不想自动打开 ,将 --open 删除即可!

【机器学习】基于布谷鸟搜索算法优化的BP神经网络分类预测(CS-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】布谷鸟搜索算法(CS)原理及实现 2.设计与实现 数据集: 数据集样本总数2000 多输入多输出:样本特征24&#xff0…

选择器加练习

一、常用的选择器 1.元素选择器 语法 : 标签名{} 作用 : 选中对应标签中的内容 例:p{} , div{} , span{} , ol{} , ul{} ...... 2.类选择器(class选择器) 语法 : .class属性值{} 作用 : 选中对应class属性值的元素 注意:class里面的属性值不能以数字开头,如果以符号开头,…

鸿蒙Harmony应用开发—ArkTS-属性动画

组件的某些通用属性变化时,可以通过属性动画实现渐变过渡效果,提升用户体验。支持的属性包括width、height、backgroundColor、opacity、scale、rotate、translate等。布局类改变宽高的动画,内容都是直接到终点状态,例如文字、can…

C++之模版详解

一.array与vector对比 由图发现&#xff0c;使用array数组是必须提前开好空间&#xff0c;而vector是顺序表&#xff0c;可以实现动态开辟空间 array也支持迭代器&#xff0c;如下&#xff1a; int main() {array<int, 10> arr{ 1,2,3,4,5,6,7,8,9,10 };auto it arr.be…

蓝牙HFP协议推荐的语音丢包补偿算法浮点实现的定点化

最近在做蓝牙的宽带语音通话。相对于蓝牙窄带语音&#xff0c;主要变化是把采样率从8k变到16k&#xff0c;以及编解码器从CVSD变成mSBC&#xff08;modified SBC&#xff0c;改进的SBC&#xff09;等。蓝牙语音通话相关的HFP&#xff08;Hand Free Profile&#xff09;强烈建议…

第1关:创建数据库

任务描述 创建一个名为mydata的数据库。 相关知识 MySQL创建数据库的语法如下&#xff1a; 其中&#xff0c;database_name是要创建的数据库的名称。 开始你的任务吧&#xff0c;祝你成功&#xff01; #请在此处添加实现代码 ########## Begin ########## CREATE DATABASE …

如何有效防止员工摸鱼

在现代企业中&#xff0c;员工的工作效率直接影响到公司的运营和发展。然而&#xff0c;有时员工在上班时间会出现摸鱼现象&#xff0c;这不仅浪费了工作时间&#xff0c;还影响了团队的整体氛围和工作效率。 为了有效解决这一问题&#xff0c;本文将探讨一系列具体措施&#…

代码随想录day27(1)二叉树:二叉树的最近公共祖先(leetcode236)

题目要求&#xff1a;给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 思路&#xff1a;首先遍历顺序应为后序&#xff0c;因为判断两个节点的最近公共祖先实际上要自底向上&#xff0c;可以通过回溯来实现。实际上包含两种情况&#xff1a;第一种是节点p本身有一个子…

如何控制螺栓预紧力?——SunTorque智能扭矩系统

​智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓预紧力是确保机械连接件紧固可靠的关键因素。预紧力过小可能导致连接件松动&#xff0c;预紧力过大则可能引起螺栓断裂或连接件损坏。因此&#xff0c;掌握控制螺栓预紧力的诀窍对于确保设备安全和长期运行至关重要…

目标检测数据集中负样本的处理方式

深度学习中&#xff0c;为了提高模型的精度和泛化能力&#xff0c;往往着眼于两个方面&#xff1a;&#xff08;1&#xff09;使用更多的数据&#xff08;2&#xff09;使用更深更复杂的网络。 一、什么是负样本 负样本是指不包含任务所要识别的目标的图像&#xff0c;也叫负…