Grid布局最后一个元素怎么单独占一整行 - HarmonyOS 鸿蒙Next

Grid布局最后一个元素怎么单独占一整行 - HarmonyOS 鸿蒙Next 【设备信息】Mate60

【API版本】Api13

【DevEco Studio版本】5.0.7.200

【问题描述】

我一共4个元素,设置了2列,但是最后一个元素想要单独占一整行,设置了GridItem的宽度为100%,实际没达到想要的效果。需要怎么实现

2 回复

使用irregularIndexes和onGetIrregularSizeByIndex :

irregularIndexes是一个数组,用于指定哪些GridItem的大小是不规则的。

onGetIrregularSizeByIndex是一个函数,用于指定不规则GridItem占用的行数和列数。

参考以下demo:

import ItemData from '../common/ItemData';
import { MainViewModel } from '../common/MainViewModel';
import router from '@ohos.router';

@Entry
@Component
export struct Index {
  pathStack: NavPathStack = new NavPathStack()
  private mainViewModel: MainViewModel = new MainViewModel()

  getFinancialGridData(): Array<ItemData> {
    let liveGridData: ItemData[] = [
      new ItemData(0, $r('app.media.1')),
      new ItemData(1, $r('app.media.2')),
      new ItemData(2, $r('app.media.3')),
      new ItemData(3, $r('app.media.4')),
      new ItemData(4, $r('app.media.5')),
      new ItemData(5, $r('app.media.6')),
      new ItemData(6, $r('app.media.7')),
      new ItemData(7, $r('app.media.8')),
      new ItemData(8, $r('app.media.9')),
    ];
    return liveGridData;
  }

  //Grid 网格容器,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。
  build() {
    Navigation(this.pathStack) {
      Grid(undefined, {
        regularSize: [1, 1],
        irregularIndexes: [8],
        onGetIrregularSizeByIndex: (index: number) => {
          if (index === 8) {
            return [1, 3];
          }
          return [1, 1];
        }
      }) {
        ForEach(this.getFinancialGridData(), (item: ItemData) => {
          GridItem() {
            Column() {
              Image(item.img)
                .width(110)
                .margin({ top: 4 }).onClick(() => {
                  this.pathStack.pushPathByName('Index1', item.index)
                })
            }
          }
        })
      }
      .backgroundColor(Color.White)
      .margin({ top: 15 })
      .width('100%')
      .height('100%')
      .borderRadius(12)
      .columnsTemplate('1fr 1fr 1fr') //3列
    }
  }
}

更多关于Grid布局最后一个元素怎么单独占一整行 - HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,使用Grid布局时,如果希望最后一个元素单独占一整行,可以通过设置grid-column属性来实现。具体步骤如下:

  1. 确定网格列数:首先明确网格布局的列数,假设为N列。
  2. 设置最后一个元素的列跨度:将最后一个元素的grid-column属性设置为1 / N+1,即从第一列跨越到第N+1列,这样可以确保该元素占据整行。

示例代码:

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 假设为3列 */
  gap: 10px;
}

.item:last-child {
  grid-column: 1 / 4; /* 最后一个元素占据整行 */
}

在这个例子中,.container是一个3列的网格布局,.item:last-child选择器指定最后一个元素跨越3列,从而单独占据一整行。

回到顶部