harmony 鸿蒙GridItem
GridItem
网格容器中单项内容容器。
说明:
- 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
- 仅支持作为Grid组件的子组件使用。
- 当GridItem配合LazyForEach使用时,GridItem子组件在GridItem创建时创建。配合if/else、ForEach使用时,或父组件为Grid时,GridItem子组件在GridItem布局时创建。
- 当Grid中存在大量GridItem时,使用columnStart/columnEnd、rowStart/rowEnd设置GridItem大小会导致在使用scrollToIndex滑动到指定Index时,依次遍历GridItem节点,耗时较长。建议使用GridLayoutOptions布局,以提高查找GridItem位置的效率。最佳实践请参考优化Grid组件加载慢丢帧问题。
子组件
可以包含单个子组件。
接口
GridItem(value?: GridItemOptions)
创建网格容器中单项内容容器。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value11+ | GridItemOptions | 否 | 为GridItem提供可选参数,该对象内含有GridItemStyle枚举类型的style参数。 |
属性
rowStart
rowStart(value: number)
设置当前元素起始行号。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | number | 是 | 当前元素起始行号。 需要指定GridItem起始行列号和所占行列数的场景推荐使用Grid的layoutOptions参数,详细可参考Grid的示例1和Grid的示例3。 取值范围:[0, 总行数-1] |
rowEnd
rowEnd(value: number)
设置当前元素终点行号。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | number | 是 | 当前元素终点行号。 需要指定GridItem起始行列号和所占行列数的场景推荐使用Grid的layoutOptions参数,详细可参考Grid的示例1和Grid的示例3。 取值范围:[0, 总行数-1] |
columnStart
columnStart(value: number)
设置当前元素起始列号。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | number | 是 | 当前元素起始列号。 需要指定GridItem起始行列号和所占行列数的场景推荐使用Grid的layoutOptions参数,详细可参考Grid的示例1和Grid的示例3。 取值范围:[0, 总列数-1] |
columnEnd
columnEnd(value: number)
设置当前元素终点列号。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | number | 是 | 当前元素终点列号。 需要指定GridItem起始行列号和所占行列数的场景推荐使用Grid的layoutOptions参数,详细可参考Grid的示例1和Grid的示例3。 取值范围:[0, 总列数-1] |
说明:
需要指定GridItem起始行列号和所占行列数的场景推荐使用Grid的layoutOptions参数,详细可参考Grid的示例1和Grid的示例3。
起始行号、终点行号、起始列号、终点列号生效规则如下:
rowStart/rowEnd合理取值范围为0~总行数-1,columnStart/columnEnd合理取值范围为0~总列数-1。
如果设置了rowStart/rowEnd/columnStart/columnEnd,GridItem会占据指定的行数(rowEnd-rowStart+1)或列数(columnEnd-columnStart+1)。
只有在设置columnTemplate和rowTemplate的Grid中,设置合理的rowStart/rowEnd/columnStart/columnEnd四个属性的GridItem才能按照指定的行列号布局。
在设置columnTemplate和rowTemplate的Grid中,单独设置行号rowStart/rowEnd或列号columnStart/columnEnd的GridItem会按照一行一列进行布局。
- 在只设置columnTemplate的Grid中设置列号columnStart/columnEnd的GridItem按照列数布局。在该区域位置存在GridItem布局,则直接换行进行放置。
在只设置rowTemplate的Grid中设置行号rowStart/rowEnd的GridItem按照行数布局。在该区域位置存在GridItem布局,则直接换列进行放置。
columnTemplate和rowTemplate都不设置的Grid中GridItem的行列号属性无效。
以下是GridItem行列号异常值的处理规则:
属性设置情况 异常类型 修正后布局规则 仅设置columnTemplate 任意行列异常 按一行一列布局。 仅设置rowTemplate 任意行列异常 按一行一列布局。 同时设置row/columnTemplate rowStart < rowEnd 行跨度 = min(rowEnd-rowStart+1, 总行数)。 同时设置row/columnTemplate rowStart > rowEnd 按一行一列布局。 同时设置row/columnTemplate columnStart < columnEnd 列跨度 = min(columnEnd-columnStart+1, 总列数)。 同时设置row/columnTemplate columnStart > columnEnd 按一行一列布局。
forceRebuild(deprecated)
forceRebuild(value: boolean)
设置在触发组件build时是否重新创建此节点。GridItem会根据自身属性和子组件变化自行决定是否需要重新创建,无需设置。
从API version 9开始废弃。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | boolean | 是 | 在触发组件build时是否重新创建此节点。 默认值:false |
selectable8+
selectable(value: boolean)
设置当前GridItem元素是否可以被鼠标框选。外层Grid容器的鼠标框选开启时,GridItem的框选才生效。
该属性需要在设置选中态样式前使用才能生效选中态样式。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | boolean | 是 | 当前GridItem元素是否可以被鼠标框选。设置为true时可以被鼠标框选,设置为false时无法被鼠标框选。 默认值:true |
selected10+
selected(value: boolean)
设置当前GridItem选中状态。该属性支持$$双向绑定变量。
该属性需要在设置选中态样式前使用才能生效选中态样式。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | boolean | 是 | 当前GridItem选中状态。设置为true时为选中状态,设置为false时为默认状态。 默认值:false |
GridItemOptions11+对象说明
GridItem样式对象。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
style | GridItemStyle | 否 | 设置GridItem样式。 默认值:GridItemStyle.NONE 设置为GridItemStyle.NONE时无样式。 设置为GridItemStyle.PLAIN时,显示Hover、Press态样式。 |
GridItemStyle11+枚举说明
GridItem样式枚举。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
名称 | 值 | 说明 |
---|---|---|
NONE | 0 | 无样式。 |
PLAIN | 1 | 显示Hover、Press态样式。 |
说明:
GridItem焦点态样式设置:Grid组件需要设置4vp规格以上的内边距,用于显示GridItem的焦点框。
事件
onSelect8+
onSelect(event: (isSelected: boolean) => void)
GridItem元素被鼠标框选的状态改变时触发回调。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
isSelected | boolean | 是 | 进入鼠标框选范围即被选中返回true, 移出鼠标框选范围即未被选中返回false。 |
示例
示例1(GridItem设置自身位置)
GridItem通过设置合理的ColumnStart、ColumnEnd、RowStart、RowEnd属性来设置自身位置。需要指定GridItem起始行列号和所占行列数的场景推荐使用Grid的layoutOptions参数,详细可参考Grid的示例1和Grid的示例3。
// xxx.ets
@Entry
@Component
struct GridItemExample {
@State numbers: string[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"];
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: string) => {
GridItem() {
Text(item)
.fontSize(16)
.backgroundColor(0xF9CF93)
.width('100%')
.height('100%')
.textAlign(TextAlign.Center)
}
}, (item: string) => 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 })
}
}
示例2(设置GridItem样式)
使用GridItemOptions设置GridItem样式。
// xxx.ets
@Entry
@Component
struct GridItemExample {
@State numbers: String[] = ['0', '1', '2'];
build() {
Column({ space: 5 }) {
Grid() {
ForEach(this.numbers, (day: string) => {
ForEach(this.numbers, (day: string) => {
GridItem({style:GridItemStyle.NONE}) {
Text(day)
.fontSize(16)
.width('100%')
.height('100%')
.textAlign(TextAlign.Center)
.focusable(true)
}
.backgroundColor(0xF9CF93)
}, (day: string) => day)
}, (day: string) => day)
}
.columnsTemplate('1fr 1fr 1fr')
.rowsTemplate('1fr 1fr')
.columnsGap(4)
.rowsGap(4)
.width('60%')
.backgroundColor(0xFAEEE0)
.height(150)
.padding('4vp')
Grid() {
ForEach(this.numbers, (day: string) => {
ForEach(this.numbers, (day: string) => {
GridItem({style:GridItemStyle.PLAIN}) {
Text(day)
.fontSize(16)
.width('100%')
.height('100%')
.textAlign(TextAlign.Center)
.focusable(true)
}
.backgroundColor(0xF9CF93)
}, (day: string) => day)
}, (day: string) => day)
}
.columnsTemplate('1fr 1fr 1fr')
.rowsTemplate('1fr 1fr')
.columnsGap(4)
.rowsGap(4)
.width('60%')
.backgroundColor(0xFAEEE0)
.height(150)
.padding('4vp')
}.width('100%').margin({ top: 5 })
}
}
你可能感兴趣的鸿蒙文章
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦