Skip to content

格栅布局容器

ArkUI 开发框架提供了纵向排布栅格布局容器 GridContainer ,它仅在栅格布局场景中使用

GridContainer 定义介绍

bash

interface GridContainerInterface {
  (value?: GridContainerOptions): GridContainerAttribute;
}

declare interface GridContainerOptions {
  columns?: number | "auto";
  sizeType?: SizeType;
  gutter?: number | string;
  margin?: number | string;
}
  • value:设置布局的可选参数, GridContainerOptions 说明如下:
  1. columns:设置当前布局总列数,默认为 auto。

  2. sizeType:设置选用设备宽度类型, SizeType 参数说明如下:

XS:最小宽度类型设备。

SM:小宽度类型设备。

MD:中等宽度类型设备。

LG:大宽度类型设备。

Auto(默认值):根据设备类型进行选择。

  1. gutter:设置栅格布局列间距。

  2. margin:设置栅格布局两侧间距。

bash

@Entry @Component struct ComponentTest {

  @State sizeType: SizeType = SizeType.XS // 默认采用最小宽度设备类型

  build() {
    Column() {
      GridContainer({
        columns: 12,                      // 设置格栅布局为12列
        sizeType: this.sizeType,          // 设置格栅布局类型
        gutter: 10,                       // 设置格栅布局列间距,该版本还有bug
        margin: 20                        // 设计格栅布局两侧间距
      }) {
        Row() {
          Text('1')
            .useSizeType({
              xs: { span: 6, offset: 0 }, // Text1在xs设备上占用6列
              sm: { span: 2, offset: 0 }, // Text1在sm设备上占用2列
              md: { span: 2, offset: 0 }, // Text1在md设备上占用2列
              lg: { span: 3, offset: 0 }  // Text1在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x4682B4)
            .textAlign(TextAlign.Center)
          Text('2')
            .useSizeType({
              xs: { span: 2, offset: 0 }, // Text2在xs设备上占用2列
              sm: { span: 6, offset: 0 }, // Text2在sm设备上占用6列
              md: { span: 2, offset: 0 }, // Text2在md设备上占用2列
              lg: { span: 3, offset: 0 }  // Text2在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x00BFFF)
            .textAlign(TextAlign.Center)
          Text('3')
            .useSizeType({
              xs: { span: 2, offset: 0 }, // Text3在xs设备上占用2列
              sm: { span: 2, offset: 0 }, // Text3在sm设备上占用2列
              md: { span: 6, offset: 0 }, // Text3在md设备上占用6列
              lg: { span: 3, offset: 0 }  // Text3在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x4682B4)
            .textAlign(TextAlign.Center)
          Text('4')
            .useSizeType({
              xs: { span: 2, offset: 0 }, // Text4在xs设备上占用2列
              sm: { span: 2, offset: 0 }, // Text4在sm设备上占用2列
              md: { span: 2, offset: 0 }, // Text4在md设备上占用2列
              lg: { span: 3, offset: 0 }  // Text4在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x00BFFF)
            .textAlign(TextAlign.Center)
        }
      }
      .backgroundColor(Color.Pink)
      .width('90%')
      .margin({top: 10})

      Row({space: 10}) {
        Button('XS')
          .onClick(() => {
            this.sizeType = SizeType.XS
          }).backgroundColor(0x317aff)
        Button('SM')
          .onClick(() => {
            this.sizeType = SizeType.SM
          }).backgroundColor(0x317aff)
        Button('MD')
          .onClick(() => {
            this.sizeType = SizeType.MD
          }).backgroundColor(0x317aff)
        Button('LG')
          .onClick(() => {
            this.sizeType = SizeType.LG
          }).backgroundColor(0x317aff)
      }
      .margin({top: 10})
    }.width('100%')
  }
}

样例运行结果如下图所示:

图片