• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 布局约束
2
3通过组件的宽高比和显示优先级约束组件显示效果。
4
5>  **说明:**
6>
7>  从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## aspectRatio
10
11aspectRatio(value: number)
12
13指定当前组件的宽高比。
14
15**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
16
17**系统能力:** SystemCapability.ArkUI.ArkUI.Full
18
19**参数:**
20
21| 参数名 | 类型   | 必填 | 说明                                                         |
22| ------ | ------ | ---- | ------------------------------------------------------------ |
23| value  | number | 是   | 指定当前组件的宽高比,aspectRatio = width/height。<br/>API version 9及以前,默认值为:1.0。<br/>API version 10:无默认值。<br/>**说明:**<br/>该属性在不设置值或者设置非法值时不生效。<br/>例如,Row只设置宽度且没有子组件,aspectRatio不设置值或者设置成负数时,此时Row高度为0。 |
24
25## displayPriority
26
27displayPriority(value: number)
28
29设置当前组件在布局容器中显示的优先级。
30
31**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
32
33**系统能力:** SystemCapability.ArkUI.ArkUI.Full
34
35**参数:**
36
37| 参数名 | 类型   | 必填 | 说明                                                         |
38| ------ | ------ | ---- | ------------------------------------------------------------ |
39| value  | number | 是   | 设置当前组件在布局容器中显示的优先级,当父容器空间不足时,低优先级的组件会被隐藏。<br/>小数点后的数字不作优先级区分,即区间为[x, x + 1)内的数字视为相同优先级。例如:1.0与1.9为同一优先级。<br/>**说明:** <br/>仅在Row/Column/Flex(单行)容器组件中生效。 |
40
41## pixelRound<sup>11+</sup>
42
43pixelRound(value: PixelRoundPolicy)
44
45指定当前组件的像素级取整对齐方式。
46
47**系统能力:** SystemCapability.ArkUI.ArkUI.Full
48
49**参数:**
50
51| 参数名 | 类型   | 必填 | 说明                                                         |
52| ------ | ------ | ---- | ------------------------------------------------------------ |
53| value | [PixelRoundPolicy](ts-types.md#pixelroundpolicy11) | 是 | 指定当前组件边界取整策略。<br/>**说明:**<br/>该属性用于因浮点数绘制产生视觉异常的场景。|
54
55## 示例
56
57### 示例1
58
59```ts
60// xxx.ets
61@Entry
62@Component
63struct AspectRatioExample {
64  private children: string[] = ['1', '2', '3', '4', '5', '6']
65
66  build() {
67    Column({ space: 20 }) {
68      Text('using container: row').fontSize(14).fontColor(0xCCCCCC).width('100%')
69      Row({ space: 10 }) {
70        ForEach(this.children, (item:string) => {
71          // 组件宽度 = 组件高度*1.5 = 90
72          Text(item)
73            .backgroundColor(0xbbb2cb)
74            .fontSize(20)
75            .aspectRatio(1.5)
76            .height(60)
77          // 组件高度 = 组件宽度/1.5 = 60/1.5 = 40
78          Text(item)
79            .backgroundColor(0xbbb2cb)
80            .fontSize(20)
81            .aspectRatio(1.5)
82            .width(60)
83        }, (item:string) => item)
84      }
85      .size({ width: "100%", height: 100 })
86      .backgroundColor(0xd2cab3)
87      .clip(true)
88
89      // grid子元素width/height=3/2
90      Text('using container: grid').fontSize(14).fontColor(0xCCCCCC).width('100%')
91      Grid() {
92        ForEach(this.children, (item:string) => {
93          GridItem() {
94            Text(item)
95              .backgroundColor(0xbbb2cb)
96              .fontSize(40)
97              .width('100%')
98              .aspectRatio(1.5)
99          }
100        }, (item:string) => item)
101      }
102      .columnsTemplate('1fr 1fr 1fr')
103      .columnsGap(10)
104      .rowsGap(10)
105      .size({ width: "100%", height: 165 })
106      .backgroundColor(0xd2cab3)
107    }.padding(10)
108  }
109}
110```
111
112**图1** 竖屏显示<br>
113![zh-cn_image_0000001219744205](figures/zh-cn_image_0000001219744205.PNG)
114
115**图2** 横屏显示<br>
116![zh-cn_image_0000001174264382](figures/zh-cn_image_0000001174264382.PNG)
117
118### 示例2
119
120```ts
121class ContainerInfo {
122  label: string = '';
123  size: string = '';
124}
125
126class ChildInfo {
127  text: string = '';
128  priority: number = 0;
129}
130
131@Entry
132@Component
133struct DisplayPriorityExample {
134  // 显示容器大小
135  private container: ContainerInfo[] = [
136    { label: 'Big container', size: '90%' },
137    { label: 'Middle container', size: '50%' },
138    { label: 'Small container', size: '30%' }
139  ]
140  private children: ChildInfo[] = [
141    { text: '1\n(priority:2)', priority: 2 },
142    { text: '2\n(priority:1)', priority: 1 },
143    { text: '3\n(priority:3)', priority: 3 },
144    { text: '4\n(priority:1)', priority: 1 },
145    { text: '5\n(priority:2)', priority: 2 }
146  ]
147  @State currentIndex: number = 0;
148
149  build() {
150    Column({ space: 10 }) {
151      // 切换父级容器大小
152      Button(this.container[this.currentIndex].label).backgroundColor(0x317aff)
153        .onClick(() => {
154          this.currentIndex = (this.currentIndex + 1) % this.container.length;
155        })
156      // 通过变量设置Flex父容器宽度
157      Flex({ justifyContent: FlexAlign.SpaceBetween }) {
158        ForEach(this.children, (item:ChildInfo) => {
159          // 使用displayPriority给子组件绑定显示优先级
160          Text(item.text)
161            .width(120)
162            .height(60)
163            .fontSize(24)
164            .textAlign(TextAlign.Center)
165            .backgroundColor(0xbbb2cb)
166            .displayPriority(item.priority)
167        }, (item:ChildInfo) => item.text)
168      }
169      .width(this.container[this.currentIndex].size)
170      .backgroundColor(0xd2cab3)
171    }.width("100%").margin({ top: 50 })
172  }
173}
174```
175
176横屏显示
177
178![zh-cn_image_0000001219662667](figures/zh-cn_image_0000001219662667.gif)
179
180### 示例3
181
182采用pixelRound指导布局。
183
184```ts
185@Entry
186@Component
187struct PixelRoundExample {
188  build() {
189    Column() {
190      Row() {
191        Row() {
192        }
193        .width('100%')
194        .height('100%')
195        .backgroundColor(Color.Yellow)
196      }
197      .width('300.6px')
198      .height('300.6px')
199      .backgroundColor(Color.Red)
200      .position({x: '200.2px', y: '100.2px'})
201      .pixelRound({
202        start:PixelRoundCalcPolicy.FORCE_CEIL,
203        top:PixelRoundCalcPolicy.FORCE_CEIL
204       })
205    }
206    .width("100%")
207    .height('100%')
208    .backgroundColor('#ffe5e5e5')
209  }
210}
211```
212**图1** 采用pixelRound指导布局效果图
213
214![zh-cn_image_pixel_round_disable.png](figures/zh-cn_image_pixel_round_enable.png)
215
216**图2** 不用pixelRound指导布局效果图
217
218![zh-cn_image_pixel_round_disable.png](figures/zh-cn_image_pixel_round_disable.png)
219