Grid
網(wǎng)格容器,由“行”和“列”分割的單元格所組成,通過(guò)指定“項(xiàng)目”所在的單元格做出各種各樣的布局。
說(shuō)明:
開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
該組件從API Version 7開(kāi)始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。
子組件
僅支持[GridItem]子組件。
說(shuō)明:
Grid子組件的索引值計(jì)算規(guī)則:
按子組件的順序依次遞增。
if/else語(yǔ)句中,只有條件成立分支內(nèi)的子組件會(huì)參與索引值計(jì)算,條件不成立分支內(nèi)的子組件不計(jì)算索引值。
ForEach/LazyForEach語(yǔ)句中,會(huì)計(jì)算展開(kāi)所有子節(jié)點(diǎn)索引值。
[if/else]、[ForEach]和[LazyForEach]發(fā)生變化以后,會(huì)更新子節(jié)點(diǎn)索引值。
Grid子組件的visibility屬性設(shè)置為Hidden或None時(shí)依然會(huì)計(jì)算索引值。
Grid子組件的visibility屬性設(shè)置為None時(shí)不顯示,但依然會(huì)占用子組件對(duì)應(yīng)的網(wǎng)格。
Grid子組件設(shè)置position屬性,會(huì)占用子組件對(duì)應(yīng)的網(wǎng)格,子組件將顯示在相對(duì)Grid左上角偏移position的位置。該子組件不會(huì)隨其對(duì)應(yīng)網(wǎng)格滾動(dòng),在對(duì)應(yīng)網(wǎng)格滑出Grid顯示范圍外后不顯示。
接口
Grid(scroller?: Scroller, layoutOptions?: GridLayoutOptions)
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
scroller | [Scroller] | 否 | 可滾動(dòng)組件的控制器。用于與可滾動(dòng)組件進(jìn)行綁定。**說(shuō)明:**不允許和其他[滾動(dòng)類組件]綁定同一個(gè)滾動(dòng)控制對(duì)象。 |
layoutOptions10+ | GridLayoutOptions | 否 | 滾動(dòng)Grid布局選項(xiàng)。 |
GridLayoutOptions10+
布局選項(xiàng),配合rowsTemplate、columnsTemplate僅設(shè)置其中一個(gè)的Grid使用,可以替代通過(guò)columnStart/columnEnd控制GridItem占用多列、rowStart/rowEnd控制GridItem占用多行的場(chǎng)景。
參數(shù):
名稱 | 類型 | 必填 | 描述 |
---|---|---|---|
regularSize | [number, number] | 是 | 大小規(guī)則的GridItem在Grid中占的行數(shù)和列數(shù),只支持占1行1列即[1, 1]。 |
irregularIndexes | number[] | 否 | 大小不規(guī)則的GridItem在Grid所有子節(jié)點(diǎn)中的索引值。onGetIrregularSizeByIndex不設(shè)置時(shí)irregularIndexes中的GridItem默認(rèn)占垂直滾動(dòng)Grid的一整行或水平滾動(dòng)Grid的一整列。 |
onGetIrregularSizeByIndex | (index: number) => [number, number] | 否 | 獲取不規(guī)則GridItem占用的行數(shù)和列數(shù),布局過(guò)程中針對(duì)irregularIndexes中的index調(diào)用,開(kāi)發(fā)者應(yīng)返回index對(duì)應(yīng)GridItem占用的行數(shù)和列數(shù)。垂直滾動(dòng)Grid不支持GridItem占多行,水平滾動(dòng)Grid不支持GridItem占多列。 |
屬性
除支持[通用屬性]外,還支持以下屬性:
名稱 | 參數(shù)類型 | 描述 |
---|---|---|
columnsTemplate | string | 設(shè)置當(dāng)前網(wǎng)格布局列的數(shù)量或最小列寬值,不設(shè)置時(shí)默認(rèn)1列。 例如, '1fr 1fr 2fr' 是將父組件分3列,將父組件允許的寬分為4等份,第一列占1份,第二列占1份,第三列占2份。 ‘repeat(auto-fit, 90px)’是設(shè)置最小列寬值為90,自動(dòng)計(jì)算列數(shù)和實(shí)際列寬。**說(shuō)明:**設(shè)置為'0fr'時(shí),該列的列寬為0,不顯示GridItem。設(shè)置為其他非法值時(shí),GridItem顯示為固定1列。 |
rowsTemplate | string | 設(shè)置當(dāng)前網(wǎng)格布局行的數(shù)量或最小行高值,不設(shè)置時(shí)默認(rèn)1行。 例如, '1fr 1fr 2fr'是將父組件分三行,將父組件允許的高分為4等份,第一行占1份,第二行占一份,第三行占2份。 ‘repeat(auto-fit, 90px)’是設(shè)置最小行高值為90,自動(dòng)計(jì)算行數(shù)和實(shí)際行高。**說(shuō)明:**設(shè)置為'0fr',則這一行的行寬為0,這一行GridItem不顯示。設(shè)置為其他非法值,按固定1行處理。 |
columnsGap | [Length] | 設(shè)置列與列的間距。 默認(rèn)值:0**說(shuō)明:**設(shè)置為小于0的值時(shí),按默認(rèn)值顯示。 |
rowsGap | [Length] | 設(shè)置行與行的間距。 默認(rèn)值:0**說(shuō)明:**設(shè)置為小于0的值時(shí),按默認(rèn)值顯示。 |
scrollBar | [BarState] | 設(shè)置滾動(dòng)條狀態(tài)。 默認(rèn)值:BarState.Off**說(shuō)明:**API version 9及以下版本默認(rèn)值為BarState.Off,API version 10的默認(rèn)值為BarState.Auto。 |
scrollBarColor | string | number |
scrollBarWidth | string | number |
cachedCount | number | 設(shè)置預(yù)加載的GridItem的數(shù)量,只在[LazyForEach]中生效。具體使用可參考[減少應(yīng)用白塊說(shuō)明]。 默認(rèn)值:1**說(shuō)明:**設(shè)置緩存后會(huì)在Grid顯示區(qū)域上下各緩存cachedCount*列數(shù)個(gè)GridItem。 [LazyForEach]超出顯示和緩存范圍的GridItem會(huì)被釋放。 設(shè)置為小于0的值時(shí),按默認(rèn)值顯示。 |
editMode 8+ | boolean | 設(shè)置Grid是否進(jìn)入編輯模式,進(jìn)入編輯模式可以拖拽Grid組件內(nèi)部[GridItem]。 默認(rèn)值:flase |
layoutDirection8+ | [GridDirection] | 設(shè)置布局的主軸方向。 默認(rèn)值:GridDirection.Row |
maxCount8+ | number | 當(dāng)layoutDirection是Row/RowReverse時(shí),表示可顯示的最大列數(shù) 當(dāng)layoutDirection是Column/ColumnReverse時(shí),表示可顯示的最大行數(shù)。 默認(rèn)值:Infinity**說(shuō)明:**當(dāng)maxCount小于minCount時(shí),maxCount和minCount都按默認(rèn)值處理。 設(shè)置為小于1的值時(shí),按默認(rèn)值顯示。 |
minCount8+ | number | 當(dāng)layoutDirection是Row/RowReverse時(shí),表示可顯示的最小列數(shù)。 當(dāng)layoutDirection是Column/ColumnReverse時(shí),表示可顯示的最小行數(shù)。 默認(rèn)值:1**說(shuō)明:**設(shè)置為小于1的值時(shí),按默認(rèn)值顯示。 |
cellLength8+ | number | 當(dāng)layoutDirection是Row/RowReverse時(shí),表示一行的高度。 當(dāng)layoutDirection是Column/ColumnReverse時(shí),表示一列的寬度。 默認(rèn)值:第一個(gè)元素的大小 |
multiSelectable8+ | boolean | 是否開(kāi)啟鼠標(biāo)框選。 默認(rèn)值:false - false:關(guān)閉框選。 - true:開(kāi)啟框選。**說(shuō)明:**開(kāi)啟框選后,可以配合Griditem的selected屬性和onSelect事件獲取GridItem的選中狀態(tài),還可以設(shè)置[選中態(tài)樣式](無(wú)默認(rèn)選中樣式)。 |
supportAnimation8+ | boolean | 是否支持動(dòng)畫。當(dāng)前支持GridItem拖拽動(dòng)畫。 默認(rèn)值:false**說(shuō)明:**僅在滾動(dòng)模式下(只設(shè)置rowsTemplate、columnsTemplate其中一個(gè))支持動(dòng)畫。 |
edgeEffect10+ | [EdgeEffect] | 設(shè)置組件的滑動(dòng)效果,支持彈簧效果和陰影效果。 默認(rèn)值:EdgeEffect.None |
enableScrollInteraction10+ | boolean | 設(shè)置是否支持滾動(dòng)手勢(shì),當(dāng)設(shè)置為false時(shí),無(wú)法通過(guò)手指或者鼠標(biāo)滾動(dòng),但不影響控制器的滾動(dòng)接口。 默認(rèn)值:true |
nestedScroll10+ | [NestedScrollOptions] | 嵌套滾動(dòng)選項(xiàng)。設(shè)置向前向后兩個(gè)方向上的嵌套滾動(dòng)模式,實(shí)現(xiàn)與父組件的滾動(dòng)聯(lián)動(dòng)。 |
friction10+ | number | [Resource] |
Grid組件根據(jù)rowsTemplate、columnsTemplate屬性的設(shè)置情況,可分為以下三種布局模式:
1、rowsTemplate、columnsTemplate同時(shí)設(shè)置:
- Grid只展示固定行列數(shù)的元素,其余元素不展示,且Grid不可滾動(dòng)。
- 此模式下以下屬性不生效:layoutDirection、maxCount、minCount、cellLength。
- Grid的寬高沒(méi)有設(shè)置時(shí),默認(rèn)適應(yīng)父組件尺寸。
- Gird網(wǎng)格列大小按照Gird自身內(nèi)容區(qū)域大小減去所有行列Gap后按各個(gè)行列所占比重分配。
- GridItem默認(rèn)填滿網(wǎng)格大小。
2、rowsTemplate、columnsTemplate僅設(shè)置其中的一個(gè):
- 元素按照設(shè)置的方向進(jìn)行排布,超出Grid顯示區(qū)域后,Grid可通過(guò)滾動(dòng)的方式展示。
- 如果設(shè)置了columnsTemplate,Gird滾動(dòng)方向?yàn)榇怪狈较?,主軸方向?yàn)榇怪狈较?,交叉軸方向?yàn)樗椒较颉?/li>
- 如果設(shè)置了rowsTemplate,Gird滾動(dòng)方向?yàn)樗椒较颍鬏S方向?yàn)樗椒较?,交叉軸方向?yàn)榇怪狈较颉?/li>
- 此模式下以下屬性不生效:layoutDirection、maxCount、minCount、cellLength。
- 網(wǎng)格交叉軸方向尺寸根據(jù)Gird自身內(nèi)容區(qū)域交叉軸尺寸減去交叉軸方向所有Gap后按所占比重分配。
- 網(wǎng)格主軸方向尺寸取當(dāng)前網(wǎng)格交叉軸方向所有GridItem高度最大值。
3、rowsTemplate、columnsTemplate都不設(shè)置:
- 元素在layoutDirection方向上排布,列數(shù)由Grid的寬度、首個(gè)元素的寬度、minCount、maxCount、columnsGap共同決定。
- 行數(shù)由Grid高度、首個(gè)元素高度、cellLength、rowsGap共同決定。超出行列容納范圍的元素不顯示,也不能通過(guò)滾動(dòng)進(jìn)行展示。
- 此模式下僅生效以下屬性:layoutDirection、maxCount、minCount、cellLength、editMode、columnsGap、rowsGap。
- 當(dāng)前l(fā)ayoutDirection設(shè)置為Row時(shí),先從左到右排列,排滿一行再排一下一列。剩余高度不足時(shí)不再布局,整體內(nèi)容頂部居中。
- 當(dāng)前l(fā)ayoutDirection設(shè)置為Column時(shí),先從上到下排列,排滿一列再排一下一列,剩余寬度度不足時(shí)不再。整體內(nèi)容頂部居中。
GridDirection8+枚舉說(shuō)明
名稱 | 描述 |
---|---|
Row | 主軸布局方向沿水平方向布局,即自左往右先填滿一行,再去填下一行。 |
Column | 主軸布局方向沿垂直方向布局,即自上往下先填滿一列,再去填下一列。 |
RowReverse | 主軸布局方向沿水平方向反向布局,即自右往左先填滿一行,再去填下一行。 |
ColumnReverse | 主軸布局方向沿垂直方向反向布局,即自下往上先填滿一列,再去填下一列。 |
說(shuō)明:
Grid組件[通用屬性clip]的默認(rèn)值為true。
事件
除支持[通用事件]外,還支持以下事件:
名稱 | 功能描述 |
---|---|
onScrollIndex(event: (first: number, last10+: number) => void) | 當(dāng)前網(wǎng)格顯示的起始位置/終止位置的item發(fā)生變化時(shí)觸發(fā)。網(wǎng)格初始化時(shí)會(huì)觸發(fā)一次。 - first: 當(dāng)前顯示的網(wǎng)格起始位置的索引值。 - last: 當(dāng)前顯示的網(wǎng)格終止位置的索引值。 Grid顯示區(qū)域上第一個(gè)子組件/最后一個(gè)組件的索引值有變化就會(huì)觸發(fā)。 |
onItemDragStart(event: (event: ItemDragInfo, itemIndex: number) => (() => any) | void) |
onItemDragEnter(event: (event: ItemDragInfo) => void) | 拖拽進(jìn)入網(wǎng)格元素范圍內(nèi)時(shí)觸發(fā)。 - event: 見(jiàn)[ItemDragInfo對(duì)象說(shuō)明]。 |
onItemDragMove(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number) => void) | 拖拽在網(wǎng)格元素范圍內(nèi)移動(dòng)時(shí)觸發(fā)。 - event: 見(jiàn)[ItemDragInfo對(duì)象說(shuō)明]。 - itemIndex: 拖拽起始位置。 - insertIndex: 拖拽插入位置。 |
onItemDragLeave(event: (event: ItemDragInfo, itemIndex: number) => void) | 拖拽離開(kāi)網(wǎng)格元素時(shí)觸發(fā)。 - event: 見(jiàn)[ItemDragInfo對(duì)象說(shuō)明]。 - itemIndex: 拖拽離開(kāi)的網(wǎng)格元素索引值。 |
onItemDrop(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => void) | 綁定該事件的網(wǎng)格元素可作為拖拽釋放目標(biāo),當(dāng)在網(wǎng)格元素內(nèi)停止拖拽時(shí)觸發(fā)。 - event: 見(jiàn)[ItemDragInfo對(duì)象說(shuō)明]。 - itemIndex: 拖拽起始位置。 - insertIndex: 拖拽插入位置。 - isSuccess: 是否成功釋放。 |
onScrollBarUpdate(event: (index: number, offset: number) => ComputedBarAttribute) | 當(dāng)前網(wǎng)格顯示的起始位置item發(fā)生變化時(shí)觸發(fā),可通過(guò)該回調(diào)設(shè)置滾動(dòng)條的位置及長(zhǎng)度。 - index: 當(dāng)前顯示的網(wǎng)格起始位置的索引值。 - offset: 當(dāng)前顯示的網(wǎng)格起始位置元素相對(duì)網(wǎng)格顯示起始位置的偏移。 - ComputedBarAttribute: 見(jiàn)[ComputedBarAttribute對(duì)象說(shuō)明]。 |
onScroll10+(event: (scrollOffset: number, scrollState: ScrollState) => void) | 網(wǎng)格滑動(dòng)時(shí)觸發(fā)。 - scrollOffset: 每幀滾動(dòng)的偏移量,Grid的內(nèi)容向上滾動(dòng)時(shí)偏移量為正,向下滾動(dòng)時(shí)偏移量為負(fù)。 - [scrollState]: 當(dāng)前滑動(dòng)狀態(tài)。 |
onReachStart10+(event: () => void) | 網(wǎng)格到達(dá)起始位置時(shí)觸發(fā)。**說(shuō)明:**Grid初始化時(shí)如果initialIndex為0會(huì)觸發(fā)一次,Grid滾動(dòng)到起始位置時(shí)觸發(fā)一次。Grid邊緣效果為彈簧效果時(shí),劃動(dòng)經(jīng)過(guò)起始位置時(shí)觸發(fā)一次,回彈回起始位置時(shí)再觸發(fā)一次。 |
onReachEnd10+(event: () => void) | 網(wǎng)格到底末尾位置時(shí)觸發(fā)。**說(shuō)明:**Grid邊緣效果為彈簧效果時(shí),劃動(dòng)經(jīng)過(guò)末尾位置時(shí)觸發(fā)一次,回彈回末尾位置時(shí)再觸發(fā)一次。 |
onScrollFrameBegin10+(event: (offset: number, state: ScrollState) => { offsetRemain }) | 網(wǎng)格開(kāi)始滑動(dòng)時(shí)觸發(fā),事件參數(shù)傳入即將發(fā)生的滑動(dòng)量,事件處理函數(shù)中可根據(jù)應(yīng)用場(chǎng)景計(jì)算實(shí)際需要的滑動(dòng)量并作為事件處理函數(shù)的返回值返回,網(wǎng)格將按照返回值的實(shí)際滑動(dòng)量進(jìn)行滑動(dòng)。 - offset:即將發(fā)生的滑動(dòng)量,單位vp。 - state:當(dāng)前滑動(dòng)狀態(tài)。 - offsetRemain:實(shí)際滑動(dòng)量,單位vp。 觸發(fā)該事件的條件:手指拖動(dòng)Grid、Grid慣性劃動(dòng)時(shí)每幀開(kāi)始時(shí)觸發(fā);Grid超出邊緣回彈、使用滾動(dòng)控制器的滾動(dòng)不會(huì)觸發(fā)。**說(shuō)明:**當(dāng)gridDirection的值為Axis.Vertical時(shí),返回垂直方向滑動(dòng)量,當(dāng)gridDirection的值為Axis.Horizontal時(shí),返回水平方向滑動(dòng)量。 |
onScrollStart10+(event: () => void) | 網(wǎng)格滑動(dòng)開(kāi)始時(shí)觸發(fā)。手指拖動(dòng)網(wǎng)格或網(wǎng)格的滾動(dòng)條觸發(fā)的滑動(dòng)開(kāi)始時(shí),會(huì)觸發(fā)該事件。使用[Scroller]滑動(dòng)控制器觸發(fā)的帶動(dòng)畫的滑動(dòng),動(dòng)畫開(kāi)始時(shí)會(huì)觸發(fā)該事件。 |
onScrollStop10+(event: () => void) | 網(wǎng)格滑動(dòng)停止時(shí)觸發(fā)。手指拖動(dòng)網(wǎng)格或網(wǎng)格的滾動(dòng)條觸發(fā)的滑動(dòng),手指離開(kāi)屏幕并且滑動(dòng)停止時(shí)會(huì)觸發(fā)該事件;使用[Scroller]滑動(dòng)控制器觸發(fā)的帶動(dòng)畫的滑動(dòng),動(dòng)畫停止會(huì)觸發(fā)該事件。 |
ItemDragInfo對(duì)象說(shuō)明
名稱 | 類型 | 描述 |
---|---|---|
x | number | 當(dāng)前拖拽點(diǎn)的x坐標(biāo)。 |
y | number | 當(dāng)前拖拽點(diǎn)的y坐標(biāo)。 |
ComputedBarAttribute對(duì)象說(shuō)明
名稱 | 類型 | 描述 |
---|---|---|
totalOffset | number | Grid內(nèi)容相對(duì)顯示區(qū)域的總偏移。 |
totalLength | number | Grid內(nèi)容總長(zhǎng)度。HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿 |
示例
示例1
// 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: string) = > day)
}, (day: string) = > 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: string) = > day)
}, (day: string) = > day)
}
.columnsTemplate('1fr 1fr 1fr 1fr 1fr')
.columnsGap(10)
.rowsGap(10)
.friction(0.6)
.edgeEffect(EdgeEffect.Spring)
.scrollBar(BarState.On)
.onScrollIndex((first: number) = > {
console.info(first.toString())
})
.onScrollBarUpdate((index: number, offset: number) = > {
return {totalOffset: (index / 5) * (80 + 10) - offset, totalLength: 80 * 5 + 10 * 4}
})
.width('90%')
.backgroundColor(0xFAEEE0)
.height(300)
Button('next page')
.onClick(() = > { // 點(diǎn)擊后滑到下一頁(yè)
this.scroller.scrollPage({ next: true })
})
}.width('100%').margin({ top: 5 })
}
}
示例2
- 設(shè)置屬性editMode(true)設(shè)置Grid是否進(jìn)入編輯模式,進(jìn)入編輯模式可以拖拽Grid組件內(nèi)部GridItem。
- 在[onItemDragStart]回調(diào)中設(shè)置拖拽過(guò)程中顯示的圖片。
- 在[onItemDrop]中獲取拖拽起始位置,和拖拽插入位置,在[onDrag]回調(diào)中完成交換數(shù)組位置邏輯。
@Entry
@Component
struct GridExample {
@State numbers: string[] = []
scroller: Scroller = new Scroller()
@State text: string = 'drag'
@Builder pixelMapBuilder() { //拖拽過(guò)程樣式
Column() {
Text(this.text)
.fontSize(16)
.backgroundColor(0xF9CF93)
.width(80)
.height(80)
.textAlign(TextAlign.Center)
}
}
aboutToAppear() {
for (let i = 1;i <= 15; i++) {
this.numbers.push(i + '')
}
}
changeIndex(index1: number, index2: number) { //交換數(shù)組位置
let temp: string;
temp = this.numbers[index1];
this.numbers[index1] = this.numbers[index2];
this.numbers[index2] = temp;
}
build() {
Column({ space: 5 }) {
Grid(this.scroller) {
ForEach(this.numbers, (day: string) = > {
GridItem() {
Text(day)
.fontSize(16)
.backgroundColor(0xF9CF93)
.width(80)
.height(80)
.textAlign(TextAlign.Center)
}
})
}
.columnsTemplate('1fr 1fr 1fr')
.columnsGap(10)
.rowsGap(10)
.onScrollIndex((first: number) = > {
console.info(first.toString())
})
.width('90%')
.backgroundColor(0xFAEEE0)
.height(300)
.editMode(true) //設(shè)置Grid是否進(jìn)入編輯模式,進(jìn)入編輯模式可以拖拽Grid組件內(nèi)部GridItem
.onItemDragStart((event: ItemDragInfo, itemIndex: number) = > { //第一次拖拽此事件綁定的組件時(shí),觸發(fā)回調(diào)。
this.text = this.numbers[itemIndex]
return this.pixelMapBuilder() //設(shè)置拖拽過(guò)程中顯示的圖片。
})
.onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) = > { //綁定此事件的組件可作為拖拽釋放目標(biāo),當(dāng)在本組件范圍內(nèi)停止拖拽行為時(shí),觸發(fā)回調(diào)。
// isSuccess=false時(shí),說(shuō)明drop的位置在grid外部;insertIndex > length時(shí),說(shuō)明有新增元素的事件發(fā)生
if (!isSuccess || insertIndex >= this.numbers.length) {
return
}
console.info('beixiang' + itemIndex + '', insertIndex + '') //itemIndex拖拽起始位置,insertIndex拖拽插入位置
this.changeIndex(itemIndex, insertIndex)
})
}.width('100%').margin({ top: 5 })
}
}
示例圖:
網(wǎng)格子組件開(kāi)始拖拽:
網(wǎng)格子組件拖拽過(guò)程中:
網(wǎng)格子組件1與子組件6拖拽交換位置后:
示例3
使用GridLayoutOptions
// xxx.ets
@Entry
@Component
struct GridExample {
@State Number: String[] = ['0', '1', '2', '3', '4']
scroller: Scroller = new Scroller()
layoutOptions1: GridLayoutOptions = {
regularSize: [1, 1], // 只支持[1, 1]
irregularIndexes: [0, 6], // 索引為0和6的GridItem占用一行
}
layoutOptions2: GridLayoutOptions = {
regularSize: [1, 1],
irregularIndexes: [0, 7], // 索引為0和7的GridItem占用的列數(shù)由onGetIrregularSizeByIndex指定
onGetIrregularSizeByIndex: (index: number) = > {
if (index === 0) {
return [1, 5]
}
return [1, index % 6 + 1]
}
}
build() {
Column({ space: 5 }) {
Grid(this.scroller, this.layoutOptions1) {
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: string) = > day)
}, (day: string) = > day)
}
.columnsTemplate('1fr 1fr 1fr 1fr 1fr')
.columnsGap(10)
.rowsGap(10)
.scrollBar(BarState.Off)
.width('90%')
.backgroundColor(0xFAEEE0)
.height(300)
Text('scroll').fontColor(0xCCCCCC).fontSize(9).width('90%')
// 不使用scroll,需要undefined占位
Grid(undefined, this.layoutOptions2) {
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: string) = > day)
}, (day: string) = > day)
}
.columnsTemplate('1fr 1fr 1fr 1fr 1fr')
.columnsGap(10)
.rowsGap(10)
.scrollBar(BarState.Off)
.width('90%')
.backgroundColor(0xFAEEE0)
.height(300)
}.width('100%').margin({ top: 5 })
}
}
審核編輯 黃宇
-
Grid
+關(guān)注
關(guān)注
0文章
8瀏覽量
9840 -
鴻蒙
+關(guān)注
關(guān)注
59文章
2532瀏覽量
43793
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙開(kāi)發(fā)實(shí)戰(zhàn)-(ArkUI)List組件和Grid組件的使用
鴻蒙ArkTS容器組件:Scroll
鴻蒙ArkTS容器組件:SideBarContainer

評(píng)論