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

2024-03-21 12:44

本文主要是介绍第十节HarmonyOS 常用容器组件4-Grid与GridItem,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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、效果图

这篇关于第十节HarmonyOS 常用容器组件4-Grid与GridItem的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832661

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结