0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkTS容器組件:Grid

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-07-09 11:55 ? 次閱讀

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]。
irregularIndexesnumber[]大小不規(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ù)類型描述
columnsTemplatestring設(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列。
rowsTemplatestring設(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。
scrollBarColorstringnumber
scrollBarWidthstringnumber
cachedCountnumber設(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ō)明

名稱類型描述
xnumber當(dāng)前拖拽點(diǎn)的x坐標(biāo)。
ynumber當(dāng)前拖拽點(diǎn)的y坐標(biāo)。

ComputedBarAttribute對(duì)象說(shuō)明

名稱類型描述
totalOffsetnumberGrid內(nèi)容相對(duì)顯示區(qū)域的總偏移。
totalLengthnumberGrid內(nèi)容總長(zhǎng)度。HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

QQ截圖20240705211300.png

示例

示例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 })
  }
}

zh-cn_image_0000001219744183

示例2

  1. 設(shè)置屬性editMode(true)設(shè)置Grid是否進(jìn)入編輯模式,進(jìn)入編輯模式可以拖拽Grid組件內(nèi)部GridItem。
  2. 在[onItemDragStart]回調(diào)中設(shè)置拖拽過(guò)程中顯示的圖片。
  3. 在[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)始拖拽:

gridDrag

網(wǎng)格子組件拖拽過(guò)程中:

gridDrag

網(wǎng)格子組件1與子組件6拖拽交換位置后:

gridDrag

示例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 })
  }
}

gridLayoutOptions

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Grid
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    9840
  • 鴻蒙
    +關(guān)注

    關(guān)注

    59

    文章

    2532

    瀏覽量

    43793
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙開(kāi)發(fā)實(shí)戰(zhàn)-(ArkUI)List組件Grid組件的使用

    組件,開(kāi)發(fā)者使用List和Grid組件能夠很輕松的完成一些列表頁(yè)面。 List組件的使用 List組件簡(jiǎn)介 List是很常用的滾動(dòng)類
    發(fā)表于 01-18 20:18

    鴻蒙ArkTS聲明式組件:ScrollBar

    滾動(dòng)條組件ScrollBar,用于配合可滾動(dòng)組件使用,如List、Grid、Scroll。
    的頭像 發(fā)表于 07-01 15:52 ?920次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b>聲明式<b class='flag-5'>組件</b>:ScrollBar

    鴻蒙ArkTS容器組件:Column

    沿垂直方向布局的容器。
    的頭像 發(fā)表于 07-05 16:32 ?779次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Column

    鴻蒙ArkTS容器組件:Flex

    以彈性方式布局子組件容器組件
    的頭像 發(fā)表于 07-08 10:19 ?843次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Flex

    鴻蒙ArkTS容器組件:GridCol

    柵格子組件,必須作為柵格容器組件([GridRow])的子組件使用。
    的頭像 發(fā)表于 07-08 15:17 ?728次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:GridCol

    鴻蒙ArkTS容器組件:GridItem

    網(wǎng)格容器中單項(xiàng)內(nèi)容容器。
    的頭像 發(fā)表于 07-09 09:25 ?724次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:GridItem

    鴻蒙ArkTS容器組件:Navigator

    路由容器組件,提供路由跳轉(zhuǎn)能力。
    的頭像 發(fā)表于 07-10 14:55 ?701次閱讀

    鴻蒙ArkTS容器組件:Refresh

    可以進(jìn)行頁(yè)面下拉操作并顯示刷新動(dòng)效的容器組件
    的頭像 發(fā)表于 07-11 16:11 ?843次閱讀

    鴻蒙ArkTS容器組件:RowSplit

    將子組件橫向布局,并在每個(gè)子組件之間插入一根縱向的分割線。
    的頭像 發(fā)表于 07-11 22:25 ?623次閱讀

    鴻蒙ArkTS容器組件:Scroll

    可滾動(dòng)的容器組件,當(dāng)子組件的布局尺寸超過(guò)父組件的尺寸時(shí),內(nèi)容可以滾動(dòng)。
    的頭像 發(fā)表于 07-12 15:24 ?1874次閱讀

    鴻蒙ArkTS容器組件:SideBarContainer

    提供側(cè)邊欄可以顯示和隱藏的側(cè)邊欄容器,通過(guò)子組件定義側(cè)邊欄和內(nèi)容區(qū),第一個(gè)子組件表示側(cè)邊欄,第二個(gè)子組件表示內(nèi)容區(qū)。
    的頭像 發(fā)表于 07-18 15:46 ?967次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:SideBarContainer

    鴻蒙ArkTS容器組件:Stack

    堆疊容器,子組件按照順序依次入棧,后一個(gè)子組件覆蓋前一個(gè)子組件。
    的頭像 發(fā)表于 07-15 18:23 ?1293次閱讀

    鴻蒙ArkTS容器組件:Swiper

    滑塊視圖容器,提供子組件滑動(dòng)輪播顯示的能力。
    的頭像 發(fā)表于 07-15 09:51 ?1228次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Swiper

    鴻蒙ArkTS容器組件:Tabs

    通過(guò)頁(yè)簽進(jìn)行內(nèi)容視圖切換的容器組件,每個(gè)頁(yè)簽對(duì)應(yīng)一個(gè)內(nèi)容視圖。
    的頭像 發(fā)表于 07-15 09:48 ?1532次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Tabs

    鴻蒙ArkTS容器組件:WaterFlow

    瀑布流容器,由“行”和“列”分割的單元格所組成,通過(guò)容器自身的排列規(guī)則,將不同大小的“項(xiàng)目”自上而下,如瀑布般緊密布局。
    的頭像 發(fā)表于 07-15 17:35 ?726次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:WaterFlow

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品