鸿蒙开发(六)布局概述

    迄今为止,我还没有正式提到布局的概念。但其实我之前的demo里面,已经默认使用到了一种布局,那就是线性布局(Row、Column),这也是DevEco创建项目默认页面里面默认采用的布局。那么本篇,带着大家一起学习下鸿蒙开发的布局,该篇仅仅是概述,更多的是说理论,后面会有专门的文章去进行布局开发实战。

目录

一、布局概述

二、线性布局

三、层叠布局

四、弹性布局

五、相对布局


鸿蒙系列上一篇

鸿蒙开发(五)鸿蒙UI开发概览-CSDN博客文章浏览阅读464次,点赞11次,收藏9次。从用户角度来讲,一个软件拥有好看的UI,那是锦上添花的事情。再精确的算法,再厉害的策略,最终都得通过UI展现给用户并且跟用户交互。那么,本篇一起学习下鸿蒙开发UI基础知识,认识下各种基本控件以及使用方式。https://blog.csdn.net/qq_21154101/article/details/135520456?spm=1001.2014.3001.5501

一、布局概述

    UI开发肯定不是控件的简单堆砌,如果没有采用合适的布局,那么app的UI效果会不那么好看,UI开发离不开布局。那么,布局的作用是什么呢?布局就是用来管理页面控件的大小和位置。ArkUI提供了8种布局(有点多):

布局

应用场景

线性布局(LinearLayout)

布局中的控件横向或纵向线性排列时使用此布局。

层叠布局(StackLayout)

布局中的控件需要有堆叠效果时使用此布局。

弹性布局(FlexLayout)

与线性布局类似,弹性布局默认能够使控件压缩或拉伸,在控件需要计算拉伸或压缩比例时优先使用此布局。

相对布局(RelativeLayout)

布局中的控件通过设置属性与布局或布局内其他控件位置对齐。

栅格布局(GridRow、GridCol)

栅格是多设备场景下通用的辅助定位工具,通过将空间分割为有规律的栅格。推荐手机、大屏、平板等不同设备,内容相同但布局不同时使用。

列表(List)

横向或纵向展示可滚动的信息。

网格(Grid)

推荐在需要按照固定比例或者均匀分配空间的布局场景下使用。

轮播(Swiper)

轮播组件通常用于实现广告轮播、图片预览、可滚动应用等。

    但其实这所谓的8种布局,也就前四种更像是布局,第五种栅格布局更像是一种多设备的适配方案。另外的三种则更像控件,没错,其实我想说的就是像是Android的RecyclerView,只是不同的表现形式。实际上,大部分开发场景下,这主流的四种布局足够了:

线性布局(LinearLayout)

层叠布局(StackLayout)

弹性布局(FlexLayout)

相对布局(RelativeLayout)

二、线性布局

    线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row和Column构建。线性布局最大的特点就是,布局中的控件横向(Column)或纵向(Row)线性排列。这个跟Android的线性布局是一样的,如下图所示:

    线性布局适合大部分的开发场景,比如登录/注册页面,列表页面等。其使用方法就是通过Colum()或Row(),如下示例代码:

Column({ space: 5 }) {
      Row() {
        Text('111')
      }
    }.width('100%').height('80%').justifyContent(FlexAlign.Center)

三、层叠布局

    层叠布局(StackLayout)用于层叠的显示组件中的元素,通过Stack容器构建。后面添加的元素会覆盖在前面添加的元素之上,可以通过调整大小实现遮挡或层叠的覆盖效果。这个在Android中也有,叫FrameLayout。如下图所示:

    层叠布局的使用场景主要有广告、卡片层叠效果等。其使用方法是通过Stack(),如下示例代码:

Stack({ }) {
  Column(){}
    .width('90%')
    .height('100%')
    .backgroundColor('#ff58b87c')
  Text('text')
    .width('60%')
    .height('60%')
    .backgroundColor('#ffc3f6aa')
  Button('button')
    .width('30%')
    .height('30%')
    .backgroundColor('#ff8ff3eb')
    .fontColor('#000')
  }.width('100%').height(150).margin({ top: 50 })

四、弹性布局

    弹性布局(FlexLayout)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。弹性布局最大的特点自然就是弹性、灵活。这个跟Android的约束布局,约束布局使用起来也是非常的灵活。如下图所示:

    弹性布局在开发场景中用例特别多,比如页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等等。其使用方法是通过Flex,如下示例代码:

Flex({ direction: FlexDirection.Row }) {
  Text('1').width('33%').height(50).backgroundColor(0xF5DEB3)
  Text('2').width('33%').height(50).backgroundColor(0xD2B48C)
  Text('3').width('33%').height(50).backgroundColor(0xF5DEB3)
}
.height(70)
.width('90%')
.padding(10)
.backgroundColor(0xAFEEEE)

五、相对布局

    相对布局,官方叫RelativeContainer,但我更喜欢称呼为RelativeLayout,容器中的控件通过设置属性与容器或容器内其他控件位置对齐。这个跟Android的相对布局也是对齐的,如下图所示:

    相对布局也是非常的灵活,以我之前在Android的开发经验,使用相对布局的开发者非常多,最大的特点其实就是减少了布局层级,使用方法如下: 

RelativeContainer() {
  Row()
    // 添加其他属性
    .alignRules({
      top: { anchor: '__container__', align: VerticalAlign.Top },
      left: { anchor: '__container__', align: HorizontalAlign.Start }
    })
    .id("row1")

  Row()
    ...
    .alignRules({
      top: { anchor: '__container__', align: VerticalAlign.Top },
      right: { anchor: '__container__', align: HorizontalAlign.End }
    })
    .id("row2")
}
...

    以上四种布局就是鸿蒙开发的主要布局,至于其他的,我前面也说了,我觉得更像是解决具体使用场景的方案(例如多设备适配、列表、网格等),而不太像是布局的概念。当然,我这种说法只是个人的观点。后面的文章,我们会主要针对这四种布局,去进行实战开发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】ipoib模块 - ipoib_send_rss函数

一、ipoib_send_rss函数定义 int ipoib_send_rss(struct net_device *dev, struct sk_buff *skb,struct ib_ah *address, u32 dqpn) {struct ipoib_dev_priv *priv ipoib_priv(dev);struct ipoib_tx_buf *tx_req;struct ipoib_send_ring *send_ring;u16 queue_index;int hlen…

Backtrader 文档学习-Indicators混合时间框架

Backtrader 文档学习-Indicators混合时间周期 1.不同时间周期 如果数据源在Cerebro引擎中具有不同的时间范围和不同的长度,指示器将会终止。 比如:data0是日线,data1是月线 。 pivotpoint btind.PivotPoint(self.data1) sellsignal self…

第11章 GUI Page500~504 步骤三十二:打开画板文件02

各个图元类新增GetTypeName_Static(),并将原来的GetTypeName()改为调用静态方法实现: 直线: 圆: 十字: 矩形: 文字: tool_4_save_load.hpp添加两行 tool_4_save_load.cpp增加: 增加…

利用python进行有限元分析(一)

【利用Python进行有限元分析】 https://www.bilibili.com/video/BV1VE411s7Yy/?share_sourcecopy_web&vd_source3c57d167735998da175fa3c99f9d0e20离散了位移场,使用能量原理,用动能和应变能和虚功原理来寻找一致的质量、刚度和节点力向量。 一致是…

机器人强化学习-双机械臂

概要 基于 robosuite 库,进行双臂机器人学习训练 环境测试 下面展示下分别控制两个机械手随机运动的画面: 双臂显示场景如下:双臂调用代码如下: import numpy as np import robosuite as suite import robomimic import rob…

集成腾讯Bugly使用步骤以及字符串的上传(IOS手把手)

一、集成Bugly 1.通过CocoaPods集成,在工程的Podfile里面添加以下代码: pod Bugly 保存并在终端cd进入你的项目路径,执行pod install,然后用后缀为.xcworkspace的文件打开工程。 2.在工程的AppDelegate.m文件导入头文件 #import "A…

MacMaster:一款功能强大的高级网络接口管理与监控工具

关于MacMaster MacMaster是一款功能强大的高级网络接口管理与监控工具,该工具专为网络安全研究人员打造,支持对各种不同系统网络接口的MAC地址进行管理。 MacMaster本质上是一个全面的命令行工具,该工具在设计之初就考虑到的简单性和功能性…

树形结构下拉框组件vue-treeselect的使用(安装、模糊匹配、单选、多选、延迟加载、异步搜索等)

一、基本使用流程 首先npm安装依赖 npm install riophae/vue-treeselect --save然后在需要使用的组件中引入 import Treeselect from riophae/vue-treeselect import riophae/vue-treeselect/dist/vue-treeselect.css声明组件 components: { Treeselect }使用 <treesele…

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展&#xff0c;对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等&#xff0c;有些还可以支持光盘和U盘的外接播放。中期阶段&#xff0c;也是当前主流的燃油车行车记录、多媒体、车联网的需求&#xff0c;对存储性…

【网站项目】基于ssm的青大校园预点餐系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

三层架构——工业控制领域简单理解

前言闲话 工业领域对好滴软件架构的需求不高&#xff0c;但不意味着可以用纯面向过程式编程解决问题&#xff0c;这样后期维护必将大乱。 曾经和一位从业30年的老电气工程师交流工业控制编程&#xff1a; 我问&#xff1a;为啥富士康这些大厂以前的机器都不联网&#xff1f;&…

自养买家号测评(补单)在亚马逊、lazada、速卖通等平台上需要注意什么?

在当今的电商环境中&#xff0c;许多卖家选择自己养号进行测评。然而&#xff0c;这种做法并非毫无风险。亚马逊、Lazada、eBay、Shopee、Wish、速卖通、沃尔玛、阿里国际、Mercari和Tik Tok等平台都存在封号的风险。特别是在每年的风险控制期内&#xff0c;新号被封的情况尤为…

Rectangle:圆角矩形、渐变矩形、随机颜色矩形

import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("Rectangle")//圆角Rectangle {id: rect1x: 120; y: 10width: 100; height: 200;border.color: "black"border.width: 3radius: 10}//渐变Rectangle {id: rect2x: 230; y: 10width: …

西门子WINCC常用C脚本1

1.置位&#xff0c;复位&#xff0c;取反 获取变量值&#xff1a;GetTagBit(可以是位也可以是字节&#xff0c;字&#xff0c;双字等具体字母不同) 设置变量值&#xff1a;SetTagBit 置位&#xff1a;SetTagBit&#xff08;"变量名",1&#xff09; 复位&#xff…

rbash环境变量提权

rbash为一个受限制的bash shell变体&#xff0c;限制用户在交互式环境中可使用的操作&#xff0c;以此提升系统安全性 可通过环境变量提权方式&#xff0c;越过此限制 export -p //查看环境变量 BASH_CMDS[a]/bin/sh;a //把/bin/sh给a /bin/bash export PATH$…

StackOverflow的架构

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 ​Stack Overflow 工程主管Roberta Arcoverde在最近接受 ​Scott Hanselman采访时透露了 Stack Overflow 架构的故事。他们每秒处理超过 6000 个请求&#xff0c…

如何利用在线网络靶场将安全提升至新水平

在 Standoff 365 的在线网络靶场中&#xff0c;任何公司都可以试验信息安全手段和企业网络设置&#xff0c;优化攻击检测、响应和事件调查的技能。 2023 年&#xff0c;我们不仅准许攻击者使用&#xff0c;也准许防御者使用。我们可以根据客户要求轻松部署 10 个细分行业中的任…

大创项目推荐 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的驾…

【不用找素材】ECS 游戏Demo制作教程(3) 1.17

一、生成墓碑 新建脚本如下&#xff1a; using Unity.Entities; using Unity.Mathematics;namespace ECSdemo {public struct GraveyardRandom : IComponentData{public Random Value;}}扩充GraveyardMono如下&#xff1a; using Unity.Entities; using Unity.Mathematics; …

代码随想录算法训练营day13|239.滑动窗口最大值、347.前K个高频元素

239. 滑动窗口最大值 347.前 K 个高频元素 239. 滑动窗口最大值 &#xff08;一刷至少需要理解思路&#xff09; 之前讲的都是栈的应用&#xff0c;这次该是队列的应用了。 本题算比较有难度的&#xff0c;需要自己去构造单调队列&#xff0c;建议先看视频来理解。 题目链接/文…