6.ArkUI Row的介绍和使用

news2025/4/26 13:29:03

ArkUI Row 组件介绍与使用指南

什么是 Row 组件?

Row 是 ArkUI 中的基础布局容器组件,用于水平(横向)排列子组件。它与 Column 组件相对应,是构建用户界面最常用的布局方式之一,类似于其他UI框架中的水平线性布局。

Row 的基本属性

  1. space:设置子组件之间的水平间距
  2. alignItems:设置子组件在垂直方向的对齐方式
    • VerticalAlign.Top(默认):顶部对齐
    • VerticalAlign.Center:垂直居中
    • VerticalAlign.Bottom:底部对齐
  3. justifyContent:设置子组件在水平方向的对齐方式
    • FlexAlign.Start(默认):左对齐
    • FlexAlign.Center:水平居中
    • FlexAlign.End:右对齐
    • FlexAlign.SpaceBetween:均匀分布,首尾不留空
    • FlexAlign.SpaceAround:均匀分布,首尾留空
    • FlexAlign.SpaceEvenly:完全均匀分布

基本使用方法

@Entry
@Component
struct RowExample {
  build() {
    Row({ space: 20 }) {
      Text('第一个')
        .fontSize(20)
        .backgroundColor('#f0f0f0')
        .height(60)
        .textAlign(TextAlign.Center)
        .layoutWeight(1)
      
      Text('第二个')
        .fontSize(20)
        .backgroundColor('#e0e0e0')
        .height(60)
        .textAlign(TextAlign.Center)
        .layoutWeight(1)
      
      Text('第三个')
        .fontSize(20)
        .backgroundColor('#d0d0d0')
        .height(60)
        .textAlign(TextAlign.Center)
        .layoutWeight(1)
    }
    .width('100%')
    .height(100)
    .margin({ top: 20 })
    .backgroundColor('#ffffff')
  }
}

高级用法

设置对齐方式

Row() {
  // 子组件...
}
.width('100%')
.height(100)
.alignItems(VerticalAlign.Center) // 垂直居中
.justifyContent(FlexAlign.SpaceBetween) // 水平方向均匀分布
.border({ width: 1, color: Color.Black })

嵌套使用

Row({ space: 10 }) {
  Column() {
    Text('列1')
    Text('列1')
  }
  .layoutWeight(1)
  
  Row({ space: 5 }) {
    Text('嵌套行1')
    Text('嵌套行2')
  }
  .layoutWeight(1)
  .margin({ left: 10 })
  .border({ width: 1, color: Color.Gray })
}

与 Scroll 结合实现水平滚动

@State itemList: string[] = ['项目1', '项目2', '项目3', '项目4', '项目5', '项目6', '项目7', '项目8']

build() {
  Scroll() {
    Row({ space: 15 }) {
      ForEach(this.itemList, (item: string) => {
        Text(item)
          .fontSize(18)
          .height(80)
          .width(120)
          .backgroundColor('#f5f5f5')
          .textAlign(TextAlign.Center)
      })
    }
    .height(100)
    .padding(10)
  }
  .scrollable(ScrollDirection.Horizontal) // 水平滚动
  .margin({ top: 20 })
}

权重布局 (layoutWeight)

Row() {
  Text('权重1')
    .backgroundColor('#ffcccc')
    .height(60)
    .layoutWeight(1) // 占据剩余空间的1/3
    
  Text('权重2')
    .backgroundColor('#ccffcc')
    .height(60)
    .layoutWeight(2) // 占据剩余空间的2/3
}
.width('100%')
.margin(20)

实际应用示例

底部导航栏

@Entry
@Component
struct BottomNav {
  @State currentIndex: number = 0

  build() {
    Column() {
      // 内容区域
      Text(`当前页面: ${this.currentIndex + 1}`)
        .fontSize(24)
        .margin(30)
      
      // 底部导航栏
      Row() {
        ForEach([0, 1, 2], (index: number) => {
          Column() {
            Image(this.currentIndex === index ? 'selected_icon' : 'normal_icon')
              .width(24)
              .height(24)
            Text(`页面${index + 1}`)
              .fontSize(12)
              .margin({ top: 4 })
          }
          .onClick(() => {
            this.currentIndex = index
          })
          .layoutWeight(1)
          .alignItems(HorizontalAlign.Center)
        })
      }
      .width('100%')
      .height(60)
      .backgroundColor('#f8f8f8')
      .border({ width: 1, color: '#eeeeee' })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.SpaceBetween)
  }
}

商品卡片布局

@Entry
@Component
struct ProductCard {
  build() {
    Column() {
      // 商品图片
      Image('product_image')
        .width('100%')
        .height(200)
        .objectFit(ImageFit.Cover)
      
      // 商品信息行
      Row() {
        Column() {
          Text('商品名称')
            .fontSize(16)
            .fontWeight(FontWeight.Bold)
          Text('¥199.00')
            .fontSize(14)
            .margin({ top: 4 })
            .fontColor('#ff0000')
        }
        .layoutWeight(1)
        
        Button('购买')
          .width(80)
          .height(36)
          .fontSize(14)
      }
      .padding(10)
      .alignItems(VerticalAlign.Center)
    }
    .width(180)
    .borderRadius(8)
    .backgroundColor(Color.White)
    .shadow({ radius: 4, color: '#1a000000', offsetX: 1, offsetY: 1 })
    .margin(10)
  }
}

注意事项

  1. Row 默认会占用所有可用宽度,如果不希望这样,需要明确设置其宽度
  2. 子组件默认会占据 Row 的整个可用高度
  3. 当内容超出容器宽度时,需要配合 Scroll 组件使用才能实现水平滚动
  4. 使用 layoutWeight 时,所有设置了该属性的子组件会按比例分配剩余空间
  5. 在性能敏感的场景中,避免过度嵌套 Row 和 Column 组件

Row 组件是 ArkUI 中实现水平布局的核心组件,熟练掌握它的使用可以高效地构建各种用户界面布局,特别是导航栏、按钮组、列表项等常见UI元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2343281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 在 dbeaver中下载驱动失败处理

直接上解决方法 1. 在mysql官网下载驱动 2. 引入dbeaver中即可 3. 最后再双击即可

Java 安全:如何防止 SQL 注入与 XSS 攻击?

Java 安全:如何防止 SQL 注入与 XSS 攻击? 在 Java 开发领域,安全问题至关重要,而 SQL 注入和 XSS 攻击是两种常见的安全威胁。本文将深入探讨如何有效防止这两种攻击,通过详细代码实例为您呈现解决方案。 一、SQL 注…

fastbev mmdetection3D 角度和方向损失

角度/方向损失 sin(a−b)sinacosb−cosasinb config参数 dir_offset0.7854, # pi/4 dir_limit_offset0, box编解码 # Copyright (c) OpenMMLab. All rights reserved. import torchfrom mmdet.core.bbox import BaseBBoxCoder from mmdet.core.bbox.builder import BBOX_COD…

一种专用车辆智能配电模块的设计解析:技术革新与未来展望

关键词:智能配电模块、STM32、CAN总线、电子开关、新能源汽车 引言:传统配电系统的痛点与智能化转型 传统配电系统依赖继电器和保险丝,存在体积大、寿命短、智能化低等缺陷(如图1)。而新能源汽车和无人驾驶技术对配电…

《深入浅出ProtoBuf:从环境搭建到高效数据序列化》​

ProtoBuf详解 1、初识ProtoBuf2、安装ProtoBuf2.1、ProtoBuf在Windows下的安装2.2、ProtoBuf在Linux下的安装 3、快速上手——通讯录V1.03.1、步骤1:创建.proto文件3.2、步骤2:编译contacts.proto文件,生成C文件3.3、步骤3:序列化…

Java实现加密(七)国密SM2算法的签名和验签(附商用密码检测相关国家标准/国密标准下载)

目录 一、国密标准中,关于SM2签名验签的定义二、SM2签名和验签的实现原理1. 前置知识2. 签名生成过程3. 验签过程4. 数学正确性证明5. 安全性与注意事项 三、带userId、不带userId的区别1. 核心区别2.算法区别(1) 哈希计算过程(2) 签名验签流程 四、Java代码实现1. …

【华为HCIP | 华为数通工程师】821—多选解析—第十七页

多选835、IS-IS协议所使用的NSAP地址主要由哪几个部分构成? A、AREA ID B、SEL C、DSCp D、SYSTEM ID 解析:NSAP地址:网络服务访问点(Network Service Access Point)是 OSI 协议中用于定位资源的地址。NSAP 的地址结构如图所示,它由 IDP(Initial Domain …

函数的定义与使用(python)

lst[:]是传入lst的拷贝。改变它对原始lst没有任何影响。 *list一个*的元素在函数体内会被当成一个元组。 以下是对图中 Python 代码的详细解释: 代码总体功能 这段代码定义了一个生成器函数 getItem ,用于依次返回多个列表中的元素。然后通过循环遍历…

List findIntersection getUnion

List findIntersection & getUnion 求两个列表的交集和并集 package zwf;import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List;/*** 列表工具类* * author ZengWenFeng* date 2025.04.22* mobile 13805029595* email 117791303qq.com*/ p…

乒乓操作(Ping-Pong)

乒乓操作 “ 乒乓操作” 是一个常常应用于数据流控制的设计思想, 典型的乒乓操作方法如下图 所示: ​ T1周期,输入数据流1缓存到数据缓冲模块1中,如上图棕色;T2周期,输入数据流2缓存到数据缓冲模块2中&…

微信小程序文章管理系统开发实现

概述 在内容为王的互联网时代,高效的文章管理系统成为各类平台的刚需。幽络源平台今日分享一款基于SSM框架开发的微信小程序文章管理系统完整解决方案,该系统实现了多角色内容管理、智能分类、互动交流等功能。 主要内容 一、用户端功能模块 ​​多角…

GrassRouter 小草MULE多5G多链路聚合通信路由设备在应急场景的聚合效率测试报告及解决方案

在应急通信场景中,快速、稳定、高效的通信链路是保障救援工作顺利开展的关键。MULE(Multi-Link Unified Link Enhancement)多链路聚合路由通信设备作为一种新型的通信技术解决方案,通过聚合多条通信链路(如4G/5G、卫星…

【MySQL】MySQL索引与事务

目录 前言 1. 索引 (index) 1.1 概念 1.2 作用 1.3 使用场景 1.4 索引的相关操作 查看索引 创建索引 删除索引 2. 索引背后的数据结构 2.1 B树 2.2 B+树的特点 2.3 B+树的优势 3. 事务 3.1 为什么使用事务 3.2 事…

华为网路设备学习-19 IGP路由专题-路由策略

一、 二、 注意: 当该节点匹配模式为permit下时,参考if else 当该节点匹配模式为deny下时: 1、该节点中的apply子语句不会执行。 2、如果满足所有判断(if-match)条件时,拒绝该节点并跳出(即不…

基于DrissionPage的表情包爬虫实现与解析(含源码)

目录 ​编辑 一、环境配置与技术选型 1.1 环境要求 1.2 DrissionPage优势 二、爬虫实现代码 三、代码解析 3.1 类结构设计 3.2 目录创建方法 3.3 图片链接获取 3.4 图片下载方法 四、技术升级对比 4.1 代码复杂度对比 4.2 性能测试数据 五、扩展优化建议 5.1 并…

区间和数量统计 之 前缀和+哈希表

文章目录 1512.好数对的数目2845.统计趣味子数组的数目1371.每个元音包含偶数次的最长子字符串 区间和的数量统计是一类十分典型的问题:记录左边,枚举右边策略前置题目:统计nums[j]nums[i]的对数进阶版本:统计子数组和%modulo k的…

全能 Sui 技术栈,构建 Web3 的未来

本文翻译自:FourPillarsFP,文章仅代表作者观点。 2025 年,SuiNetwork正在以一套全栈区块链策略强势出击,彻底打破加密行业的传统范式。正如 Mysten Labs 联合创始人 Adeniyi Abiodun 所说:“Sui 不只是一条区块链&…

linux安装单节点Elasticsearch(es),安装可视化工具kibana

真的,我安装个es和kibana,找了好多帖子,问了好几遍ai才安装成功,在这里记录一下,我相信,跟着我的步骤走,99%会成功; 为了让大家直观的看到安装过程,我把我服务器的es和ki…

RK3xxx 部分无法连接虚拟机 无法进行adb连接

我发现部分rk板子可以连接到虚拟机上,部分连接不上。其中尝试了一块是安卓系统的rk板子是可以连接虚拟机。但是用了linux系统的rk板子连接不上虚拟机。尝试了很多办法还是无法连接虚拟机。 然后也看到一些相关资料,但是太少了,只有这个链接提…

26考研——存储系统(3)

408答疑 文章目录 一、存储器概述二、主存储器三、主存储器与 CPU 的连接四、外部存储器五、高速缓冲存储器六、虚拟存储器七、参考资料鲍鱼科技课件26王道考研书 八、总结复习提示思考题常见问题和易混淆知识点 一、存储器概述 文章链接: 点击跳转 二、主存储器 文章链接: …