ArkUI层叠布局(Stack容器)详解(附带实例)
层叠布局用于在屏幕上预留一块区域来显示组件中的元素,并且元素可以重叠。
层叠布局通过 Stack 容器组件实现位置的固定定位与层叠。容器中的子元素依次入栈,后添加的子元素会覆盖前一个子元素,同时可以设置各子元素的显示位置。
层叠布局具有较强的页面层叠和位置定位能力,常用于广告、卡片层叠等场景。如下图所示,Stack是容器组件,容器内的子元素的顺序为 Item1->Item2->Item3。

图 1 层叠布局
在层叠布局中,子元素被约束在 Stack 容器组件下,默认进行居中堆叠。当然,我们也可以自定义子元素的样式和排列。示例代码如下:

图 2 层叠布局显示效果

图 3 层叠布局中子组件对齐方式
示例代码如下:

图 4 层叠布局中子元素对齐方式显示效果
在层叠布局中,如果后面子元素尺寸大于前面子元素尺寸,则前面子元素完全隐藏。示例代码如下:

图 5 层叠布局中无z序控制的显示效果
显然第一个列容器组件元素完全覆盖了第二个列容器组件元素,第三个列容器组件完全覆盖了第二个列容器组件,最终仅显示最上层的第三个列容器组件。
在图 5 中,最后的 Stack 子元素 3 的尺寸大于前面的所有子元素,所以前面两个元素被完全隐藏。改变 Stack 子元素 1 和 Stack 子元素 2 的 zIndex 属性后,可以将它们展示出来。示例代码如下:

图 6 层叠布局中z序控制的显示效果
层叠布局通过 Stack 容器组件实现位置的固定定位与层叠。容器中的子元素依次入栈,后添加的子元素会覆盖前一个子元素,同时可以设置各子元素的显示位置。
层叠布局具有较强的页面层叠和位置定位能力,常用于广告、卡片层叠等场景。如下图所示,Stack是容器组件,容器内的子元素的顺序为 Item1->Item2->Item3。

图 1 层叠布局
在层叠布局中,子元素被约束在 Stack 容器组件下,默认进行居中堆叠。当然,我们也可以自定义子元素的样式和排列。示例代码如下:
// 使用 Record 设置外边距
let MTop: Record<string, number> = { 'top': 50 }
@Entry
@Component
struct StackExample {
build() {
// 列容器组件
Column() {
// 层叠布局
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)
// 通过 Record 实例设置外边距
.margin(MTop)
}
}
}
显示效果如下图所示:
图 2 层叠布局显示效果
对齐方式
Stack 组件通过 alignContent 参数实现位置的相对移动,如下图所示,支持 9 种对齐方式。
图 3 层叠布局中子组件对齐方式
示例代码如下:
@Entry
@Component
struct StackExample {
build() {
// 层叠布局,通过alignContent属性设置子组件对齐方式为左上角对齐
Stack({ alignContent: Alignment.TopStart }) {
// 文本显示组件,先放的组件处于最底层
Text('Stack').width('90%').height('100%').backgroundColor('#e1dede')
.align(Alignment.BottomEnd)
// 文本显示组件,位于上一个元素的上一层
Text('Item 1').width('70%').height('80%').backgroundColor(0xd2cab3)
.align(Alignment.BottomEnd)
// 文本显示组件,位于上一个元素的上一层
Text('Item 2').width('50%').height('60%').backgroundColor(0xc1cbac)
.align(Alignment.BottomEnd)
}.width('100%').height(150).margin({ top: 5 })
}
}
显示效果如下图所示:
图 4 层叠布局中子元素对齐方式显示效果
Z序控制
在 Stack 容器中,兄弟组件显示层级关系可以通过 Z 序控制的 zIndex 属性进行设置。zIndex 值越大,显示的层级越高,即 zIndex 值大的组件会作为 zIndex 值小的组件的上一层。在层叠布局中,如果后面子元素尺寸大于前面子元素尺寸,则前面子元素完全隐藏。示例代码如下:
@Entry
@Component
struct StackExample {
build() {
// 层叠布局组件,设置子组件的对齐方式为左下角对齐
Stack({ alignContent: Alignment.BottomStart }) {
// 列容器组件,该组件按层叠布局的默认方式处于显示的最底层
Column() {
// 文本显示组件,文本对齐方式为右侧对齐
Text('Stack 子元素 1').textAlign(TextAlign.End).fontSize(20)
}.width(100).height(100).backgroundColor(0xffd306)
// 列容器组件,该组件按照层叠布局的默认方式处于上一个元素的上一层
Column() {
// 文本显示组件
Text('Stack 子元素 2').fontSize(20)
}.width(150).height(150).backgroundColor(Color.Pink)
// 列容器组件,该组件按照层叠布局的默认方式处于上一个元素的上一层
Column() {
// 文本显示组件
Text('Stack 子元素 3').fontSize(20)
}.width(200).height(200).backgroundColor(Color.Gray)
}.width(350).height(350).backgroundColor(0xe0e0e0)
}
}
显示效果如下图所示:
图 5 层叠布局中无z序控制的显示效果
显然第一个列容器组件元素完全覆盖了第二个列容器组件元素,第三个列容器组件完全覆盖了第二个列容器组件,最终仅显示最上层的第三个列容器组件。
在图 5 中,最后的 Stack 子元素 3 的尺寸大于前面的所有子元素,所以前面两个元素被完全隐藏。改变 Stack 子元素 1 和 Stack 子元素 2 的 zIndex 属性后,可以将它们展示出来。示例代码如下:
@Entry
@Component
struct StackExample {
build() {
// 层叠布局组件,设置子组件的对齐方式为左下角对齐
Stack({ alignContent: Alignment.BottomStart }) {
// 列容器组件,默认情况下处于层叠布局的最底层
Column() {
Text('Stack 子元素 1').fontSize(20)
}.width(100).height(100).backgroundColor(0xffd306)
// 设置 zIndex 值为 2
.zIndex(2)
// 列容器组件,默认情况下处于层叠布局的上一个组件的上一层
Column() {
Text('Stack 子元素 2').fontSize(20)
}.width(150).height(150).backgroundColor(Color.Pink)
// 设置 zIndex 值为 1,该值小于上一个元素的 zIndex 值,因此该组件处于上一个组件的下一层
.zIndex(1)
// 列容器组件,默认情况下处于层叠布局的上一个组件的上一层
Column() {
Text('Stack 子元素 3').fontSize(20)
}.width(200).height(200).backgroundColor(Color.Grey)
}.width(350).height(350).backgroundColor(0xe0e0e0)
}
}
显示效果如下图所示:
图 6 层叠布局中z序控制的显示效果
ICP备案:
公安联网备案: