布局约束

2024-01-22 12:31 更新

通过组件的宽高比和显示优先级约束组件显示效果。

说明

从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

属性

名称

参数说明

描述

aspectRatio

number

指定当前组件的宽高比,aspectRatio = width/height。

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

displayPriority

number

设置当前组件在布局容器中显示的优先级,当父容器空间不足时,低优先级的组件会被隐藏。

小数点后的数字不作优先级区分,即区间为[x, x + 1)内的数字视为相同优先级。例如:1.0与1.9为同一优先级。

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

说明:

仅在Row/Column/Flex(单行)容器组件中生效。

示例

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct AspectRatioExample {
  5. private children: string[] = ['1', '2', '3', '4', '5', '6']
  6. build() {
  7. Column({ space: 20 }) {
  8. Text('using container: row').fontSize(14).fontColor(0xCCCCCC).width('100%')
  9. Row({ space: 10 }) {
  10. ForEach(this.children, (item) => {
  11. // 组件宽度 = 组件高度*1.5 = 90
  12. Text(item)
  13. .backgroundColor(0xbbb2cb)
  14. .fontSize(20)
  15. .aspectRatio(1.5)
  16. .height(60)
  17. .textAlign(TextAlign.Center)
  18. // 组件高度 = 组件宽度/1.5 = 60/1.5 = 40
  19. Text(item)
  20. .backgroundColor(0xbbb2cb)
  21. .fontSize(20)
  22. .aspectRatio(1.5)
  23. .width(60)
  24. }, item => item)
  25. }
  26. .size({ width: "100%", height: 100 })
  27. .backgroundColor(0xd2cab3)
  28. .clip(true)
  29. // grid子元素width/height=3/2
  30. Text('using container: grid').fontSize(14).fontColor(0xCCCCCC).width('100%')
  31. Grid() {
  32. ForEach(this.children, (item) => {
  33. GridItem() {
  34. Text(item)
  35. .backgroundColor(0xbbb2cb)
  36. .fontSize(40)
  37. .width('100%')
  38. .aspectRatio(1.5)
  39. .textAlign(TextAlign.Center)
  40. }
  41. }, item => item)
  42. }
  43. .columnsTemplate('1fr 1fr 1fr')
  44. .columnsGap(10)
  45. .rowsGap(10)
  46. .size({ width: "100%", height: 165 })
  47. .backgroundColor(0xd2cab3)
  48. }.padding(10)
  49. }
  50. }

图1 竖屏显示

图2 横屏显示

  1. class ContainerInfo {
  2. label: string = '';
  3. size: string = '';
  4. }
  5. class ChildInfo {
  6. text: string = '';
  7. priority: number = 0;
  8. }
  9. @Entry
  10. @Component
  11. struct DisplayPriorityExample {
  12. // 显示容器大小
  13. private container: ContainerInfo[] = [
  14. { label: 'Big container', size: '90%' },
  15. { label: 'Middle container', size: '50%' },
  16. { label: 'Small container', size: '30%' }
  17. ]
  18. private children: ChildInfo[] = [
  19. { text: '1\n(priority:2)', priority: 2 },
  20. { text: '2\n(priority:1)', priority: 1 },
  21. { text: '3\n(priority:3)', priority: 3 },
  22. { text: '4\n(priority:1)', priority: 1 },
  23. { text: '5\n(priority:2)', priority: 2 }
  24. ]
  25. @State currentIndex: number = 0;
  26. build() {
  27. Column({ space: 10 }) {
  28. // 切换父级容器大小
  29. Button(this.container[this.currentIndex].label).backgroundColor(0x317aff)
  30. .onClick(() => {
  31. this.currentIndex = (this.currentIndex + 1) % this.container.length;
  32. })
  33. // 通过变量设置Flex父容器宽度
  34. Flex({ justifyContent: FlexAlign.SpaceBetween }) {
  35. ForEach(this.children, (item) => {
  36. // 使用displayPriority给子组件绑定显示优先级
  37. Text(item.text)
  38. .width(120)
  39. .height(60)
  40. .fontSize(24)
  41. .textAlign(TextAlign.Center)
  42. .backgroundColor(0xbbb2cb)
  43. .displayPriority(item.priority)
  44. }, item => item.text)
  45. }
  46. .width(this.container[this.currentIndex].size)
  47. .backgroundColor(0xd2cab3)
  48. }.width("100%").margin({ top: 50 })
  49. }
  50. }

横屏显示

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号