W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
網(wǎng)格容器,由“行”和“列”分割的單元格所組成,通過指定“項目”所在的單元格做出各種各樣的布局。
該組件從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標單獨標記該內(nèi)容的起始版本。
包含GridItem子組件。
Grid子組件的索引值計算規(guī)則:
Grid(scroller?: Scroller)
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
scroller | 否 | 可滾動組件的控制器。用于與可滾動組件進行綁定。 說明: 不允許和其他滾動類組件綁定同一個滾動控制對象。 |
除支持通用屬性外,還支持以下屬性:
名稱 | 參數(shù)類型 | 描述 |
---|---|---|
columnsTemplate | string | 設(shè)置當(dāng)前網(wǎng)格布局列的數(shù)量,不設(shè)置時默認1列。 例如, '1fr 1fr 2fr' 是將父組件分3列,將父組件允許的寬分為4等份,第一列占1份,第二列占1份,第三列占2份。 說明: 設(shè)置為'0fr'時,該列的列寬為0,不顯示GridItem。設(shè)置為其他非法值時,GridItem顯示為固定1列。 |
rowsTemplate | string | 設(shè)置當(dāng)前網(wǎng)格布局行的數(shù)量,不設(shè)置時默認1行。 例如,'1fr 1fr 2fr'是將父組件分三行,將父組件允許的高分為4等份,第一行占1份,第二行占一份,第三行占2份。 說明: 設(shè)置為'0fr',則這一行的行寬為0,這一行GridItem不顯示。設(shè)置為其他非法值,按固定1行處理。 |
columnsGap | Length | 設(shè)置列與列的間距。 默認值:0 說明: 設(shè)置為小于0的值時,按默認值顯示。 |
rowsGap | Length | 設(shè)置行與行的間距。 默認值:0 說明: 設(shè)置為小于0的值時,按默認值顯示。 |
scrollBar | 設(shè)置滾動條狀態(tài)。 默認值:BarState.Off | |
scrollBarColor | string | number | Color | 設(shè)置滾動條的顏色。 |
scrollBarWidth | string | number | 設(shè)置滾動條的寬度。寬度設(shè)置后,滾動條正常狀態(tài)和按壓狀態(tài)寬度均為滾動條的寬度值。 默認值:4 單位:vp |
cachedCount | number | 設(shè)置預(yù)加載的GridItem的數(shù)量,只在LazyForEach中生效。具體使用可參考減少應(yīng)用白塊說明。 默認值:1 說明: 設(shè)置緩存后會在Grid顯示區(qū)域上下各緩存cachedCount*列數(shù)個GridItem。LazyForEach超出顯示和緩存范圍的GridItem會被釋放。 設(shè)置為小于0的值時,按默認值顯示。 |
editMode8+ | boolean | 設(shè)置Grid是否進入編輯模式,進入編輯模式可以拖拽Grid組件內(nèi)部GridItem。 默認值:false |
layoutDirection8+ | 設(shè)置布局的主軸方向。 默認值:GridDirection.Row | |
maxCount8+ | number | 當(dāng)layoutDirection是Row/RowReverse時,表示可顯示的最大列數(shù) 當(dāng)layoutDirection是Column/ColumnReverse時,表示可顯示的最大行數(shù)。 默認值:Infinity 說明: 當(dāng)maxCount小于minCount時,maxCount和minCount都按默認值處理。 設(shè)置為小于0的值時,按默認值顯示。 |
minCount8+ | number | 當(dāng)layoutDirection是Row/RowReverse時,表示可顯示的最小列數(shù)。 當(dāng)layoutDirection是Column/ColumnReverse時,表示可顯示的最小行數(shù)。 默認值:1 說明: 設(shè)置為小于0的值時,按默認值顯示。 |
cellLength8+ | number | 當(dāng)layoutDirection是Row/RowReverse時,表示一行的高度。 當(dāng)layoutDirection是Column/ColumnReverse時,表示一列的寬度。 默認值:第一個元素的大小 |
multiSelectable8+ | boolean | 是否開啟鼠標框選。 默認值:false - false:關(guān)閉框選。 - true:開啟框選。 |
supportAnimation8+ | boolean | 是否支持動畫。當(dāng)前支持GridItem拖拽動畫。 默認值:false |
Grid組件根據(jù)rowsTemplate、columnsTemplate屬性的設(shè)置情況,可分為以下三種布局模式:
名稱 | 描述 |
---|---|
Row | 主軸布局方向沿水平方向布局,即自左往右先填滿一行,再去填下一行。 |
Column | 主軸布局方向沿垂直方向布局,即自上往下先填滿一列,再去填下一列。 |
RowReverse | 主軸布局方向沿水平方向反向布局,即自右往左先填滿一行,再去填下一行。 |
ColumnReverse | 主軸布局方向沿垂直方向反向布局,即自下往上先填滿一列,再去填下一列。 |
Grid組件通用屬性clip的默認值為true。
除支持通用事件外,還支持以下事件:
名稱 | 功能描述 |
---|---|
onScrollIndex(event: (first: number) => void) | 當(dāng)前網(wǎng)格顯示的起始位置item發(fā)生變化時觸發(fā)。 - first: 當(dāng)前顯示的網(wǎng)格起始位置的索引值。 Grid顯示區(qū)域上第一個子組件的索引值有變化就會觸發(fā)。 |
onItemDragStart(event: (event: ItemDragInfo, itemIndex: number) => (() => any) | void) | 開始拖拽網(wǎng)格元素時觸發(fā)。 - event: 見ItemDragInfo對象說明。 - itemIndex: 被拖拽網(wǎng)格元素索引值。 說明: 返回void表示不能拖拽。 手指長按GridItem時觸發(fā)該事件。 |
onItemDragEnter(event: (event: ItemDragInfo) => void) | 拖拽進入網(wǎng)格元素范圍內(nèi)時觸發(fā)。 - event: 見ItemDragInfo對象說明。 |
onItemDragMove(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number) => void) | 拖拽在網(wǎng)格元素范圍內(nèi)移動時觸發(fā)。 - event: 見ItemDragInfo對象說明。 - itemIndex: 拖拽起始位置。 - insertIndex: 拖拽插入位置。 |
onItemDragLeave(event: (event: ItemDragInfo, itemIndex: number) => void) | 拖拽離開網(wǎng)格元素時觸發(fā)。 - event: 見ItemDragInfo對象說明。 - itemIndex: 拖拽離開的網(wǎng)格元素索引值。 |
onItemDrop(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => void) | 綁定該事件的網(wǎng)格元素可作為拖拽釋放目標,當(dāng)在網(wǎng)格元素內(nèi)停止拖拽時觸發(fā)。 - event: 見ItemDragInfo對象說明。 - itemIndex: 拖拽起始位置。 - insertIndex: 拖拽插入位置。 - isSuccess: 是否成功釋放。 |
- // 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 => 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.Number, (day: string) => {
- ForEach(this.Number, (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 })
- }
- }
- @Entry
- @Component
- struct GridExample {
- @State numbers: string[] = []
- scroller: Scroller = new Scroller()
- @State text: string = 'drag'
- @Builder pixelMapBuilder() { //拖拽過程樣式
- 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ù)組中的位置
- const temp = this.numbers[index1];
- if (index1 > index2) {
- this.numbers.splice(index2, 0, temp);
- this.numbers.splice(index1 + 1, 1);
- } else {
- this.numbers.splice(index2 + 1, 0, temp);
- this.numbers.splice(index1, 1);
- }
- }
- 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是否進入編輯模式,進入編輯模式可以拖拽Grid組件內(nèi)部GridItem
- .supportAnimation(true) //設(shè)置Grid是否開啟拖拽補位動畫
- .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件綁定的組件時,觸發(fā)回調(diào)。
- this.text = this.numbers[itemIndex]
- return this.pixelMapBuilder() //設(shè)置拖拽過程中顯示的圖片。
- })
- .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { //綁定此事件的組件可作為拖拽釋放目標,當(dāng)在本組件范圍內(nèi)停止拖拽行為時,觸發(fā)回調(diào)。
- // isSuccess=false時,說明drop的位置在grid外部;insertIndex > length時,說明有新增元素的事件發(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)格拖拽補位動畫:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: