HarmonyOS的布局组件是一组用于构建用户界面布局的组件,包括线性布局、相对布局、网格布局等。这些组件帮助开发者以简单和灵活的方式管理和组织应用程序中的视图,并支持多种不同的设备屏幕尺寸和方向。使用HarmonyOS的布局组件可以提高应用程序的可读性和可维护性,并帮助快速构建适应不同设备的用户界面。

常见页面结构图:

![img](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinedf40ea38242d245968590033a5549dbdd.png)

不就元素组成:

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinede501b76951534b7a879f60159bc823a6.png)


🚀一、Row/Column
🔎1.线性布局
线性布局(LinearLayout)是一种常用的UI布局方式,通过线性容器 Row 和 Column 构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。线性布局的排列方向由所选容器组件决定,Column 容器内子元素按照垂直方向排列,Row 容器内子元素按照水平方向排列。根据不同的排列方向,开发者可选择使用 Row 或 Column 容器创建线性布局。线性布局的优点是可以根据不同的排列需求创建灵活的布局,同时也方便管理子元素的位置和大小。

容器组件    排列方向    特点
Column    垂直    子元素按垂直方向排列
Row    水平    子元素按水平方向排列
Column容器内子元素排列示意图:

![img](https://luckly007.oss-cn-beijing.aliyuncs.com/undefined95bec63a86bc447b96f3d59f65b520bd.png)

Row容器内子元素排列示意图:

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefined938873c3eb4b4b4ab3bffe7ca743d781.png)

🔎2.间距
Column({ space: 20 }) 
Row({ space: 35 })

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinedd8db424a415f44e490c57fdcbbf900f8.png)

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefined00d2d9caa4a348a0b0af0782b7b2ec79.png)

🔎3.对齐方式
🦋3.1 水平对齐
Column({}) {}.alignItems(HorizontalAlign.Start)

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefineda312ccceff494cd1b1ac2e42718ad4d6.png)

🦋3.2 垂直对齐
Column({}) {}.alignItems(VerticalAlign.Top)

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinedcb96a276f29f4fb1b236ed86a3c40201.png)

🔎4.排列方式
🦋4.1 水平排列
Column({}) {}.justifyContent(FlexAlign.Start)

![img](https://luckly007.oss-cn-beijing.aliyuncs.com/undefined945ee1b6f41442479e2fc57dde1ee986.png)

🦋4.2 垂直排列
Row({}) {}.justifyContent(FlexAlign.Start)

![img](https://luckly007.oss-cn-beijing.aliyuncs.com/undefined137e8c3a22664315a509b16bc04ee536.png)

🔎5.自适应拉伸
🦋5.1 水平拉伸
因为自适应一般是讲宽度,其实高度也行,但原理一样

Column({}) {}.width('100%')

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinedc9887825cf204a25a4d9d1b81b76213c.png)

🔎6.自适应缩放
🦋6.1 权重

     @Entry
    @Component
    struct layoutWeightExample {
      build() {
        Column() {
          Text('1:2:3').width('100%')
          Row() {
            Column() {
              Text('layoutWeight(1)')
                .textAlign(TextAlign.Center)
            }.layoutWeight(1).backgroundColor(0xF5DEB3).height('100%')
      
      Column() {
          Text('layoutWeight(2)')
            .textAlign(TextAlign.Center)
        }.layoutWeight(2).backgroundColor(0xD2B48C).height('100%')
     
        Column() {
          Text('layoutWeight(3)')
            .textAlign(TextAlign.Center)
        }.layoutWeight(3).backgroundColor(0xF5DEB3).height('100%')
     
      }.backgroundColor(0xffd306).height('30%')
     
      Text('2:5:3').width('100%')
      Row() {
        Column() {
          Text('layoutWeight(2)')
            .textAlign(TextAlign.Center)
        }.layoutWeight(2).backgroundColor(0xF5DEB3).height('100%')
     
        Column() {
          Text('layoutWeight(5)')
            .textAlign(TextAlign.Center)
        }.layoutWeight(5).backgroundColor(0xD2B48C).height('100%')
     
        Column() {
          Text('layoutWeight(3)')
            .textAlign(TextAlign.Center)
        }.layoutWeight(3).backgroundColor(0xF5DEB3).height('100%')
      }.backgroundColor(0xffd306).height('30%')
    }
      }
    }

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefined2b4e261651174e94bad92b4f62d2e1d1.png)

🦋6.2 百分比


    @Entry
    @Component
    struct WidthExample {
      build() {
        Column() {
          Row() {
            Column() {
              Text('left width 20%')
                .textAlign(TextAlign.Center)
            }.width('20%').backgroundColor(0xF5DEB3).height('100%')
    
    Column() {
          Text('center width 50%')
            .textAlign(TextAlign.Center)
        }.width('50%').backgroundColor(0xD2B48C).height('100%')
     
        Column() {
          Text('right width 30%')
            .textAlign(TextAlign.Center)
        }.width('30%').backgroundColor(0xF5DEB3).height('100%')
      }.backgroundColor(0xffd306).height('30%')
    }
      }
    }


![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefined3c695d529f8e4066b7d975f62ccc522f.png)

🔎7.Scroll组件自适应延伸
🦋7.1 列自适应延伸

```
@Entry
@Component
struct ScrollExample {
  scroller: Scroller = new Scroller();
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  build() {
    Scroll(this.scroller) {
      Column() {
        ForEach(this.arr, (item) => {
          Text(item.toString())
            .width('90%')
            .height(150)
            .backgroundColor(0xFFFFFF)
            .borderRadius(15)
            .fontSize(16)
            .textAlign(TextAlign.Center)
            .margin({ top: 10 })
        }, item => item)
      }.width('100%')
    }
    .backgroundColor(0xDCDCDC)
    .scrollable(ScrollDirection.Vertical) // 滚动方向纵向
    .scrollBar(BarState.On) // 滚动条常驻显示
    .scrollBarColor(Color.Gray) // 滚动条颜色
    .scrollBarWidth(10) // 滚动条宽度
    .edgeEffect(EdgeEffect.Spring) // 滚动到边沿后回弹
  }
}
```

![b5c3fed651ab48219c616fa2054d9f3e](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinedb5c3fed651ab48219c616fa2054d9f3e.gif)

🦋7.2 行自适应延伸

```
@Entry
@Component
struct ScrollExample {
  scroller: Scroller = new Scroller();
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  build() {
    Scroll(this.scroller) {
      Row() {
        ForEach(this.arr, (item) => {
          Text(item.toString())
            .height('90%')
            .width(150)
            .backgroundColor(0xFFFFFF)
            .borderRadius(15)
            .fontSize(16)
            .textAlign(TextAlign.Center)
            .margin({ left: 10 })
        })
      }.height('100%')
    }
    .backgroundColor(0xDCDCDC)
    .scrollable(ScrollDirection.Horizontal) // 滚动方向横向
    .scrollBar(BarState.On) // 滚动条常驻显示
    .scrollBarColor(Color.Gray) // 滚动条颜色
    .scrollBarWidth(10) // 滚动条宽度
    .edgeEffect(EdgeEffect.Spring) // 滚动到边沿后回弹
  }
}
```

![f64ced4bee984cdabfd3befe20b511a4](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinedf64ced4bee984cdabfd3befe20b511a4.gif)

🚀二、登录案例

```
build() {
  Column({space:20}) {
    Image( 'logo .png')
    TextInput({placeholder:'用户名'})
    TextInput({placeholder:'密码'})
      .type(InputType.Password)
      .showPasswordIcon(true)
    Button('登录')
    Row(){
      Checkbox()
      Text('记住我')
        .fontColor('#36D')
    }
  }
  .height('100%')
}
```


执行效果:

![在这里插入图片描述](https://luckly007.oss-cn-beijing.aliyuncs.com/undefinedbeb96c2634fd4308a42e47cf2cc0c202.png)

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐