#跟着若城学鸿蒙# 层叠布局容器(Stack)详解
·
层叠布局容器(Stack)详解
在 ArkUI 中,Stack 容器支持将多个子组件按照指定的对齐方式“叠放”在一起,后添加的组件覆盖在前面的组件之上。它非常适合实现卡片翻转、徽章叠加、遮罩层等场景。
一、Stack 的基本用法
interface StackInterface {
(options?: { alignContent?: Alignment }): StackAttribute;
}
- options.alignContent:控制子组件在 Stack 容器里的对齐方式,取值来自
Alignment枚举。
declare class StackAttribute extends CommonMethod<StackAttribute> {
alignContent(value: Alignment): StackAttribute;
}
二、Alignment 枚举
Alignment 定义了 9 种对子组件的定位方式:
| 值 | 对齐描述 |
|---|---|
| TopStart | 左上 |
| Top | 顶部水平居中 |
| TopEnd | 右上 |
| Start | 左侧垂直居中 |
| Center (默认) | 容器中心 |
| End | 右侧垂直居中 |
| BottomStart | 左下 |
| Bottom | 底部水平居中 |
| BottomEnd | 右下 |
三、示例代码
下面以一个固定大小的 Stack 演示九种对齐方式。四个 Text 组件依次叠放,最后的 Text('Text4') 完全覆盖最前面一层。
@Entry @Component
struct StackDemo {
build() {
// 改变这里的 alignContent 查看不同对齐效果:
const alignMode = Alignment.Center;
Stack({ alignContent: alignMode }) {
Text('Text1')
.width(200).height(180)
.backgroundColor('#aabbcc').textAlign(TextAlign.Center);
Text('Text2')
.width(130).height(100)
.backgroundColor('#bbccaa').textAlign(TextAlign.Center);
Text('Text3') // 不指定尺寸,内容包裹
.backgroundColor('#ccaabb').textAlign(TextAlign.Center);
Text('Text4')
.width(60).height(45)
.backgroundColor('#abcabc').textAlign(TextAlign.Center);
}
.width('100%')
.height(200)
.backgroundColor(Color.Pink)
.borderRadius(8)
.padding(10);
}
}
将
alignMode分别设为Alignment.TopStart、Alignment.Top、……、Alignment.BottomEnd,即可快速切换对齐位置。
四、使用建议与注意点
-
覆盖风险
- 由于后加入的子组件会覆盖在前一层之上,尺寸较小或透明度不够时可能完全遮住下面的内容。可通过
opacity、border、padding等样式微调显示层次。
- 由于后加入的子组件会覆盖在前一层之上,尺寸较小或透明度不够时可能完全遮住下面的内容。可通过
-
场景示例
- 徽章叠加:在头像右上角叠加“在线”小圆点。
- 卡片阴影:底层放置阴影投影,顶层放置卡片主体。
- 浮动按钮:在容器底部右侧对齐一个“+”号按钮。
-
配合动画
- 与
Framer Motion联动,可在不同对齐位置之间做平移动画,轻松实现元素弹出/折叠效果。
- 与
-
响应式布局
- Stack 内部子组件可使用百分比尺寸或
layoutWeight,在不同屏幕尺寸下依然保持对齐效果。
- Stack 内部子组件可使用百分比尺寸或
五、小结
Stack简单易用,只需一个alignContent即可定位所有子元素。- 避免过度叠加,以免出现遮挡不明确的情况。
- 与其他布局容器(如
Flex、Row/Column)结合使用,可构建复杂而灵活的界面。
掌握了 Stack,你就拥有了“层叠”与“覆盖”这项强大的布局能力,可在 ArkUI 中轻松实现各种视觉叠加效果。
更多推荐




所有评论(0)