HarmonyOS应用开发学习笔记 UI布局学习 栅格布局(GridRow/GridCol)

HarmonyOS应用开发学习笔记 UI布局学习 相对布局 (RelativeContainer)

官方文档:栅格布局(GridRow/GridCol)

一、代码示例

Row() {
  GridRow({ columns: 4 }) {
    ForEach(this.bgColors, (item, index) => {
      GridCol() {
        Row() {
          Text(`${index + 1}`)
        }.width('100%').height('50')
      }.backgroundColor(item)
    })
  }
  .width('100%').height('100%')
  .onBreakpointChange((breakpoint) => {
    this.currentBp = breakpoint
  })
}
.height(160)
.border({ color: Color.Blue, width: 2 })
.width('90%')
Row() {
  GridRow({ columns: 8 }) {
    ForEach(this.bgColors, (item, index) => {
      GridCol() {
        Row() {
          Text(`${index + 1}`)
        }.width('100%').height('50')
      }.backgroundColor(item)
    })
  }
  .width('100%').height('100%')
  .onBreakpointChange((breakpoint) => {
    this.currentBp = breakpoint
  })
}
.height(160)
.border({ color: Color.Blue, width: 2 })
.width('90%')

二、常用属性

1、排列方向

  • 通过设置GridRow的direction属性来指定栅格子组件在栅格容器中的排列方向
代码 描述
GridRowDirection.Row 从左往右排列
GridRowDirection.RowReverse 从右往左排列
  • 左往右排列

    //子组件默认从左往右排列
    GridRow({ direction: GridRowDirection.Row }){}

  • 子组件从右往左排列

    GridRow({ direction: GridRowDirection.RowReverse }){}

2、子组件间距

当gutter类型为number时,同时设置栅格子组件间水平和垂直方向边距且相等。下例中,设置子组件水平与垂直方向距离相邻元素的间距为10。

  • 垂直和水平间距都为10

    GridRow({ gutter: 10 }){}

  • x属性为水平方向间距,y为垂直方向间距

    GridRow({ gutter: { x: 20, y: 50 } }){}

3、子组件GridCol

  • 通过给GridCol传参或者设置属性两种方式
代码 描述
span 占用列数
offset 偏移列数
order 元素序号

设置span

GridCol({ span: 2 }){}
GridCol({ span: { xs: 1, sm: 2, md: 3, lg: 4 } }){}
GridCol(){}.span(2)
GridCol(){}.span({ xs: 1, sm: 2, md: 3, lg: 4 })

设置offset

GridCol({ offset: 2 }){}
GridCol({ offset: { xs: 2, sm: 2, md: 2, lg: 2 } }){}
GridCol(){}.offset(2)
GridCol(){}.offset({ xs: 1, sm: 2, md: 3, lg: 4 }) 

设置order

GridCol({ order: 2 }){}
GridCol({ order: { xs: 1, sm: 2, md: 3, lg: 4 } }){}
GridCol(){}.order(2)
GridCol(){}.order({ xs: 1, sm: 2, md: 3, lg: 4 })

三、不同尺寸的适配

GridRow为栅格容器组件,需与栅格子组件GridCol在栅格布局场景中联合使用。

栅格系统默认断点将设备宽度分为xs、sm、md、lg四类,尺寸范围如下:

断点名称 取值范围(vp) 设备描述
xs [0, 320) 最小宽度类型设备。
sm [320, 520) 小宽度类型设备。
md [520, 840) 中等宽度类型设备。
lg [840, +∞) 大宽度类型设备。
  • 例如,使用栅格的默认列数12列,通过断点设置将应用宽度分成六个区间,在各区间中,每个栅格子元素占用的列数均不同。

    @State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
    ...
    GridRow({
    breakpoints: {
    value: ['200vp', '300vp', '400vp', '500vp', '600vp'],
    reference: BreakpointsReference.WindowSize
    }
    }) {
    ForEach(this.bgColors, (color, index) => {
    GridCol({
    span: {
    xs: 2, // 在最小宽度类型设备上,栅格子组件占据的栅格容器2列。
    sm: 3, // 在小宽度类型设备上,栅格子组件占据的栅格容器3列。
    md: 4, // 在中等宽度类型设备上,栅格子组件占据的栅格容器4列。
    lg: 6, // 在大宽度类型设备上,栅格子组件占据的栅格容器6列。
    xl: 8, // 在特大宽度类型设备上,栅格子组件占据的栅格容器8列。
    xxl: 12 // 在超大宽度类型设备上,栅格子组件占据的栅格容器12列。
    }
    }) {
    Row() {
    Text(${index})
    }.width("100%").height('50vp')
    }.backgroundColor(color)
    })
    }

相关推荐
汤姆和杰瑞在瑞士吃糯米粑粑13 分钟前
【C++学习篇】AVL树
开发语言·c++·学习
虾球xz25 分钟前
游戏引擎学习第58天
学习·游戏引擎
LuH112435 分钟前
【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo
论文阅读·笔记
奶香臭豆腐1 小时前
C++ —— 模板类具体化
开发语言·c++·学习
一个处女座的程序猿O(∩_∩)O1 小时前
开源鸿蒙 5.0 正式版发布
华为·harmonyos
波音彬要多做2 小时前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
程序猿会指北2 小时前
【鸿蒙(HarmonyOS)性能优化指南】内存分析器Allocation Profiler
性能优化·移动开发·harmonyos·openharmony·arkui·组件化·鸿蒙开发
m0_748256782 小时前
WebGIS实战开源项目:智慧机场三维可视化(学习笔记)
笔记·学习·开源
红色的山茶花3 小时前
YOLOv9-0.1部分代码阅读笔记-loss.py
笔记
南七澄江4 小时前
各种网站(学习资源及其他)
开发语言·网络·python·深度学习·学习·机器学习·ai