ArkUI 常用布局容器之相对布局(RelativeContainer)
一、 相对布局概述
RelativeContainer 为相对布局的容器组件,支持容器内部的子元素设置相对位置关系。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。
🔊 锚点:通过锚点设置当前元素基于哪个元素确定位置。
❗️注意:
- 必须为RelativeContainer及其子元素设置ID
- RelativeContainer的ID默认为__container__
- 子元素的ID通过id属性设置
- 未设置ID的子元素在RelativeContainer中不显示
二、相对布局的使用
子元素通过alignRules属性设置锚点。在水平方向上,可以设置left、middle、right的锚点;在竖直方向上,可以设置top、center、bottom的锚点。
🐹 1. 水平方向:left、middle、right的锚点对齐方式
- HorizontalAlign.Start:水平方向首端对齐
- HorizontalAlign.Center:水平方向中点对齐
- HorizontalAlign.End:水平方向尾部对齐
🐹 2. 竖直方向:top、center、bottom的锚点对齐方式
- VerticalAlign.Top:垂直方向顶部对齐
- VerticalAlign.Center:垂直方式中点对齐
- VerticalAlign.Bottom:垂直方向底部对齐
三、 子组件位置偏移量
🐹 1. offset
子组件经过锚点相对位置对齐后,位置可能还不是目标位置,此时可以通过offset属性设置位置偏移量进行微调。
❗️注意:偏移量的参考点是自身
🐹 2. bias
bias属性可以在子组件相对于锚点定位后,提供额外的偏移量,以微调其在容器中的位置。
🔊:在API版本11及以上,RelativeContainer支持Bias属性。虽然之前版本中使用offset属性,但建议使用Bias属性以获得更好的布局控制。
举个例子:在组件宽高有具体值(如80vp,20%,100px等)时,并且水平或垂直方向各自有两个锚点时,对应的水平或垂直Bias才会生效:
@Entry @Component struct Index { /** 构建函数 */ build() { RelativeContainer() { RelativeContainer() { /** 红色块 */ Text().backgroundColor(Color.Red).width(80).aspectRatio(1).id('text_1') /** 绿色块 */ Text() .backgroundColor(Color.Green) .width(80) .aspectRatio(1) .id('text_2') .alignRules({ right: { anchor: '__container__', align: HorizontalAlign.End } }) /** 橘色块 */ Text() .backgroundColor(Color.Orange) .width(80) .aspectRatio(1) .id('text_3') .alignRules({ center: { anchor: '__container__', align: VerticalAlign.Center } }) /** 蓝色块 */ Text() .id('test_1') .fontSize(30) .height(80) .width(80) .backgroundColor(Color.Blue) .fontWeight(FontWeight.Bold) .alignRules({ left: { anchor: 'text_1', align: HorizontalAlign.End }, right: { anchor: 'text_2', align: HorizontalAlign.Start }, top: { anchor: 'text_1', align: VerticalAlign.Top }, bottom: { anchor: 'text_3', align: VerticalAlign.Bottom }, bias: { horizontal: 0.5, vertical: 0.4 } }) } .width('100%') .height('100%') .margin({ top: 40 }) }.width('100%').height('100%') } }