1. 参与相对布局的容器内组件,不设置id的组件可以显示,但是不能被其他子组件作为锚点,相对布局容器会为其拼接id,此id的规律无法被应用感知
2. 容器id固定位 ‘__container__’ guideline(辅助线)和barrier(封装)
3. id不能与组件重复, 重复的话按照组件 > guideline > barrier
@Entry
@Component
struct Test04 {
@State message: string = 'Hello World';
build() {
Column(){
RelativeContainer() {
Row(){
}
.alignRules({
top:{anchor:'__container__',align:VerticalAlign.Top},
middle:{anchor:'__container__',align:HorizontalAlign.Center}
})
.id('row1')
.backgroundColor('#ff3334')
.width(100)
.height(100)
Row(){
}
.id('row2')
.width(100)
.height(100)
.alignRules({
center:{anchor:'__container__',align:VerticalAlign.Center},
right:{anchor:'row1',align:HorizontalAlign.Start}
})
.backgroundColor('#ffcc00')
Row(){
}
.id('row3')
.alignRules({
top:{anchor:'row1',align:VerticalAlign.Bottom},
left:{anchor:'row1',align:HorizontalAlign.End},
right:{anchor:'__container__',align:HorizontalAlign.End},
bottom:{anchor:'row2',align:VerticalAlign.Bottom}
})
.backgroundColor('#ff9a66')
Row(){
}
.alignRules({
top:{anchor:'row3',align:VerticalAlign.Bottom},
left:{anchor:'row2',align:HorizontalAlign.End},
right:{anchor:'row3',align:HorizontalAlign.Start},
bottom:{anchor:'__container__',align:VerticalAlign.Bottom}
})
.backgroundColor('#ff66ff')
Image($r('app.media.app_icon'))
.alignRules({
top:{anchor:'row1',align:VerticalAlign.Bottom},
left:{anchor:'row2',align:HorizontalAlign.End},
right:{anchor:'row3',align:HorizontalAlign.Start},
bottom:{anchor:'row4',align:VerticalAlign.Top}
})
}
.width(300)
.height(300)
.borderWidth(1)
}
.margin({top:30})
.height('100%')
.width('100%')
}
}
父组件RelativeContainer的宽高设置为auto
由于父组件的长宽由子组件撑开,锚点设置尽量不用父组件
样例
RelativeContainer(){
Row(){}.width(100).height(100)
.id('row1')
.backgroundColor(Color.Red)
Row(){}.width(100).height(100)
.backgroundColor(Color.Blue)
.alignRules({
left:{ anchor:'row1', align:HorizontalAlign.End },
top: { anchor:'row1', align:VerticalAlign.Bottom }
})
.id('row2')
Row(){}.width(100).height(100)
.alignRules({
left: { anchor: 'row1', align:HorizontalAlign.Start },
top: { anchor: 'row2', align:VerticalAlign.Bottom }
})
.backgroundColor(Color.Green)
}
.width('auto')
.height('auto')
.border({
width:1
})
样例
RelativeContainer(){
Row(){}.width(100).height(100)
.backgroundColor(Color.Red)
.id('row1')
.alignRules({
left: { anchor: '__container__', align: HorizontalAlign.Start },
right: { anchor: '__container__', align:HorizontalAlign.End },
bottom:{ anchor: '__container__', align:VerticalAlign.Bottom },
top: { anchor: '__container__', align:VerticalAlign.Top },
bias: { vertical:0,horizontal:0.5 }
})
}
.width(300)
.height(300)
.border({
width:1
})
bias:{vertical: 0, horizontal: 0.5}
// 垂直方向上偏移0,水平方向上偏移
样例
RelativeContainer(){
Row(){}.width(100).height(100)
.backgroundColor(Color.Red)
.id('row1')
.alignRules({
left: { anchor: 'guideLine1', align: HorizontalAlign.Start },
top: { anchor: 'guideLine2', align:VerticalAlign.Top }
})
}
.guideLine([
{
id:'guideLine1',
direction:Axis.Vertical, //距离垂直轴方向的距离
position:{
start: 50
}
},
{
id:'guideLine2',
direction:Axis.Horizontal, //距离水平轴方向的距离
position:{
start: 50
}
}
])
.width(300)
.height(300)
.border({
width:1
})
样例
RelativeContainer(){
Row(){}.width(100).height(100)
.backgroundColor(Color.Red)
.id('row1')
Row(){}.width(100).height(100)
.alignRules({
left: { anchor:'row1', align:HorizontalAlign.End },
top: { anchor: 'row1', align: VerticalAlign.Bottom }
})
.id('row2')
.backgroundColor(Color.Green)
Row().width(100).height(100)
.alignRules({
left: { anchor:'row1', align:HorizontalAlign.End },
top: { anchor: 'row2', align:VerticalAlign.Bottom }
})
.backgroundColor(Color.Yellow)
.id('row3')
Row().width(100).height(100)
.alignRules({
top: { anchor: 'barrier1', align:VerticalAlign.Bottom },
left: { anchor: 'barrier2', align:HorizontalAlign.End }
})
.backgroundColor(Color.Pink)
}
.width(300)
.height(500)
.border({
width:1
})
.barrier([
{
id: 'barrier1',
direction: BarrierDirection.BOTTOM, // 该矩形的底边
referencedId:['row1','row2','row3'] // 将row1,row2,row3封装在一个矩形中
},
{
id: 'barrier2',
direction: BarrierDirection.RIGHT, // 该矩形的右边
referencedId:['row1','row2']
}
])