HarmonyOS Next 应用开发常用布局介绍

在 Harmony 应用开发中,合理的布局是构建美观且易用界面的关键。以下是几种常用的布局方式。

1. Column 布局

  • 特点:Column 是一种垂直方向的线性布局容器。它将子组件按照从上到下的顺序依次排列。
  • 示例代码
      Column({ space: 5 }) {
        Text("Column")
        Button('Button 1')
        Button('Button 2')
      }.width('90%')
      .borderRadius(16)
      .borderColor(Color.Red)
      .borderWidth(2)
      .padding(10)

file

2. Row 布局

  • 特点:与 Column 相反,Row 是水平方向的线性布局。子组件在水平方向上从左到右排列。
  • 示例代码
      Row({ space: 5 }) {
        Text("Row")
        ForEach(this.list, (index: number) => {
          Button('Button' + index)
        })
      }.width('100%')
      .borderRadius(16)
      .borderColor(Color.Red)
      .borderWidth(2)
      .padding(10)

file

3. Stack 布局

  • 特点:Stack 布局允许子组件按照堆叠的方式排列。后添加的子组件会覆盖前面的子组件,可以通过设置 z - index 等属性来控制显示顺序。
  • 示例代码
      Stack({ alignContent: Alignment.Center }) {
        Image($r('app.media.app_icon'))
          .width('100%').height('100%')
          .objectFit(ImageFit.Contain)

        Stack({ alignContent: Alignment.BottomEnd }) {
          Image($r('app.media.app_icon')).height(30).width(30)
        }.width('100%').height('100%')

        Image($r('app.media.app_icon')).height(30).width(30).align(Alignment.BottomEnd)

        Stack({ alignContent: Alignment.TopStart }) {
          Text("Stack").fontSize(30).fontColor(Color.Red)
        }.width('100%').height('100%')
      }.width('90%')
      .height(200)
      .borderRadius(16)
      .borderColor(Color.Red)
      .borderWidth(2)
      .padding(10)

file

4. Flex 布局

  • 特点:Flex 布局是一种更灵活的布局方式,它可以在水平和垂直方向上排列子组件,并且可以方便地设置对齐方式、伸缩比例等。
  • 示例代码(水平方向的 Flex 布局示例)
      Flex({
        direction: FlexDirection.Row,
        wrap: FlexWrap.Wrap,
        justifyContent: FlexAlign.SpaceBetween,
        alignItems: ItemAlign.Center,
        alignContent: FlexAlign.Center,
      }) {
        Text("Flex")
        ForEach(this.list, (index: number) => {
          Button('Button' + index).margin({ bottom: 5 })
        })
      }.width('90%')
      .borderRadius(16)
      .borderColor(Color.Red)
      .borderWidth(2)
      .padding(10)

file

5. RelativeContainer 布局

  • 特点:RelativeContainer 为采用相对布局的容器,支持容器内部的子元素设置相对位置关系,适用于界面复杂场景的情况,对多个子组件进行对齐和排列。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。
      RelativeContainer() {

        Text("RelativeContainer").alignRules({
          'left': { 'anchor': '__container__', 'align': HorizontalAlign.Start},
          'top': { 'anchor': '__container__', 'align': VerticalAlign.Top}
        })

        Image($r('app.media.watchGT4')).width(50).height(50).borderRadius(25)
          .alignRules({
            'left': { 'anchor': '__container__', 'align': HorizontalAlign.Start},
            'top': { 'anchor': '__container__', 'align': VerticalAlign.Top},
            'bottom': { 'anchor': '__container__', 'align': VerticalAlign.Bottom},
          }).margin({left:15}).id("avatar")

        Text("Name").alignRules({
          'left': { 'anchor': 'avatar', 'align': HorizontalAlign.End},
          'top': { 'anchor': 'avatar', 'align': VerticalAlign.Top},
          'bottom':{ 'anchor': 'avatar', 'align': VerticalAlign.Bottom}
        }).margin({left:10})

        Button("关注").height(40).alignRules({
          'top': { 'anchor': '__container__', 'align': VerticalAlign.Top},
          'bottom': { 'anchor': '__container__', 'align': VerticalAlign.Bottom},
          'right': { 'anchor': '__container__', 'align': HorizontalAlign.End},
        }).margin({right:15})

      }
      .width('90%')
      .height(100)
      .borderRadius(16)
      .borderColor(Color.Red)
      .borderWidth(2)
      .padding(10)

file

6. Grid 布局

  • 特点:Grid 布局是一种多列布局方式,它将屏幕分为多列,子组件按照指定的行数和列数进行排列。
  • 示例代码(Grid 布局示例)
        GridRow({
          breakpoints: {
            value: ['200vp', '300vp', '400vp', '500vp', '600vp'],
            reference: BreakpointsReference.WindowSize
          },
          columns: 60 // 共 60 列
        }) {
          ForEach(this.bgColors, (color: Color, index?: number | undefined) => {
            GridCol({
              span: {
                xs: 60, // 在最小宽度类型设备上,显示 1 项。
                sm: 30, // 在小宽度类型设备上,显示 2 项。
                md: 20, // 在中等宽度类型设备上,显示 3 项。
                lg: 15, // 在大宽度类型设备上,显示 4 项。
                xl: 12, // 在特大宽度类型设备上,显示 5 项。
                xxl: 10 // 在超大宽度类型设备上,显示 6 项。
              }
            }) {
              Row() {
                Text(`${index}`)
              }.width("100%").height('50vp')
            }.backgroundColor(color)
          })
        }.margin({left:15, right:15})

file


通过熟练掌握这些常用的布局方式,开发者可以高效地构建出符合设计要求的 Harmony 应用界面,为用户提供优质的交互体验。同时,参考官网文档中的详细说明和更多示例,可以进一步深入理解和优化布局设计。

本文由博客一文多发平台 OpenWrite 发布!

内容概要:本文深入探讨了软件项目配置管理在汽车开发领域的应用及其重要性,强调配置管理不仅是版本控制,更是涵盖标识、追溯、结构化等多方面的深度管控。文章通过对比机械产品软件产品的标签管理,揭示了软件配置管理的独特挑战。配置管理构建了一个“网”状体系,确保软件产品在复杂多变的开发环境中保持稳定有序。文中还讨论了配置管理在实际工作中的困境,如命名混乱、文档更新不及时、发布流程冗长等问题,并提出了通过结构可视化、信息同源化、痕迹自动化基线灵活化等手段优化配置管理的具体方法。 适合人群:具备一定软件开发项目管理经验的工程师及项目经理,尤其是从事汽车电子软件开发的相关人员。 使用场景及目标:①理解配置管理在汽车软件项目中的核心作用;②学习如何通过工具链(如Polarion、JIRA、飞书等)优化配置管理流程;③掌握结构可视化、信息同源化、痕迹自动化基线灵活化等关键技术手段,提升项目管理水平。 其他说明:配置管理不仅是技术问题,更涉及到项目管理团队协作。文中强调了工具链的应用优化的重要性,但同时也指出,工具本身并不能解决所有问题,关键在于如何合理使用工具并不断优化管理流程。文章呼吁读者成为长期主义者,相信时间的力量,持续改进配置管理工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值