第十节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

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW