• openharmony容器组件之Flex


    Flex:弹性布局容器

    Flex(options?: { direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign })
    direction:子组件在Flex容器上排列的方向,默认:FlexDirection.Row
        Row:主轴与行方向一致作为布局模式。
        RowReverse:与Row方向相反方向进行布局。
        Column:主轴与列方向一致作为布局模式。
        ColumnReverse:与Column相反方向进行布局。
    wrap:Flex容器是单行/列还是多行/列排列,默认:FlexWrap.NoWrap
        NoWrap:Flex容器的元素单行/列布局,子项允许超出容器。
        Wrap:Flex容器的元素多行/列排布,子项允许超出容器。
        WrapReverse:Flex容器的元素反向多行/列排布,子项允许超出容器
    justifyContent:子组件在Flex容器主轴上的对齐格式,默认:FlexAlign.Start
        Start:元素在主轴方向首端对齐,第一个元素与行首对齐,同时后续的元素与前一个对齐。
        Center:元素在主轴方向中心对齐,第一个元素与行首的距离与最后一个元素与行尾距离相同。
        End:元素在主轴方向尾部对齐,  最后一个元素与行尾对齐,其他元素与后一个对齐。
        SpaceBetween:Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。第一个元素与行首对齐,最后一个元素与行尾对齐。
        SpaceAround:Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。第一个元素到行首的距离和最后一个元素到行尾的距离是相邻元素之间距离的一半。
        SpaceEvenly:Flex主轴方向元素等间距布局,相邻元素之间的间距、第一个元素与行首的间距、最后一个元素到行尾的间距都完全一样。
    alignItems:子组件在Flex容器交叉轴上的对齐格式,默认:ItemAlign.Stretch
    alignContent:交叉轴中有额外的空间时,多行内容的对齐方式。仅在wrap为Wrap或WrapReverse下生效,默认:FlexAlign.Start

    direction&wrap

    效果如图:

    代码:

    1. @Entry
    2. @Component
    3. struct FlexT {
    4. build() {
    5. Column() {
    6. Column({ space: 5 }) {
    7. Text('direction:Row').fontSize(9).fontColor(0x000000).width('90%')
    8. //横向布局
    9. Flex({ direction: FlexDirection.Row }) {
    10. Text('1').width('20%').height(30).backgroundColor(0xF5DEB3)
    11. Text('2').width('20%').height(30).backgroundColor(0xD2B48C)
    12. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    13. }
    14. .height(50)
    15. .width('90%')
    16. .padding(10)
    17. .backgroundColor(0xAFEEEE)
    18. Text('direction:RowReverse').fontSize(9).fontColor(0x000000).width('90%')
    19. //横向反向布局
    20. Flex({ direction: FlexDirection.RowReverse }) {
    21. Text('1').width('20%').height(30).backgroundColor(0xF5DEB3)
    22. Text('2').width('20%').height(30).backgroundColor(0xD2B48C)
    23. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    24. }
    25. .height(50)
    26. .width('90%')
    27. .padding(10)
    28. .backgroundColor(0xAFEEEE)
    29. }
    30. Text('direction:Column').fontSize(9).fontColor(0x000000).width('90%')
    31. //列布局
    32. Flex({ direction: FlexDirection.Column }) {
    33. Text('1').width('20%').height(30).backgroundColor(0xF5DEB3)
    34. Text('2').width('20%').height(30).backgroundColor(0xD2B48C)
    35. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    36. }
    37. .height(50)
    38. .width('90%')
    39. .padding(10)
    40. .backgroundColor(0xAFEEEE)
    41. Text('direction:ColumnReverse').fontSize(9).fontColor(0x000000).width('90%')
    42. //列反向布局
    43. Flex({ direction: FlexDirection.ColumnReverse }) {
    44. Text('1').width('20%').height(30).backgroundColor(0xF5DEB3)
    45. Text('2').width('20%').height(30).backgroundColor(0xD2B48C)
    46. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    47. }
    48. .height(50)
    49. .width('90%')
    50. .padding(10)
    51. .backgroundColor(0xAFEEEE)
    52. Text('NoWrap').fontSize(9).fontColor(0x000000).width('90%')
    53. //容器单行or列显示
    54. Flex({ wrap: FlexWrap.NoWrap }) {
    55. Text('1').width('40%').height(30).backgroundColor(0xF5DEB3)
    56. Text('2').width('40%').height(30).backgroundColor(0xD2B48C)
    57. Text('3').width('40%').height(30).backgroundColor(0xF5DEB3)
    58. }
    59. .height(50)
    60. .width('90%')
    61. .padding(10)
    62. .backgroundColor(0xAFEEEE)
    63. Text('Wrap').fontSize(9).fontColor(0x000000).width('90%')
    64. //容器多行or列显示
    65. Flex({ wrap: FlexWrap.Wrap }) {
    66. Text('1').width('40%').height(30).backgroundColor(0xF5DEB3)
    67. Text('2').width('40%').height(30).backgroundColor(0xD2B48C)
    68. Text('3').width('40%').height(30).backgroundColor(0xF5DEB3)
    69. }
    70. .height(50)
    71. .width('90%')
    72. .padding(10)
    73. .backgroundColor(0xAFEEEE)
    74. Text('WrapReverse').fontSize(9).fontColor(0x000000).width('90%')
    75. //容器反向多行or列显示
    76. Flex({ wrap: FlexWrap.WrapReverse }) {
    77. Text('1').width('40%').height(30).backgroundColor(0xF5DEB3)
    78. Text('2').width('40%').height(30).backgroundColor(0xD2B48C)
    79. Text('3').width('40%').height(30).backgroundColor(0xF5DEB3)
    80. }
    81. .height(50)
    82. .width('90%')
    83. .padding(10)
    84. .backgroundColor(0xAFEEEE)
    85. }
    86. .width('100%')
    87. .height('100%')
    88. }
    89. }

    justifyContent

    效果如图:

    代码:

    1. @Entry
    2. @Component
    3. struct FlexT {
    4. build() {
    5. Column() {
    6. Column({ space: 5 }) {
    7. Text('justifyContent:Start').fontSize(9).fontColor(0x000000).width('90%')
    8. //元素在主轴方向首端对齐, 第一个元素与行首对齐,同时后续的元素与前一个对齐。
    9. Flex({ justifyContent: FlexAlign.Start }) {
    10. Text('1').width('20%').height(50).backgroundColor(0xF5DEB3)
    11. Text('2').width('20%').height(50).backgroundColor(0xD2B48C)
    12. Text('3').width('20%').height(50).backgroundColor(0xF5DEB3)
    13. }.width('90%')
    14. .padding(10)
    15. .backgroundColor(0xAFEEEE)
    16. Text('justifyContent:Center').fontSize(9).fontColor(0x000000).width('90%')
    17. //元素在主轴方向中心对齐,第一个元素与行首的距离与最后一个元素与行尾距离相同。
    18. Flex({ justifyContent: FlexAlign.Center }) {
    19. Text('1').width('20%').height(50).backgroundColor(0xF5DEB3)
    20. Text('2').width('20%').height(50).backgroundColor(0xD2B48C)
    21. Text('3').width('20%').height(50).backgroundColor(0xF5DEB3)
    22. }.width('90%')
    23. .padding(10)
    24. .backgroundColor(0xAFEEEE)
    25. Text('justifyContent:End').fontSize(9).fontColor(0x000000).width('90%')
    26. //元素在主轴方向尾部对齐, 最后一个元素与行尾对齐,其他元素与后一个对齐。
    27. Flex({ justifyContent: FlexAlign.End }) {
    28. Text('1').width('20%').height(50).backgroundColor(0xF5DEB3)
    29. Text('2').width('20%').height(50).backgroundColor(0xD2B48C)
    30. Text('3').width('20%').height(50).backgroundColor(0xF5DEB3)
    31. }.width('90%')
    32. .padding(10)
    33. .backgroundColor(0xAFEEEE)
    34. Text('justifyContent:SpaceBetween ').fontSize(9).fontColor(0x000000).width('90%')
    35. //Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素与行首对齐,最后一个元素与行尾对齐
    36. Flex({ justifyContent: FlexAlign.SpaceBetween }) {
    37. Text('1').width('20%').height(50).backgroundColor(0xF5DEB3)
    38. Text('2').width('20%').height(50).backgroundColor(0xD2B48C)
    39. Text('3').width('20%').height(50).backgroundColor(0xF5DEB3)
    40. }.width('90%')
    41. .padding(10)
    42. .backgroundColor(0xAFEEEE)
    43. Text('justifyContent:SpaceAround').fontSize(9).fontColor(0x000000).width('90%')
    44. //Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素到行首的距离和最后一个元素到行尾的距离是相邻元素之间距离的一半
    45. Flex({ justifyContent: FlexAlign.SpaceAround }) {
    46. Text('1').width('20%').height(50).backgroundColor(0xF5DEB3)
    47. Text('2').width('20%').height(50).backgroundColor(0xD2B48C)
    48. Text('3').width('20%').height(50).backgroundColor(0xF5DEB3)
    49. }.width('90%')
    50. .padding(10)
    51. .backgroundColor(0xAFEEEE)
    52. Text('justifyContent:SpaceEvenly ').fontSize(9).fontColor(0x000000).width('90%')
    53. //Flex主轴方向元素等间距布局, 相邻元素之间的间距、第一个元素与行首的间距、最后一个元素到行尾的间距都完全一样
    54. Flex({ justifyContent: FlexAlign.SpaceEvenly }) {
    55. Text('1').width('20%').height(50).backgroundColor(0xF5DEB3)
    56. Text('2').width('20%').height(50).backgroundColor(0xD2B48C)
    57. Text('3').width('20%').height(50).backgroundColor(0xF5DEB3)
    58. }.width('90%')
    59. .padding(10)
    60. .backgroundColor(0xAFEEEE)
    61. }
    62. .width('100%')
    63. .height('100%')
    64. }
    65. }
    66. }

    alignItems

    效果如图:

    代码:

    1. @Entry
    2. @Component
    3. struct FlexT {
    4. build() {
    5. Column() {
    6. Column({ space: 5 }) {
    7. Text('alignItems:Auto').fontSize(9).fontColor(0x000000).width('90%')
    8. //子组件在Flex容器交叉轴上的对齐格式:默认配置
    9. Flex({ alignItems: ItemAlign.Auto }) {
    10. Text('1').width('20%').height(10).backgroundColor(0xF5DEB3)
    11. Text('2').width('20%').height(20).backgroundColor(0xD2B48C)
    12. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    13. }.width('90%')
    14. .padding(10)
    15. .backgroundColor(0xAFEEEE)
    16. Text('alignItems:Start ').fontSize(9).fontColor(0x000000).width('90%')
    17. //子组件在Flex容器交叉轴上的对齐格式:横轴方向头对齐
    18. Flex({ alignItems: ItemAlign.Start }) {
    19. Text('1').width('20%').height(10).backgroundColor(0xF5DEB3)
    20. Text('2').width('20%').height(20).backgroundColor(0xD2B48C)
    21. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    22. }.width('90%')
    23. .padding(10)
    24. .backgroundColor(0xAFEEEE)
    25. Text('alignItems:Center ').fontSize(9).fontColor(0x000000).width('90%')
    26. //子组件在Flex容器交叉轴上的对齐格式:横轴方向中间对齐
    27. Flex({ alignItems: ItemAlign.Center }) {
    28. Text('1').width('20%').height(10).backgroundColor(0xF5DEB3)
    29. Text('2').width('20%').height(20).backgroundColor(0xD2B48C)
    30. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    31. }.width('90%')
    32. .padding(10)
    33. .backgroundColor(0xAFEEEE)
    34. Text('alignItems:End ').fontSize(9).fontColor(0x000000).width('90%')
    35. //子组件在Flex容器交叉轴上的对齐格式:横轴方向底部对齐
    36. Flex({ alignItems: ItemAlign.End }) {
    37. Text('1').width('20%').height(10).backgroundColor(0xF5DEB3)
    38. Text('2').width('20%').height(20).backgroundColor(0xD2B48C)
    39. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    40. }.width('90%')
    41. .padding(10)
    42. .backgroundColor(0xAFEEEE)
    43. Text('alignItems:Stretch').fontSize(9).fontColor(0x000000).width('90%')
    44. //子组件在Flex容器交叉轴上的对齐格式:填充将跨轴拉伸,如果未设置维度,则为容器大小
    45. Flex({ alignItems: ItemAlign.Stretch }) {
    46. Text('1').width('20%').height(10).backgroundColor(0xF5DEB3)
    47. Text('2').width('20%').height(20).backgroundColor(0xD2B48C)
    48. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    49. }.width('90%')
    50. .padding(10)
    51. .backgroundColor(0xAFEEEE)
    52. Text('alignItems:Baseline').fontSize(9).fontColor(0x000000).width('90%')
    53. //子组件在Flex容器交叉轴上的对齐格式:横轴方向基准线对齐
    54. Flex({ alignItems: ItemAlign.Baseline }) {
    55. Text('1').width('20%').height(10).backgroundColor(0xF5DEB3)
    56. Text('2').width('20%').height(20).backgroundColor(0xD2B48C)
    57. Text('3').width('20%').height(30).backgroundColor(0xF5DEB3)
    58. }.width('90%')
    59. .padding(10)
    60. .backgroundColor(0xAFEEEE)
    61. }
    62. .width('100%')
    63. .height('100%')
    64. }
    65. }
    66. }

    alignContent

    效果如图:

    代码:

    1. @Entry
    2. @Component
    3. struct FlexT {
    4. build() {
    5. Column() {
    6. Column({ space: 5 }) {
    7. Text('alignContent:Start').fontSize(9).fontColor(0x000000).width('90%')
    8. //交叉轴中有额外的空间时,多行内容的对齐方式:顶端对其
    9. Flex({ wrap: FlexWrap.Wrap, alignContent: FlexAlign.Start }) {
    10. Text('1').width('40%').height(20).backgroundColor(0xF5DEB3)
    11. Text('2').width('40%').height(20).backgroundColor(0xD2B48C)
    12. Text('3').width('40%').height(20).backgroundColor(0xF5DEB3)
    13. }.width('90%').height(90)
    14. .padding(10)
    15. .backgroundColor(0xAFEEEE)
    16. Text('alignContent:Center').fontSize(9).fontColor(0x000000).width('90%')
    17. //交叉轴中有额外的空间时,多行内容的对齐方式:中间对其
    18. Flex({ wrap: FlexWrap.Wrap, alignContent: FlexAlign.Center }) {
    19. Text('1').width('40%').height(20).backgroundColor(0xF5DEB3)
    20. Text('2').width('40%').height(20).backgroundColor(0xD2B48C)
    21. Text('3').width('40%').height(20).backgroundColor(0xF5DEB3)
    22. }.width('90%').height(90)
    23. .padding(10)
    24. .backgroundColor(0xAFEEEE)
    25. Text('alignContent:End').fontSize(9).fontColor(0x000000).width('90%')
    26. //交叉轴中有额外的空间时,多行内容的对齐方式:底部对其
    27. Flex({ wrap: FlexWrap.Wrap, alignContent: FlexAlign.End }) {
    28. Text('1').width('40%').height(20).backgroundColor(0xF5DEB3)
    29. Text('2').width('40%').height(20).backgroundColor(0xD2B48C)
    30. Text('3').width('40%').height(20).backgroundColor(0xF5DEB3)
    31. }.width('90%').height(90)
    32. .padding(10)
    33. .backgroundColor(0xAFEEEE)
    34. Text('alignContent:SpaceBetween ').fontSize(9).fontColor(0x000000).width('90%')
    35. //交叉轴中有额外的空间时,多行内容的对齐方式:相邻元素之间的距离相同,第一个元素与行首对齐,最后一个元素与行尾对齐
    36. Flex({ wrap: FlexWrap.Wrap, alignContent: FlexAlign.SpaceBetween }) {
    37. Text('1').width('40%').height(20).backgroundColor(0xF5DEB3)
    38. Text('2').width('40%').height(20).backgroundColor(0xD2B48C)
    39. Text('3').width('40%').height(20).backgroundColor(0xF5DEB3)
    40. }.width('90%').height(90)
    41. .padding(10)
    42. .backgroundColor(0xAFEEEE)
    43. Text('alignContent:SpaceAround ').fontSize(9).fontColor(0x000000).width('90%')
    44. //交叉轴中有额外的空间时,多行内容的对齐方式:相邻元素之间的距离相同。相邻元素之间距离的一半作为,第一个元素和最后一个元素到行尾之间的距离
    45. Flex({ wrap: FlexWrap.Wrap, alignContent: FlexAlign.SpaceAround }) {
    46. Text('1').width('40%').height(20).backgroundColor(0xF5DEB3)
    47. Text('2').width('40%').height(20).backgroundColor(0xD2B48C)
    48. Text('3').width('40%').height(20).backgroundColor(0xF5DEB3)
    49. }.width('90%')
    50. .height(90)
    51. .padding(10)
    52. .backgroundColor(0xAFEEEE)
    53. Text('alignContent:SpaceEvenly').fontSize(9).fontColor(0x000000).width('90%')
    54. //交叉轴中有额外的空间时,多行内容的对齐方式:相邻元素之间的间距,第一个元素与行开头之间的间距,并且最后一个元素与行尾之间的间距相同
    55. Flex({ wrap: FlexWrap.Wrap, alignContent: FlexAlign.SpaceEvenly }) {
    56. Text('1').width('40%').height(20).backgroundColor(0xF5DEB3)
    57. Text('2').width('40%').height(20).backgroundColor(0xD2B48C)
    58. Text('3').width('40%').height(20).backgroundColor(0xF5DEB3)
    59. }.width('90%').height(90)
    60. .padding(10)
    61. .backgroundColor(0xAFEEEE)
    62. }
    63. .width('100%')
    64. .height('100%')
    65. }
    66. }
    67. }

  • 相关阅读:
    网络运维与网络安全 学习笔记2023.11.21
    如何使用vim粘贴鼠标复制的内容
    使用TensorRT 和 Triton 在Jetson NX上的模型部署
    反渗透,sql注入漏洞扫描工具
    飞行态势知识图谱及其问答系统的构建方法
    【PHP代码审计】——开启你的代码审计生涯
    运行vue,浏览器出错
    一篇文章讲清Servlet原理
    《致新来的你》
    记:lora及lorawan的一些概念话
  • 原文地址:https://blog.csdn.net/lplj717/article/details/126228343