HarmonyOS NEXT开发-ArkUI七

简介: 本文介绍了ArkUI中的布局概念,包括组件区域、内容区和布局边界,并详细讲解了线性布局(Row/Column)的使用方法,如间距设置和对齐方式。通过实例代码展示了如何创建美观且功能丰富的页面布局。关注Feri,一起探索HarmonyOS开发!

程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前!


1.ArkUI中的布局

组件按照布局的要求依次排列,构成应用的页面。在声明式UI中,所有的页面都是由自定义组件构成,我们可以根据自己的需求,选择合适的布局进行页面开发。

布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在开发过程中,需要遵守以下流程保证整体的布局效果:

  1. 确定页面的布局结构。
  2. 分析页面中的元素构成。
  3. 选用适合的布局容器组件或属性控制页面中各个元素的位置和大小。

布局相关的容器组件可形成对应的布局效果

详解:

组件区域(蓝区方块):
组件区域表示组件的大小,width、height属性用于设置组件区域的大小。

组件内容区(黄色方块):
组件内容区大小为组件区域大小减去组件的border值,组件内容区大小会作为组件内容(或者子组件)进行大小测算时的布局测算限制。

组件内容(绿色方块):
组件内容本身占用的大小,比如文本内容占用的大小。组件内容和组件内容区不一定匹配,比如设置了固定的width和height,此时组件内容的大小就是设置的width和height减去padding和border值,但文本内容则是通过文本布局引擎测算后得到的大小,可能出现文本真实大小小于设置的组件内容区大小。当组件内容和组件内容区大小不一致时,align属性生效,定义组件内容在组件内容区的对齐方式,如居中对齐。

组件布局边界(虚线部分):
组件通过margin属性设置外边距时,组件布局边界就是组件区域加上margin的大小。

2.线性布局(Row/Column)

2.1 线性布局概述

线性布局(LinearLayout)是开发中最常用的布局,通过线性容器 Row 和 Column 构建。

Column容器内子元素按照垂直方向排列

Row容器内子元素按照水平方向排列。

根据不同的排列方向,我们自己可选择使用Row或Column容器创建线性布局。


@Entry
@Component
struct MyStudy2{
  build() {
    Column(){
      //列方向
      Text().width("90%").height(50).backgroundColor(Color.Gray).borderWidth(1).margin(10)
      Text().width("90%").height(50).backgroundColor(Color.Gray).borderWidth(1).margin(10)
      Text().width("90%").height(50).backgroundColor(Color.Gray).borderWidth(1).margin(10)
      Text().width("90%").height(50).backgroundColor(Color.Gray).borderWidth(1).margin(10)

      //行方向
      Row(){
        Text().width("20%").height(200).backgroundColor(Color.Orange).borderWidth(1).margin(10)
        Text().width("20%").height(200).backgroundColor(Color.Orange).borderWidth(1).margin(10)
        Text().width("20%").height(200).backgroundColor(Color.Orange).borderWidth(1).margin(10)
        Text().width("20%").height(200).backgroundColor(Color.Orange).borderWidth(1).margin(10)
      }.width("100%").height(300).margin(10)

    }.width("100%")
  }
}

2.2 间距

在布局容器内,可以通过 space 属性设置布局主方向方向上子元素的间距,使各子元素在布局主方向上有等间距效果。

属性:space:间距

示例如下:

//间距
      Column({space:20}){
        Button("Feri-间距-按钮1").width("90%").height(30)
        Button("Feri-间距-按钮2").width("90%").height(30)
        Button("Feri-间距-按钮3").width("90%").height(30)
      }.width("90%").borderWidth(2)

2.3 布局主方向对齐方式

属性:justifyContent()

参数:枚举FlexAlign

具体取值如下所示:

示例代码,如下所示:


  build() {
    Row() {
      Text('Feri-文本1')
        .height(50)
        .backgroundColor(Color.Pink)
      Text('Feri-文本2')
        .height(50)
        .backgroundColor(Color.Orange)
      Text('Feri-文本3')
        .height(50)
        .backgroundColor(Color.Brown)
    }
    .width('100%')
    .height(200)
    .backgroundColor('#ccc')
    // 主布局方向的对齐方式
    .justifyContent(FlexAlign.Center)
    // 两端对齐
    .justifyContent(FlexAlign.SpaceBetween)
  }

3 综合效果实现

image.png


@Entry
@Component
struct Index{
  build() {
    Column() {
      // 产品卡片
      Column({space: 10}) {
        // 图片
        Image($r('app.media.xie'))
          .width('100%')
          .aspectRatio(1)
          .borderRadius({topLeft:5, topRight: 5})
        // 标题文字
        Text('今晚吃这个 | 每日艺术分享 No.0105')
          .fontSize(14)
          .fontWeight(600)
          .fontColor('#414141')
          .lineHeight(22)
          .padding({left: 10, right: 10})
        // 用户与点赞
        Row() {
          // 用户
          Row({space: 5}){
            Image($r('app.media.startIcon'))
              .width(15)
              .borderRadius(10)
            Text('程序员Feri')
              .fontSize(10)
              .fontColor('#787a7d')
          }
          // 点赞
          Row({ space: 5}){
            Image($r('app.media.xihuan'))
              .width(10)
              .aspectRatio(1)
              .fillColor('#c2c0ca')
            Text('6666')
              .fontSize(10)
              .fontColor('#787a7d')
          }
        }
        .width('100%')
        .padding({left: 10, right: 10})
        .justifyContent(FlexAlign.SpaceBetween)
      }
      .width("90%")
      .padding({bottom:10})
      .backgroundColor('#fff')
      .borderRadius(5)
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#f5f4f9')
  }
}

好啦,就先说到这里,下一篇继续说线性布局,关注我,跟着搞harmony开发!

相关文章
|
7月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
963 94
|
8月前
|
开发者 容器
鸿蒙应用开发从入门到实战(十四):ArkUI组件Column&Row&线性布局
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Column和Row组件的使用以及线性布局的方法。
717 12
|
7月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1395 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1007 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1108 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
381 0
|
8月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
1065 0
|
移动开发 Ubuntu 网络协议
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(中)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
452 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(中)
|
XML Web App开发 开发框架
鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转
准备好鸿蒙开发环境后,接下来就需要创建鸿蒙项目,掌握项目的创建过程以及配置。项目创建好后,需要把项目运行在模拟器上,鸿蒙的模拟和安卓模拟器有些不同,鸿蒙提供远程模拟器和本地模拟器,通过登录华为账号登录在线模拟器,使用DevEco Studio可将项目部署到远程模拟器中。
1897 1
鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转
|
存储 Ubuntu 前端开发
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(下)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
813 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(下)

热门文章

最新文章