文档管理中心

RelativeContainer

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

相对布局组件,用于复杂场景中元素对齐的布局。通过设置子组件的对齐规则,实现子组件相对于容器或其他子组件的对齐,适用于需要灵活布局、减少嵌套层级的复杂界面。

子组件可以通过设置alignRules来设置自身在相对容器中的对齐规则。

说明
  • 该组件从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
  • 在RelativeContainer组件中,不设置width、height时,对应属性布局表现与设置为100%相同。
  • 从API version 11开始,在RelativeContainer组件中,width、height设置"auto"表示自适应子组件。当width设置"auto"时,如果水平方向上子组件以容器作为锚点,则"auto"不生效(即视为不设置width),垂直方向上同理。
  • 从API version 20开始,在RelativeContainer组件中,width、height设置LayoutPolicy.wrapContent表示自适应子组件且被祖先节点尺寸约束,设置LayoutPolicy.fixAtIdealSize表示自适应子组件且不被祖先节点尺寸约束。当width设置wrapContent或fixAtIdealSize时,如果水平方向上子组件直接或间接以容器作为锚点,则容器在该方向上的尺寸不自适应该组件,垂直方向上同理。
  • RelativeContainer中子组件的margin不同于通用属性margin,指子组件到该方向上锚点的距离。例如,当alignRules设置了left锚点时,margin.left表示子组件到left锚点的距离。若alignRules未设置某个边界方向的锚点(如未设置left或right锚点),则该方向的margin不生效。

子组件

支持多个子组件。

接口

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

RelativeContainer()

相对布局组件,用于复杂场景中元素对齐的布局。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

属性

除支持通用属性外,还支持如下属性:

说明

RelativeContainer中子组件的margin属性有特殊生效条件,详见上方说明。

guideLine12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

guideLine(value: Array<GuideLineStyle>)

设置RelativeContainer容器内的辅助线,数组中每个元素代表一条辅助线。典型使用场景:子组件基于虚拟参考线对齐、创建可灵活调整的参考线定位、多个子组件基于同一基准线布局。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
value Array<GuideLineStyle> 是 RelativeContainer容器内的辅助线,定义guideLine的id、方向和位置,用于辅助定位子组件。

barrier12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

barrier(value: Array<BarrierStyle>)

设置RelativeContainer容器内的屏障,子组件可以以屏障为锚点进行对齐定位。数组中每个元素代表一条屏障。典型使用场景:避免子组件重叠、基于组件边缘创建虚拟边界、实现组件间自动间隔。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
value Array<BarrierStyle> 是 RelativeContainer容器内的屏障,用于定义屏障的id、方向和依赖组件,子组件可以以屏障为锚点进行对齐定位。

barrier12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

barrier(barrierStyle: Array<LocalizedBarrierStyle>)

设置RelativeContainer容器内的屏障,子组件可以以屏障为锚点进行对齐定位,支持定义镜像模式的屏障线。数组中每个元素代表一条屏障。典型使用场景:RTL语言布局适配、镜像界面设计、根据阅读方向自动调整屏障位置。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
barrierStyle Array<LocalizedBarrierStyle> 是 RelativeContainer容器内的屏障,支持定义镜像模式的屏障线。

GuideLineStyle12+对象说明

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

guideLine参数,用于定义一条guideLine的id、方向和位置,辅助子组件在RelativeContainer中进行定位和对齐。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 类型 只读 可选 说明
id string 否 否 guideLine的id,用于标识辅助线,子组件可通过此id引用该辅助线作为锚点。必须是唯一的并且不可与容器内组件重名。
direction Axis 否 否

指定guideLine的方向。Axis.Vertical表示垂直辅助线,仅能作为组件水平方向的锚点;Axis.Horizontal表示水平辅助线,仅能作为组件垂直方向的锚点。

默认值:Axis.Vertical

非法值:按默认值处理。

position GuideLinePosition 否 否

指定guideLine的位置。

当未声明或声明异常值(如undefined)时,guideLine的位置默认为start: 0。start和end两种声明方式选择一种即可。若同时声明,仅start生效。若容器的width被声明为"auto",则Axis.Vertical类型guideLine的位置只能使用start方式声明(不允许使用百分比);若容器的height被声明为"auto",则Axis.Horizontal类型guideLine的位置只能使用start方式声明(不允许使用百分比)。

默认值:

{

start: 0

}

非法值:按默认值处理。

GuideLinePosition12+对象说明

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

guideLine位置参数,用于定义guideLine的位置。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 类型 只读 可选 说明
start Dimension 否 是

guideLine距离容器左侧或者顶部的距离。单位:vp。

默认值:0。与end二选一,若同时声明则仅start生效。若容器的width被声明为"auto",则Axis.Vertical类型的guideLine只能使用start方式声明(不允许使用百分比);若容器的height被声明为"auto",则Axis.Horizontal类型的guideLine只能使用start方式声明(不允许使用百分比)。

end Dimension 否 是 guideLine距离容器右侧或者底部的距离。单位:vp。与start二选一,若同时声明则仅start生效。若容器的width被声明为"auto",则Axis.Vertical类型的guideLine不支持使用end方式声明;若容器的height被声明为"auto",则Axis.Horizontal类型的guideLine不支持使用end方式声明。

BarrierStyle12+对象说明

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

barrier参数,用于定义一条barrier的id、方向和生成时所依赖的组件,子组件可通过barrier的id引用屏障作为锚点进行对齐定位。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 类型 只读 可选 说明
id string 否 否 barrier的id,用于标识屏障,子组件可通过此id引用该屏障作为锚点。必须是唯一的并且不可与容器内组件重名。
direction BarrierDirection 否 否

指定barrier的方向。

水平屏障线(TOP/BOTTOM)仅能作为组件垂直方向锚点(top或bottom),用于水平方向锚点时位置视为0。垂直屏障线(LEFT/RIGHT)仅能作为组件水平方向锚点(left或right),用于垂直方向锚点时位置视为0。

默认值:BarrierDirection.LEFT

非法值:按默认值处理。

referencedId Array<string> 否 否 指定生成barrier所依赖的组件。将需要作为屏障基准的组件id放入数组,至少包含一个有效组件ID,不存在的ID会被忽略。barrier根据组件边界计算位置:LEFT取最左侧,RIGHT取最右侧,TOP取最上方,BOTTOM取最下方。

BarrierDirection12+枚举说明

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

定义屏障线的方向。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 值 说明
LEFT 0 屏障在其所有referencedId的最左侧。
RIGHT 1 屏障在其所有referencedId的最右侧。
TOP 2 屏障在其所有referencedId的最上方。
BOTTOM 3 屏障在其所有referencedId的最下方。

LocalizedBarrierStyle12+对象说明

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

barrier参数,用于定义一条支持镜像模式的barrier的id、方向和生成时所依赖的组件,子组件可通过barrier的id引用屏障作为锚点进行对齐定位。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 类型 只读 可选 说明
id string 否 否 barrier的id,用于标识屏障,子组件可通过此id引用该屏障作为锚点。必须是唯一的并且不可与容器内组件重名。
localizedDirection LocalizedBarrierDirection 否 否

指定barrier的方向。

水平屏障线(TOP/BOTTOM)仅能作为组件垂直方向锚点(top或bottom),用于水平方向锚点时位置视为0。垂直屏障线(START/END,支持LTR/RTL镜像)仅能作为组件水平方向锚点(start或end),用于垂直方向锚点时位置视为0。

默认值:LocalizedBarrierDirection.START

非法值:按默认值处理。

referencedId Array<string> 否 否 指定生成barrier所依赖的组件。将需要作为屏障基准的组件id放入数组,至少包含一个有效组件ID,不存在的ID会被忽略。支持镜像模式的屏障根据LTR/RTL模式下的实际位置计算屏障位置。

LocalizedBarrierDirection12+枚举说明

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

定义支持镜像模式的屏障线的方向。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 值 说明
START 0 屏障在其所有referencedId的起始侧,LTR模式时为最左侧,RTL模式时为最右侧。
END 1 屏障在其所有referencedId的结束侧,LTR模式时为最右侧,RTL模式时为最左侧。
TOP 2 屏障在其所有referencedId的最上方。
BOTTOM 3 屏障在其所有referencedId的最下方。

事件

支持通用事件。

示例

示例1(以容器和容器内组件作为锚点进行布局)

本示例通过alignRules接口实现了以容器和容器内组件作为锚点进行布局的功能。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(100)
  12. .height(100)
  13. .backgroundColor('#a3cf62')
  14. .alignRules({
  15. top: { anchor: "__container__", align: VerticalAlign.Top },
  16. left: { anchor: "__container__", align: HorizontalAlign.Start }
  17. })
  18. .id("row1")
  19. Row() {
  20. Text('row2')
  21. }
  22. .justifyContent(FlexAlign.Center)
  23. .width(100)
  24. .height(100)
  25. .backgroundColor('#00ae9d')
  26. .alignRules({
  27. top: { anchor: "__container__", align: VerticalAlign.Top },
  28. right: { anchor: "__container__", align: HorizontalAlign.End }
  29. })
  30. .id("row2")
  31. Row() {
  32. Text('row3')
  33. }
  34. .justifyContent(FlexAlign.Center)
  35. .height(100)
  36. .backgroundColor('#0a59f7')
  37. .alignRules({
  38. top: { anchor: "row1", align: VerticalAlign.Bottom },
  39. left: { anchor: "row1", align: HorizontalAlign.End },
  40. right: { anchor: "row2", align: HorizontalAlign.Start }
  41. })
  42. .id("row3")
  43. Row() {
  44. Text('row4')
  45. }.justifyContent(FlexAlign.Center)
  46. .backgroundColor('#2ca9e0')
  47. .alignRules({
  48. top: { anchor: "row3", align: VerticalAlign.Bottom },
  49. bottom: { anchor: "__container__", align: VerticalAlign.Bottom },
  50. left: { anchor: "__container__", align: HorizontalAlign.Start },
  51. right: { anchor: "row1", align: HorizontalAlign.End }
  52. })
  53. .id("row4")
  54. Row() {
  55. Text('row5')
  56. }.justifyContent(FlexAlign.Center)
  57. .backgroundColor('#30c9f7')
  58. .alignRules({
  59. top: { anchor: "row3", align: VerticalAlign.Bottom },
  60. bottom: { anchor: "__container__", align: VerticalAlign.Bottom },
  61. left: { anchor: "row2", align: HorizontalAlign.Start },
  62. right: { anchor: "__container__", align: HorizontalAlign.End }
  63. })
  64. .id("row5")
  65. }
  66. .width(300).height(300)
  67. .margin({ left: 50 })
  68. .border({ width: 2, color: "#6699FF" })
  69. }
  70. .height('100%')
  71. }
  72. }

示例2(子组件设置外边距)

本示例展示容器内子组件设置外边距的方法。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(100)
  12. .height(100)
  13. .backgroundColor('#a3cf62')
  14. .alignRules({
  15. top: { anchor: "__container__", align: VerticalAlign.Top },
  16. left: { anchor: "__container__", align: HorizontalAlign.Start }
  17. })
  18. .id("row1")
  19. .margin(10)
  20. Row() {
  21. Text('row2')
  22. }
  23. .justifyContent(FlexAlign.Center)
  24. .width(100)
  25. .height(100)
  26. .backgroundColor('#00ae9d')
  27. .alignRules({
  28. left: { anchor: "row1", align: HorizontalAlign.End },
  29. top: { anchor: "row1", align: VerticalAlign.Top }
  30. })
  31. .id("row2")
  32. Row() {
  33. Text('row3')
  34. }
  35. .justifyContent(FlexAlign.Center)
  36. .width(100)
  37. .height(100)
  38. .backgroundColor('#0a59f7')
  39. .alignRules({
  40. left: { anchor: "row1", align: HorizontalAlign.Start },
  41. top: { anchor: "row1", align: VerticalAlign.Bottom }
  42. })
  43. .id("row3")
  44. Row() {
  45. Text('row4')
  46. }
  47. .justifyContent(FlexAlign.Center)
  48. .width(100)
  49. .height(100)
  50. .backgroundColor('#2ca9e0')
  51. .alignRules({
  52. left: { anchor: "row3", align: HorizontalAlign.End },
  53. top: { anchor: "row2", align: VerticalAlign.Bottom }
  54. })
  55. .id("row4")
  56. .margin(10)
  57. }
  58. .width(300).height(300)
  59. .margin({ left: 50 })
  60. .border({ width: 2, color: "#6699FF" })
  61. }
  62. .height('100%')
  63. }
  64. }

示例3(设置容器大小自适应内容)

本示例展示了容器大小适应内容(声明width或height为"auto")的用法。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(100)
  12. .height(100)
  13. .backgroundColor('#a3cf62')
  14. .id("row1")
  15. Row() {
  16. Text('row2')
  17. }
  18. .justifyContent(FlexAlign.Center)
  19. .width(100)
  20. .height(100)
  21. .backgroundColor('#00ae9d')
  22. .alignRules({
  23. left: { anchor: "row1", align: HorizontalAlign.End },
  24. top: { anchor: "row1", align: VerticalAlign.Top }
  25. })
  26. .id("row2")
  27. Row() {
  28. Text('row3')
  29. }
  30. .justifyContent(FlexAlign.Center)
  31. .width(100)
  32. .height(100)
  33. .backgroundColor('#0a59f7')
  34. .alignRules({
  35. left: { anchor: "row1", align: HorizontalAlign.Start },
  36. top: { anchor: "row1", align: VerticalAlign.Bottom }
  37. })
  38. .id("row3")
  39. Row() {
  40. Text('row4')
  41. }
  42. .justifyContent(FlexAlign.Center)
  43. .width(100)
  44. .height(100)
  45. .backgroundColor('#2ca9e0')
  46. .alignRules({
  47. left: { anchor: "row3", align: HorizontalAlign.End },
  48. top: { anchor: "row2", align: VerticalAlign.Bottom }
  49. })
  50. .id("row4")
  51. }
  52. .width("auto").height("auto")
  53. .margin({ left: 50 })
  54. .border({ width: 2, color: "#6699FF" })
  55. }
  56. .height('100%')
  57. }
  58. }

示例4(设置偏移)

本示例通过bias实现了子组件的位置在垂直方向的两个锚点间偏移的效果。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row()
  8. .width(100)
  9. .height(100)
  10. .backgroundColor('#a3cf62')
  11. .alignRules({
  12. top: { anchor: "__container__", align: VerticalAlign.Top },
  13. bottom: { anchor: "__container__", align: VerticalAlign.Bottom },
  14. left: { anchor: "__container__", align: HorizontalAlign.Start },
  15. right: { anchor: "__container__", align: HorizontalAlign.End },
  16. bias: { vertical: 0.3 }
  17. })
  18. .id("row1")
  19. }
  20. .width(300).height(300)
  21. .margin({ left: 50 })
  22. .border({ width: 2, color: "#6699FF" })
  23. }
  24. .height('100%')
  25. }
  26. }

示例5(设置辅助线)

本示例展示了相对布局组件通过guideLine接口设置辅助线,子组件以辅助线为锚点的功能。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row()
  8. .width(100)
  9. .height(100)
  10. .backgroundColor('#a3cf62')
  11. .alignRules({
  12. left: { anchor: "guideline1", align: HorizontalAlign.End },
  13. top: { anchor: "guideline2", align: VerticalAlign.Top }
  14. })
  15. .id("row1")
  16. }
  17. .width(300)
  18. .height(300)
  19. .margin({ left: 50 })
  20. .border({ width: 2, color: "#6699FF" })
  21. .guideLine([{ id: "guideline1", direction: Axis.Vertical, position: { start: 50 } },
  22. { id: "guideline2", direction: Axis.Horizontal, position: { start: 50 } }])
  23. }
  24. .height('100%')
  25. }
  26. }

示例6(设置屏障)

本示例展示了相对布局组件通过barrier接口设置屏障,子组件以屏障为锚点的用法。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(100)
  12. .height(100)
  13. .backgroundColor('#a3cf62')
  14. .id("row1")
  15. Row() {
  16. Text('row2')
  17. }
  18. .justifyContent(FlexAlign.Center)
  19. .width(100)
  20. .height(100)
  21. .backgroundColor('#00ae9d')
  22. .alignRules({
  23. middle: { anchor: "row1", align: HorizontalAlign.End },
  24. top: { anchor: "row1", align: VerticalAlign.Bottom }
  25. })
  26. .id("row2")
  27. Row() {
  28. Text('row3')
  29. }
  30. .justifyContent(FlexAlign.Center)
  31. .width(100)
  32. .height(100)
  33. .backgroundColor('#0a59f7')
  34. .alignRules({
  35. left: { anchor: "barrier1", align: HorizontalAlign.End },
  36. top: { anchor: "row1", align: VerticalAlign.Top }
  37. })
  38. .id("row3")
  39. Row() {
  40. Text('row4')
  41. }
  42. .justifyContent(FlexAlign.Center)
  43. .width(50)
  44. .height(50)
  45. .backgroundColor('#2ca9e0')
  46. .alignRules({
  47. left: { anchor: "row1", align: HorizontalAlign.Start },
  48. top: { anchor: "barrier2", align: VerticalAlign.Bottom }
  49. })
  50. .id("row4")
  51. }
  52. .width(300)
  53. .height(300)
  54. .margin({ left: 50 })
  55. .border({ width: 2, color: "#6699FF" })
  56. .barrier([{ id: "barrier1", direction: BarrierDirection.RIGHT, referencedId: ["row1", "row2"] },
  57. { id: "barrier2", direction: BarrierDirection.BOTTOM, referencedId: ["row1", "row2"] }])
  58. }
  59. .height('100%')
  60. }
  61. }

示例7(设置链)

本示例通过chainMode接口从上至下分别实现了水平方向的SPREAD链、SPREAD_INSIDE链和PACKED链。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(80)
  12. .height(80)
  13. .backgroundColor('#a3cf62')
  14. .alignRules({
  15. left: { anchor: "__container__", align: HorizontalAlign.Start },
  16. right: { anchor: "row2", align: HorizontalAlign.Start },
  17. top: { anchor: "__container__", align: VerticalAlign.Top }
  18. })
  19. .id("row1")
  20. .chainMode(Axis.Horizontal, ChainStyle.SPREAD)
  21. Row() {
  22. Text('row2')
  23. }
  24. .justifyContent(FlexAlign.Center)
  25. .width(80)
  26. .height(80)
  27. .backgroundColor('#00ae9d')
  28. .alignRules({
  29. left: { anchor: "row1", align: HorizontalAlign.End },
  30. right: { anchor: "row3", align: HorizontalAlign.Start },
  31. top: { anchor: "row1", align: VerticalAlign.Top }
  32. })
  33. .id("row2")
  34. Row() {
  35. Text('row3')
  36. }
  37. .justifyContent(FlexAlign.Center)
  38. .width(80)
  39. .height(80)
  40. .backgroundColor('#0a59f7')
  41. .alignRules({
  42. left: { anchor: "row2", align: HorizontalAlign.End },
  43. right: { anchor: "__container__", align: HorizontalAlign.End },
  44. top: { anchor: "row1", align: VerticalAlign.Top }
  45. })
  46. .id("row3")
  47. Row() {
  48. Text('row4')
  49. }
  50. .justifyContent(FlexAlign.Center)
  51. .width(80)
  52. .height(80)
  53. .backgroundColor('#a3cf62')
  54. .alignRules({
  55. left: { anchor: "__container__", align: HorizontalAlign.Start },
  56. right: { anchor: "row5", align: HorizontalAlign.Start },
  57. center: { anchor: "__container__", align: VerticalAlign.Center }
  58. })
  59. .id("row4")
  60. .chainMode(Axis.Horizontal, ChainStyle.SPREAD_INSIDE)
  61. Row() {
  62. Text('row5')
  63. }
  64. .justifyContent(FlexAlign.Center)
  65. .width(80)
  66. .height(80)
  67. .backgroundColor('#00ae9d')
  68. .alignRules({
  69. left: { anchor: "row4", align: HorizontalAlign.End },
  70. right: { anchor: "row6", align: HorizontalAlign.Start },
  71. top: { anchor: "row4", align: VerticalAlign.Top }
  72. })
  73. .id("row5")
  74. Row() {
  75. Text('row6')
  76. }
  77. .justifyContent(FlexAlign.Center)
  78. .width(80)
  79. .height(80)
  80. .backgroundColor('#0a59f7')
  81. .alignRules({
  82. left: { anchor: "row5", align: HorizontalAlign.End },
  83. right: { anchor: "__container__", align: HorizontalAlign.End },
  84. top: { anchor: "row4", align: VerticalAlign.Top }
  85. })
  86. .id("row6")
  87. Row() {
  88. Text('row7')
  89. }
  90. .justifyContent(FlexAlign.Center)
  91. .width(80)
  92. .height(80)
  93. .backgroundColor('#a3cf62')
  94. .alignRules({
  95. left: { anchor: "__container__", align: HorizontalAlign.Start },
  96. right: { anchor: "row8", align: HorizontalAlign.Start },
  97. bottom: { anchor: "__container__", align: VerticalAlign.Bottom }
  98. })
  99. .id("row7")
  100. .chainMode(Axis.Horizontal, ChainStyle.PACKED)
  101. Row() {
  102. Text('row8')
  103. }
  104. .justifyContent(FlexAlign.Center)
  105. .width(80)
  106. .height(80)
  107. .backgroundColor('#00ae9d')
  108. .alignRules({
  109. left: { anchor: "row7", align: HorizontalAlign.End },
  110. right: { anchor: "row9", align: HorizontalAlign.Start },
  111. top: { anchor: "row7", align: VerticalAlign.Top }
  112. })
  113. .id("row8")
  114. Row() {
  115. Text('row9')
  116. }
  117. .justifyContent(FlexAlign.Center)
  118. .width(80)
  119. .height(80)
  120. .backgroundColor('#0a59f7')
  121. .alignRules({
  122. left: { anchor: "row8", align: HorizontalAlign.End },
  123. right: { anchor: "__container__", align: HorizontalAlign.End },
  124. top: { anchor: "row7", align: VerticalAlign.Top }
  125. })
  126. .id("row9")
  127. }
  128. .width(300).height(300)
  129. .margin({ left: 50 })
  130. .border({ width: 2, color: "#6699FF" })
  131. }
  132. .height('100%')
  133. }
  134. }

示例8(链中设置偏移)

本示例通过chainMode和bias接口实现了水平方向的带偏移的PACKED链。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(80)
  12. .height(80)
  13. .backgroundColor('#a3cf62')
  14. .alignRules({
  15. left: { anchor: "__container__", align: HorizontalAlign.Start },
  16. right: { anchor: "row2", align: HorizontalAlign.Start },
  17. center: { anchor: "__container__", align: VerticalAlign.Center },
  18. bias: { horizontal: 0 }
  19. })
  20. .id("row1")
  21. .chainMode(Axis.Horizontal, ChainStyle.PACKED)
  22. Row() {
  23. Text('row2')
  24. }
  25. .justifyContent(FlexAlign.Center)
  26. .width(80)
  27. .height(80)
  28. .backgroundColor('#00ae9d')
  29. .alignRules({
  30. left: { anchor: "row1", align: HorizontalAlign.End },
  31. right: { anchor: "row3", align: HorizontalAlign.Start },
  32. top: { anchor: "row1", align: VerticalAlign.Top }
  33. })
  34. .id("row2")
  35. Row() {
  36. Text('row3')
  37. }
  38. .justifyContent(FlexAlign.Center)
  39. .width(80)
  40. .height(80)
  41. .backgroundColor('#0a59f7')
  42. .alignRules({
  43. left: { anchor: "row2", align: HorizontalAlign.End },
  44. right: { anchor: "__container__", align: HorizontalAlign.End },
  45. top: { anchor: "row1", align: VerticalAlign.Top }
  46. })
  47. .id("row3")
  48. }
  49. .width(300).height(300)
  50. .margin({ left: 50 })
  51. .border({ width: 2, color: "#6699FF" })
  52. }
  53. .height('100%')
  54. }
  55. }

示例9(设置镜像模式)

本示例展示了在镜像模式(direction声明Direction.Rtl)下以屏障为锚点时使用LocalizedAlignRuleOptions和LocalizedBarrierDirection设置对齐方式的用法。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(100)
  12. .height(100)
  13. .backgroundColor('#a3cf62')
  14. .id("row1")
  15. Row() {
  16. Text('row2')
  17. }
  18. .justifyContent(FlexAlign.Center)
  19. .width(100)
  20. .height(100)
  21. .backgroundColor('#00ae9d')
  22. .alignRules({
  23. middle: { anchor: "row1", align: HorizontalAlign.End },
  24. top: { anchor: "row1", align: VerticalAlign.Bottom }
  25. })
  26. .id("row2")
  27. Row() {
  28. Text('row3')
  29. }
  30. .justifyContent(FlexAlign.Center)
  31. .width(100)
  32. .height(100)
  33. .backgroundColor('#0a59f7')
  34. .alignRules({
  35. start: { anchor: "barrier1", align: HorizontalAlign.End },
  36. top: { anchor: "row1", align: VerticalAlign.Top }
  37. })
  38. .id("row3")
  39. Row() {
  40. Text('row4')
  41. }
  42. .justifyContent(FlexAlign.Center)
  43. .width(50)
  44. .height(50)
  45. .backgroundColor('#2ca9e0')
  46. .alignRules({
  47. start: { anchor: "row1", align: HorizontalAlign.Start },
  48. top: { anchor: "barrier2", align: VerticalAlign.Bottom }
  49. })
  50. .id("row4")
  51. }
  52. .direction(Direction.Rtl)
  53. .width(300)
  54. .height(300)
  55. .margin({ left: 50 })
  56. .border({ width: 2, color: "#6699FF" })
  57. .barrier([{ id: "barrier1", localizedDirection: LocalizedBarrierDirection.END, referencedId: ["row1", "row2"] },
  58. { id: "barrier2", localizedDirection: LocalizedBarrierDirection.BOTTOM, referencedId: ["row1", "row2"] }])
  59. }
  60. .height('100%')
  61. }
  62. }

示例10(设置链中节点权重)

本示例展示了链中节点使用chainWeight设置尺寸权重的用法。

必须先通过alignRules设置子组件的链式对齐规则(确保组件在水平或垂直方向形成链),再通过chainMode设置链样式(如SPREAD、SPREAD_INSIDE、PACKED),chainWeight仅在链模式下生效。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row() {
  8. Text('row1')
  9. }
  10. .justifyContent(FlexAlign.Center)
  11. .width(80)
  12. .height(80)
  13. .backgroundColor('#a3cf62')
  14. .alignRules({
  15. left: { anchor: "__container__", align: HorizontalAlign.Start },
  16. right: { anchor: "row2", align: HorizontalAlign.Start },
  17. center: { anchor: "__container__", align: VerticalAlign.Center },
  18. })
  19. .id("row1")
  20. .chainMode(Axis.Horizontal, ChainStyle.PACKED)
  21. Row() {
  22. Text('row2')
  23. }
  24. .justifyContent(FlexAlign.Center)
  25. .width(80)
  26. .height(80)
  27. .backgroundColor('#00ae9d')
  28. .alignRules({
  29. left: { anchor: "row1", align: HorizontalAlign.End },
  30. right: { anchor: "row3", align: HorizontalAlign.Start },
  31. top: { anchor: "row1", align: VerticalAlign.Top }
  32. })
  33. .id("row2")
  34. .chainWeight({ horizontal: 1 })
  35. Row() {
  36. Text('row3')
  37. }
  38. .justifyContent(FlexAlign.Center)
  39. .width(80)
  40. .height(80)
  41. .backgroundColor('#0a59f7')
  42. .alignRules({
  43. left: { anchor: "row2", align: HorizontalAlign.End },
  44. right: { anchor: "__container__", align: HorizontalAlign.End },
  45. top: { anchor: "row1", align: VerticalAlign.Top }
  46. })
  47. .id("row3")
  48. .chainWeight({ horizontal: 2 })
  49. }
  50. .width(300).height(300)
  51. .margin({ left: 50 })
  52. .border({ width: 2, color: "#6699FF" })
  53. }
  54. .height('100%')
  55. }
  56. }

在 API参考 中进行搜索
请输入您想要搜索的关键词