当前位置:   article > 正文

鸿蒙开发-UI-布局-相对布局_鸿蒙左右对齐布局

鸿蒙左右对齐布局

鸿蒙开发-UI-布局

鸿蒙开发-UI-布局-线性布局

鸿蒙开发-UI-布局-层叠布局

鸿蒙开发-UI-布局-弹性布局


前言

上文详细学习常见布局方式-弹性布局,学习弹性布局容器主轴、交叉轴上子元素的顺序方式,同时也学习了弹性布局容器子元素自动伸缩机制,本文将学习相对布局相关知识。

一、基本概念

相对布局容器支持容器内子元素设置相对应的位置关系。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。

锚点:通过锚点设置当前元素基于哪个元素确定自身位置。

对齐方式:通过对齐方式,设置当前元素是基于锚点的上中下对齐,还是基于锚点的左中右对齐。

二、设置依赖

1.锚点设置

锚点设置是指设置子元素相对于父元素或兄弟元素的位置依赖关系。在水平方向上,可以设置left、middle、right的锚点。在竖直方向上,可以设置top、center、bottom的锚点。

锚点定义:相对布局容器以及其子元素设置ID,用于指定锚点信息。ID默认值:“__container__”,其余子元素的ID通过id属性设置。未设置ID的子元素在相对布局容器中不会显示

相对布局容器组件为锚点,__container__代表父容器的ID

  1. @Entry
  2. @Component
  3. struct RelativePage {
  4. build() {
  5. Row() {
  6. Column() {
  7. RelativeContainer() {
  8. Row()
  9. .alignRules({
  10. top: { anchor: '__container__', align: VerticalAlign.Top },
  11. left: { anchor: '__container__', align: HorizontalAlign.Start }
  12. })
  13. .id("row1")
  14. .backgroundColor(Color.Red)
  15. .width(100)
  16. .height(100)
  17. Row()
  18. .alignRules({
  19. top: { anchor: '__container__', align: VerticalAlign.Top },
  20. right: { anchor: '__container__', align: HorizontalAlign.End }
  21. })
  22. .id("row2")
  23. .backgroundColor(Color.Yellow)
  24. .width(100)
  25. .height(100)
  26. }
  27. .width(300).height(300)
  28. .margin({ left: 20 })
  29. .border({ width: 2, color: '#6699FF' })
  30. }
  31. .width('100%')
  32. }
  33. .height('100%')
  34. }
  35. }

以子元素为锚点

  1. @Entry
  2. @Component
  3. struct RelativePage {
  4. build() {
  5. Row() {
  6. Column() {
  7. RelativeContainer() {
  8. Row()
  9. .alignRules({
  10. top: { anchor: '__container__', align: VerticalAlign.Top },
  11. left: { anchor: '__container__', align: HorizontalAlign.Start }
  12. })
  13. .id("row1")
  14. .backgroundColor(Color.Red)
  15. .width(100)
  16. .height(100)
  17. Row()
  18. .alignRules({
  19. top: { anchor: 'row1', align: VerticalAlign.Bottom }
  20. })
  21. .id("row2")
  22. .backgroundColor(Color.Yellow)
  23. .width(100)
  24. .height(100)
  25. }
  26. .width(300).height(300)
  27. .margin({ left: 20 })
  28. .border({ width: 2, color: '#6699FF' })
  29. }
  30. .width('100%')
  31. }
  32. .height('100%')
  33. }
  34. }

2.设置相对于锚点的对齐位置

设置了锚点之后,可以通过align设置相对于锚点的对齐位置。

水平方向上,对齐位置可以设置为HorizontalAlign.Start、HorizontalAlign.Center、HorizontalAlign.End。

在竖直方向上,对齐位置可以设置为VerticalAlign.Top、VerticalAlign.Center、VerticalAlign.Bottom。

三、使用场景

相对布局内的子元素相对灵活,只要在RelativeContainer容器内,均可以通过alignRules进行相应的位置移动

  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row() {
  6. RelativeContainer() {
  7. Row()
  8. .width(100)
  9. .height(100)
  10. .backgroundColor('#FF3333')
  11. .alignRules({
  12. top: { anchor: '__container__', align: VerticalAlign.Top }, //以父容器为锚点,竖直方向顶头对齐
  13. middle: { anchor: '__container__', align: HorizontalAlign.Center } //以父容器为锚点,水平方向居中对齐
  14. })
  15. .id('row1') //设置锚点为row1
  16. Row() {
  17. Image($r('app.media.icon'))
  18. }
  19. .height(100).width(100)
  20. .alignRules({
  21. top: { anchor: 'row1', align: VerticalAlign.Bottom }, //以row1组件为锚点,竖直方向低端对齐
  22. left: { anchor: 'row1', align: HorizontalAlign.Start } //以row1组件为锚点,水平方向开头对齐
  23. })
  24. .id('row2') //设置锚点为row2
  25. Row()
  26. .width(100)
  27. .height(100)
  28. .backgroundColor('#FFCC00')
  29. .alignRules({
  30. top: { anchor: 'row2', align: VerticalAlign.Top }
  31. })
  32. .id('row3') //设置锚点为row3
  33. Row()
  34. .width(100)
  35. .height(100)
  36. .backgroundColor('#FF9966')
  37. .alignRules({
  38. top: { anchor: 'row2', align: VerticalAlign.Top },
  39. left: { anchor: 'row2', align: HorizontalAlign.End },
  40. })
  41. .id('row4') //设置锚点为row4
  42. Row()
  43. .width(100)
  44. .height(100)
  45. .backgroundColor('#FF66FF')
  46. .alignRules({
  47. top: { anchor: 'row2', align: VerticalAlign.Bottom },
  48. middle: { anchor: 'row2', align: HorizontalAlign.Center }
  49. })
  50. .id('row5') //设置锚点为row5
  51. }
  52. .width(300).height(300)
  53. .border({ width: 2, color: '#6699FF' })
  54. }
  55. .height('100%').margin({ left: 30 })
  56. }
  57. }

注:组件位置定位中 “top: { anchor: '__container__', align: VerticalAlign.Top }”, top指的是待定位的组件,属性值是个对象,对象指定的是锚点以及与锚定对应的位置。


总结

本文详细学习常见布局方式-相对布局,学习相对布局中锚点以及对齐方式的知识,下文将学习格栅布局的相关知识。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/225251
推荐阅读
相关标签
  

闽ICP备14008679号