当前位置: 首页 > news >正文

ArkUI中的布局组件Row(一)

目录

​一、前言

​二、核心特性详解​

​1. 基础用法

1.alignItems

2.justifyContent

3.reverse

2.自适应

1.自适应拉伸

2.自适应缩放

1.父容器确定,子元素填充自适应

3.​​​​​​​父容器确定,子元素按照百分比自适应

​3. 自适应延伸


一、前言

        线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row和Column构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。线性布局的排列方向由所选容器组件决定,Row容器内子元素按照水平方向排列,Column容器内子元素按照垂直方向排列。根据不同的排列方向,开发者可选择使用Row或Column容器创建线性布局。​

        这篇文章主要介绍Row组件的一些基础知识。

二、核心特性详解

1. 基础用法

1.alignItems

        Row中的元素在竖直方向的布局方式。

        这里的alignItems是一个VerticalAlign类型的枚举,它有三个值:Top、Center、Bottom,分别表示在竖直方向元素顶部对齐、居中对齐、底部对齐。

        

图1.顶部对齐

  图2.居中对齐

图3.底部对齐

2.justifyContent

        Row中的元素在主轴(水平方向)的排列方式。

        图4.Row中的元素在主轴方向的排列方式

3.reverse

        在鸿蒙(HarmonyOS)的ArkUI框架中,Row组件的reverse属性用于反转子组件的排列顺序,这是一个非常实用的布局功能。以下是详细解析和示例:​

        默认情况reverse的值为false,子组件按代码书写顺序从左到右排列。

Row() {Text('A') // 显示在左侧Text('B') // 显示在中间Text('C') // 显示在右侧
}

            设置reverse的属性为true,子组件按代码书写顺序从右到左排列。

            以下面的代码为例:

    Row({ reverse: true }) {Text('A') // 实际显示在右侧Text('B') // 实际显示在中间Text('C') // 实际显示在左侧
    }

      ​        reverse属性在国际化、动态排序等其它场景也经常会用到。

      2.自适应

              space属性用来设置子组件的间距,支持设置数值和百分比。

      1.自适应拉伸

              在线性布局下,常用空白填充组件Blank,在容器主轴方向自动填充空白空间,达到自适应拉伸效果。Row和Column作为容器,只需要添加宽高为百分比,当屏幕宽高发生变化时,会产生自适应效果。

              在下面的示例代码中,当屏幕宽度发生变化的时候,Blank会填充中间的空白区域。

       @Entry
      @Component
      struct BlankExample {
        build() {
          Column() {
            Row() {
              Text('Bluetooth').fontSize(18)
              Blank()
              Toggle({ type: ToggleType.Switch, isOn: true })
            }.backgroundColor(0xFFFFFF).borderRadius(15).padding({ left: 12 }).width('100%')
          }.backgroundColor(0xEFEFEF).padding(20).width('100%')
        }
      }

      2.​​​​​​​自适应缩放

              自适应缩放是指子元素随容器尺寸的变化而按照预设的比例自动调整尺寸,适应各种不同大小的设备。在线性布局中,可以使用以下两种方法实现自适应缩放。

      1.父容器确定,子元素填充自适应

              父容器尺寸确定时,使用layoutWeight属性设置子元素和兄弟元素在主轴上的权重,忽略元素本身尺寸设置,使它们在任意尺寸的设备下自适应占满剩余空间。

              以下面的代码为例:

      @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%')}}
      }

      图5.横屏

      图6.竖屏

      3.​​​​​​​父容器确定,子元素按照百分比自适应

              父容器尺寸确定时,使用百分比设置子元素和兄弟元素的宽度,使他们在任意尺寸的设备下保持固定的自适应占比。

      @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%')}}
      }

              当屏幕发生变化的时候,组件会按照百分比适配。

      3. 自适应延伸

              自适应延伸是指在不同尺寸设备下,当页面的内容超出屏幕大小而无法完全显示时,可以通过滚动条进行拖动展示。对于线性布局,这种方法适用于容器中内容无法一屏展示的场景。通常有以下两种实现方式。

              这里主要涉及List组件和Scroll组件,也就是我们使用Row布局的时候,当子元素的宽度超过屏幕的时候,我们可以嵌套List或者Scroll组件。

              关于List和Scroll组件,会在相关的章节介绍。​

      http://www.dtcms.com/a/323152.html

      相关文章:

    • 计算机网络1-6:计算机网络体系结构
    • 【Python 高频 API 速学 ④】
    • Office安装使用?借助Ohook开源工具?【图文详解】微软Office产品
    • 使用 Conda 安装 xinference[all](详细版)
    • 一个“加锁无效“的诡异现象
    • Java 日志从入门到精通:告别日志混乱
    • C++高性能细粒度时间跟踪实战
    • Python基础教程(五)list和tuple:深度剖析Python列表与元组的终极对决
    • PHP-单引号和双引号(通俗易懂讲解版)
    • 卫星遥感与AI大模型
    • JS逆向实战案例之----【通姆】252个webpack模块自吐
    • NFS 挂载失败** 问题(`mount: wrong fs type`),以下是详细的排查步骤和解决方案
    • 20250809在WIN10下使用diskpart命令格式化TF卡【卡刷荣品PRO-RK3566的核心板】
    • 云渲染的未来已来:渲酷云如何重新定义数字内容生产效率
    • SimBA算法实现过程
    • 39.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--调整发布脚本
    • 利用SymPy与SciPy高效求解参数化方程组的数值解
    • [激光原理与应用-207]:光学器件 - 光纤种子源激光器常用元器件
    • 9-DS18B20-verilog驱动
    • Zabbix自动注册:轻松实现大规模监控
    • [LLM 应用评估] 评估指标 | 评估协调器 | 测试集生成组件
    • 【MATLAB例程】基于UKF的IMM例程,模型使用CA(匀加速)和CT(协调转弯)双模型,二维环境下的轨迹定位。附代码下载链接
    • Python映射合并技术:多源数据集成的高级策略与工程实践
    • Python如何合并两个Excel文件
    • Qt 综述:从基础到一般应用
    • 【第十章】高阶函数揭秘:map、filter、reduce 玩转数据流
    • 数据结构与算法:树状数组
    • BGP笔记
    • [FOC电机控制]霍尔传感器于角度问题
    • 基于IPD体系的研发项目范围管理