首页 > 其他分享 >Harmony 应用开发常用布局介绍

Harmony 应用开发常用布局介绍

时间:2024-11-19 14:20:29浏览次数:1  
标签:__ 常用 align 布局 height width Harmony anchor

在 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)

layout_column

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)

layout_row

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)

layout_stack

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)

layout_flex

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)

layout_relative

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})

layout_gridrow


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

标签:__,常用,align,布局,height,width,Harmony,anchor
From: https://www.cnblogs.com/brian512/p/18554771

相关文章

  • Harmony 应用开发常用组件介绍
    在Harmony应用开发中,有许多实用的组件,它们是构建丰富多样用户界面的基础。以下是一些常用组件的介绍。1.Text组件功能:Text组件用于在界面上显示文本信息。它可以设置文本内容、字体大小、颜色、对齐方式等多种属性。示例代码:Text('这是一个示例文本这是一个示例......
  • Linux常用命令之tar命令详解
    tar命令详解tar(TapeArchive)是Unix和Linux系统中一个非常强大的文件归档工具,用于创建、提取和管理归档文件。归档文件可以包含一个或多个文件和目录,常用于备份、存档和传输数据。tar支持多种压缩方式,如gzip、bzip2和xz。基本语法tar[选项][归档文件][文件或......
  • 网络属性及相关配置常用命令-下篇
    nmclinmcliconnmclidevshowens160nmcliconmodens160+ipv4.address10.0.0.119/24#同一设备新增一条配置+ipv4.addressnmclicondownens160;nmcliconreload;nmcliconupens160ipa|grep'inet1'nmcliconmodens160-ipv4.addresses10.0.0.119/2......
  • 网络属性及相关配置常用命令-上篇
    网络属性及相关配置网卡名字rocky8|openEuleripa|egrep'mtu|scrope'cd/etc/sysconfig/network-scriptsmvifcfg-ens160ifcfg-eth0sed-i's/ens160/eth0/g'ifcfg-eth0vim/etc/default/grub #grub是启动配置文件GRUB_CMDLINE_LINUX="...net.ifnames=0......
  • docker原理、常用命令,以及部署nginx、tomcat、es+kibana练习(一)
    基本结构镜像(image):docker镜像可以当作一个模板,通过这个模板可以创建多个容器。例如一个tomcat镜像=>运行=>容器(提供服务)容器(container):docker利用容器技术,可以独立运行一个或一组应用(容器间相互隔离)docker容器通过镜像来创建,即容器中的进程依赖于镜像中的文......
  • HarmonyOS-Chat聊天室|纯血鸿蒙Next5 api12聊天app|ArkUI仿微信
    自研原生鸿蒙NEXT5.0API12ArkTS仿微信app聊天模板HarmonyOSChat。harmony-wechat原创重磅实战纯血鸿蒙OSArkUI+ArkTs仿微信App聊天实例。包括聊天、通讯录、我、朋友圈等模块,实现类似微信消息UI布局、编辑器光标处输入文字+emo表情图片/GIF动图、图片预览、红包、语音/位置UI......
  • linux常用命令(解压,压缩)
    目录1. tar -归档文件常用参数示例2. gzip -压缩单个文件常用参数示例3. bzip2 -压缩单个文件常用参数示例4. zip -压缩文件和目录常用参数示例5. unzip -解压.zip文件常用参数示例1. tar -归档文件tar是一个非常强大的工具,不仅可以打包......
  • linux常用命令(文件操作)
    目录1. ls -列出目录内容2. cd -更改目录3. pwd -打印当前工作目录4. mkdir -创建目录5. rm -删除文件或目录6. cp -复制文件或目录7. mv -移动或重命名文件8. touch -更新文件访问和修改时间9. cat -显示文件内容10. grep -搜索文本......
  • 实现简易计算器 网格布局 QT环境 纯代码C++实现
    问题:通过代码完成一个10以内加减法计算器。不需要自适应,界面固定360*350。"="按钮90*140,其它按钮90*70。参考样式#defineDEFULT_BUTTON_STYLE"\QPushButton{\color:#000000;\border:1pxsolid#AAAAAA;\border-radius:0;\background-color:#FFFFFF;......
  • java日志常用配置
    <!--pom.xml--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dep......