ArkUI相对布局(RelativeContainer)
- 1. 相对布局概述
- 2. 相对布局的使用
- 3. 子组件位置偏移量
1. 相对布局概述
RelativeContainer
为相对布局的容器组件,支持容器内部的子元素设置相对位置关系。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。
锚点:通过锚点设置当前元素基于哪个元素确定位置。
- 必须为
RelativeContainer
及其子元素设置ID RelativeContainer
的ID默认为__container__
- 子元素的ID通过
id
属性设置 - 未设置ID的子元素在
RelativeContainer
中不显示
2. 相对布局的使用
子元素通过alignRules
属性设置锚点。在水平方向上,可以设置left、middle、right的锚点;在竖直方向上,可以设置top、center、bottom的锚点。
left、middle、right的锚点对齐方式:
- HorizontalAlign.Start:水平方向首端对齐
- HorizontalAlign.Center:水平方向中点对齐
- HorizontalAlign.End:水平方向尾部对齐
top、center、bottom的锚点对齐方式:
- VerticalAlign.Top:垂直方向顶部对齐
- VerticalAlign.Center:垂直方式中点对齐
- VerticalAlign.Bottom:垂直方向底部对齐
@Entry
@Component
struct RelativeLayout {
build() {
RelativeContainer() {
Button("左上角的按钮")
.id("btn1")
.alignRules({
// anchor:锚点的ID
// align:对齐方式
// 子组件的左边与父组件的水平方向首端对齐
left: {anchor: "__container__", align: HorizontalAlign.Start}
})
Button("右上角的按钮")
.id("btn2")
.alignRules({
// 子组件的右边与父组件的水平方向尾部对齐
right: {anchor: "__container__", align: HorizontalAlign.End}
})
Button("左下角的按钮")
.id("btn3")
.alignRules({
// 子组件的左边与父组件的水平方向首端对齐
left: {anchor: "__container__", align: HorizontalAlign.Start},
// 子组件的底部与父组件的垂直方向底部对齐
bottom: {anchor: "__container__", align: VerticalAlign.Bottom}
})
Button("右下角的按钮")
.id("btn4")
.alignRules({
// 子组件的右边与父组件的水平方向尾部对齐
right: {anchor: "__container__", align: HorizontalAlign.End},
// 子组件的底部与父组件的垂直方向底部对齐
bottom: {anchor: "__container__", align: VerticalAlign.Bottom}
})
}
.width("100%")
.height("100%")
}
}
3. 子组件位置偏移量
子组件经过锚点相对位置对齐后,位置可能还不是目标位置,此时可以通过offset
属性设置位置偏移量进行微调。
偏移量的参考点是自身
@Entry
@Component
struct RelativeLayout {
build() {
RelativeContainer() {
Button("左上角的按钮")
.id("btn1")
.alignRules({
// 子组件的左边与父组件的水平方向首端对齐
left: {anchor: "__container__", align: HorizontalAlign.Start}
})
// 设置偏移量,在x轴的偏移量和y轴的偏移量
.offset({
x: 10,
y: 10
})
Button("右上角的按钮")
.id("btn2")
.alignRules({
// 子组件的右边与父组件的水平方向尾部对齐
right: {anchor: "__container__", align: HorizontalAlign.End}
})
Button("左下角的按钮")
.id("btn3")
.alignRules({
// 子组件的左边与父组件的水平方向首端对齐
left: {anchor: "__container__", align: HorizontalAlign.Start},
// 子组件的底部与父组件的垂直方向底部对齐
bottom: {anchor: "__container__", align: VerticalAlign.Bottom}
})
Button("右下角的按钮")
.id("btn4")
.alignRules({
// 子组件的右边与父组件的水平方向尾部对齐
right: {anchor: "__container__", align: HorizontalAlign.End},
// 子组件的底部与父组件的垂直方向底部对齐
bottom: {anchor: "__container__", align: VerticalAlign.Bottom}
})
}
.width("100%")
.height("100%")
}
}