1、概述

叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。

层叠布局具有较强的页面层叠、位置定位能力,其使用场景有广告、卡片层叠效果等。

如下图,Stack作为容器,容器内的子元素(子组件)的顺序为Item1->Item2->Item3。

2、开发布局

Stack组件为容器组件,容器内可包含各种子组件。其中子组件默认进行居中堆叠。子元素被约束在Stack下,进行自己的样式定义以及排列

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

3、对齐方式

Stack组件通过alignContent参数实现位置的相对移动。如图2所示,支持九种对齐方式。

Stack容器内元素的对齐方式

4、Z轴控制

Stack容器中兄弟组件显示层级关系可以通过Z序控制的zIndex属性改变。zIndex值越大,显示层级越高,即zIndex值大的组件会覆盖在zIndex值小的组件上方。

在层叠布局中,如果后面子元素尺寸大于前面子元素尺寸,则前面子元素完全隐藏。

  1. Stack({ alignContent: Alignment.BottomStart }) {
  2. Column() {
  3. Text('Stack子元素1').textAlign(TextAlign.End).fontSize(20)
  4. }.width(100).height(100).backgroundColor(0xffd306)
  5. Column() {
  6. Text('Stack子元素2').fontSize(20)
  7. }.width(150).height(150).backgroundColor(Color.Pink)
  8. Column() {
  9. Text('Stack子元素3').fontSize(20)
  10. }.width(200).height(200).backgroundColor(Color.Grey)
  11. }.margin({ top: 100 }).width(350).height(350).backgroundColor(0xe0e0e0)

上图中,最后的子元素3的尺寸大于前面的所有子元素,所以,前面两个元素完全隐藏。改变子元素1,子元素2的zIndex属性后,可以将元素展示出来。

  1. Stack({ alignContent: Alignment.BottomStart }) {
  2. Column() {
  3. Text('Stack子元素1').fontSize(20)
  4. }.width(100).height(100).backgroundColor(0xffd306).zIndex(2)
  5. Column() {
  6. Text('Stack子元素2').fontSize(20)
  7. }.width(150).height(150).backgroundColor(Color.Pink).zIndex(1)
  8. Column() {
  9. Text('Stack子元素3').fontSize(20)
  10. }.width(200).height(200).backgroundColor(Color.Grey)
  11. }.margin({ top: 100 }).width(350).height(350).backgroundColor(0xe0e0e0)

5、demo

使用叠层布局,我们可以搭建一个简单的页面,页面最底部有个常驻的工具栏,主内容区域是用户正文。代码和示意图如下:

  1. @Entry
  2. @Component
  3. struct StackSample {
  4. private arr: string[] = ['APP1', 'APP2', 'APP3', 'APP4', 'APP5', 'APP6', 'APP7', 'APP8'];
  5. build() {
  6. Stack({ alignContent: Alignment.Bottom }) {
  7. Flex({ wrap: FlexWrap.Wrap }) {
  8. ForEach(this.arr, (item) => {
  9. Text(item)
  10. .width(100)
  11. .height(100)
  12. .fontSize(16)
  13. .margin(10)
  14. .textAlign(TextAlign.Center)
  15. .borderRadius(10)
  16. .backgroundColor(0xFFFFFF)
  17. }, item => item)
  18. }.width('100%').height('100%')
  19. Flex({ justifyContent: FlexAlign.SpaceAround, alignItems: ItemAlign.Center }) {
  20. Text('联系人').fontSize(16)
  21. Text('设置').fontSize(16)
  22. Text('短信').fontSize(16)
  23. }
  24. .width('50%')
  25. .height(50)
  26. .backgroundColor('#16302e2e')
  27. .margin({ bottom: 15 })
  28. .borderRadius(15)
  29. }.width('100%').height('100%').backgroundColor('#CFD0CF')
  30. }
  31. }

6、结语

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!点击下方链接关注公众号。

ArkTs布局入门03——层叠布局(Stack)的更多相关文章

  1. Flutter 布局类组件:层叠布局(Stack和Positioned)

    前言 层叠布局,即子组件可以根据距父容器四个角的位置来确定自身的位置.绝对定位运行子组件堆叠起来,即按照代码中声明的顺序. Flutter中使用Stack和Positioned这两个组件来配合实现绝对 ...

  2. 技术胖Flutter第三季-16Stack层叠布局

    16Stack层叠布局 在上面声明一个变量Stack里面包含两个元素,第一个 是CircleAvater第二个子对象是Container 效果 把文字房子啊中下的位置: 我们需要对齐属性 包含了x轴和 ...

  3. html响应式布局,css响应式布局,响应式布局入门

    html响应式布局,css响应式布局,响应式布局入门 >>>>>>>>>>>>>>>>>>& ...

  4. 前端入门5-CSS弹性布局flex

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 声明 本系列文章内容全部梳理自以下四个来源: <HTML5权威指南> <JavaScript权威指南> MD ...

  5. 【CSS】343- CSS Grid 网格布局入门

    CSS Grid(网格) 布局使我们能够比以往任何时候都可以更灵活构建和控制自定义网格.Grid(网格) 布局使我们能够将网页分成具有简单属性的行和列. 它还能使我们在不改变任何HTML的情况下,使用 ...

  6. Android教程-03 常见布局的总结

    常见的布局 视频建议采用超清模式观看, 欢迎点击订阅我的优酷 Android的图形用户界面是由多个View和ViewGroup构建出来的.View是通用的UI窗体小组件,比如按钮(Button)或者文 ...

  7. WEB入门.七 CSS布局模型

    学习内容 标准文档流 流动模型(flow model) 浮动模型(float model) CSS基本布局 能力目标 理解标准文档流 使用流动模型实现页面布局 使用浮动模型实现页面布局 掌握常用CSS ...

  8. elementUI 学习入门之 layout 布局

    layout 布局 通过基础的 24 分栏,可进行快速布局 基础布局 使用单一分栏创建基础的栅格布局, 通过 span 属性指定每栏的大小 <el-col :span="8" ...

  9. GTK入门学习:布局容器之固定布局

    前面我们学习的水平.垂直和表格布局容器,控件会跟着容器大小的变化进行自己主动适应.而固定布局容器里的控件则不会跟着变化( 则固定不变 ). 固定布局的创建: GtkWidget *gtk_fixed_ ...

  10. 小白入门篇:flex布局

    --前言 因为这个星期写一个小的项目用到flex布局和grid布局,虽然这两种布局都是兼容性都有问题,但是别急,我觉的以后肯定是会发展并且流行起来的,毕竟google大法好,而且这两个布局真的比一般的 ...

随机推荐

  1. DML—对表中的数据进行增删改

    一.添加数据 1.给指定列添加数据 insert into 表名(列名1,列名2,...) values(值1,值2...); 执行给指定列添加数据前: -- 给指定列添加数据 insert into ...

  2. 【赵渝强老师】大数据分析引擎:Presto

    一.什么是Presto? 背景知识:Hive的缺点和Presto的背景 Hive使用MapReduce作为底层计算框架,是专为批处理设计的.但随着数据越来越多,使用Hive进行一个简单的数据查询可能要 ...

  3. Js运算符(操作符)

    算数运算符 a = 1 + 1 // 2 a = 10 - 5 // 5 a = 10 / 5 // 2 a = 10 / 0 // js中除以0不会报错,结果是Infinity a = 2*2 // ...

  4. qemu的使用

    一.QEMU的运行模式 直接摘抄自己<揭秘家用路由器0day漏洞挖掘技术>,网上查了一下也没有找到令人满意的QEMU的使用说明,就采用这本书上的介绍.如果后期能够找到比较满意的QEMU的使 ...

  5. “技术沙龙”来袭,邀您一同探讨 Serverless 数据库技术最佳实践

    如今,随着数据库的上云趋势,企业用户对业务连续性的要求越来越高,基于Serverless架构下的数据库也应运而生. Serverless数据库技术可以满足客户在公有云计算环境下根据业务发展弹性扩展集群 ...

  6. 说一下tcp三次握手

    1. 客户端发送syn请求连接 : 2. 服务器检验syn,然后发送syn和ack确认连接: 3. 客户端接收ack和syn,然后发送ack建立连接 :

  7. 011 Python 的打印(花式变色打印)和注释(为什么加个#号就能注释)

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/18 21:29 # Filename:011 Python 的打印和注释 ...

  8. KubeSphere 社区双周报 | OpenFunction 发布 v1.1.1 | 2023.6.9-6.22

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  9. .NET使用OllamaSharp实现大模型推理对话的简单演示

      前提条件:请确保你本地已经安装了ollama以及有关本地离线模型.或者已有远程模型环境等.如果没有,请自行部署.如果需要帮助,可以文末获取联系方式咨询.由于部署离线大模型过于简单,在线资料也很多, ...

  10. 解决ros-melodic-desktop-full安装过程中未满足的依赖关系问题

    sudo apt install ros-melodic-desktop-full 正在读取软件包列表- 完成正在分析软件包的依赖关系树 正在读取状态信息- 完成 有一些软件包无法被安装.如果您用的是 ...