🚀一、Grid/GridItem
🔎1.概述
網格佈局是一種新型的佈局方式,它按照網格來劃分頁面,透過列和行來定義網格,使得頁面的佈局更加靈活、簡潔、易於維護。網格佈局能夠將頁面分成多個單元格,可以在這些單元格中佈置各種元素,例如文字、圖片、媒體等,從而實現頁面的排版。網格佈局支援自適應佈局,能夠輕鬆地實現響應式設計,支援多終端裝置的顯示。
ArkUI提供了Grid容器元件和子元件GridItem,用於構建網格佈局。Grid用於設定網格佈局相關引數,GridItem定義子元件相關特徵。Grid元件支援使用條件渲染、迴圈渲染、懶載入等渲染控制方式生成子元件。
🔎2.佈局與約束
1、Grid與GridItem元件關係
Grid的子元件必須是GridItem元件
2、網格佈局
Grid元件支援自定義行列數和每行每列尺寸佔比、設定子元件橫跨幾行或者幾列,同時提供了垂直和水平佈局能力
🔎3.設定排列方式
🦋3.1 設定行列數量與佔比
透過設定行列數量與尺寸佔比,可以確定網格佈局的整體排列方式。Grid元件提供了rowsTemplate和columnsTemplate屬性,用於設定網格佈局的行列數量與尺寸佔比。 rowsTemplate和columnsTemplate屬性值是一個由多個空格和’數字+fr’間隔拼接的字串,其中fr的個數即為網格佈局的行或列數。數字表示該行或列在網格佈局寬度上的佔比,最終決定該行或列的寬度。
Grid() {
...
}
.rowsTemplate('1fr 1fr 1fr')
.columnsTemplate('1fr 2fr 1fr')
🦋3.2 設定子元件所佔行列數
1、0的設定
GridItem() {
Text(key)
...
}
.columnStart(1)
.columnEnd(2)
2、=號的設定
GridItem() {
Text(key)
...
}
.rowStart(5)
.rowEnd(6)
🦋3.3 設定主軸方向
Grid() {
...
}
.maxCount(3)
.layoutDirection(GridDirection.Row)
🔎4.案例
🦋4.1 在網格佈局中顯示資料
@Entry
@Component
struct Index {
build() {
Grid() {
GridItem() {
Text('會議')
}
GridItem() {
Text('簽到')
}
GridItem() {
Text('投票')
}
GridItem() {
Text('列印')
}
}
.rowsTemplate('1fr 1fr')
.columnsTemplate('1fr 1fr')
}
}
🦋4.2 設定行列間距
Grid() {
...
}
.columnsGap(10)
.rowsGap(15)
🦋4.3 構建可滾動的網格佈局(官方)
@Component
struct Shopping {
@State services: Array<string> = ['直播', '進口', ...]
...
build() {
Column({ space: 5 }) {
Grid() {
ForEach(this.services, (service: string, index) => {
GridItem() {
...
}
.width('25%')
}, service => service)
}
.rowsTemplate('1fr 1fr') // 只設定rowsTemplate屬性,當內容超出Grid區域時,可水平滾動。
.rowsGap(15)
...
}
...
}
}
滑動後
🦋4.4 在網格佈局中顯示資料(官方)
private scroller: Scroller = new Scroller()
Column({ space: 5 }) {
Grid(this.scroller) {
...
}
.columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr 1fr')
...
Row({space: 20}) {
Button('上一頁')
.onClick(() => {
this.scroller.scrollPage({
next: false
})
})
Button('下一頁')
.onClick(() => {
this.scroller.scrollPage({
next: true
})
})
}
}
...
🦋4.5 長網格處理
和長列表類似就不做多說了
Grid() {
LazyForEach(this.dataSource, item => {
GridItem() {
...
}
})
}
.cachedCount(3)
🚀寫在最後
- 如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
- 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。
- 關注小編,同時可以期待後續文章ing🚀,不定期分享原創知識。
- 更多鴻蒙最新技術知識點,請關注作者部落格:https://t.doruo.cn/14DjR1rEY