• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SideBarContainer
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @mayaolll-->
5<!--Designer: @jiangdayuan-->
6<!--Tester: @lxl007-->
7<!--Adviser: @HelloCrease-->
8
9提供侧边栏可以显示和隐藏的侧边栏容器,通过子组件定义侧边栏和内容区,第一个子组件表示侧边栏,第二个子组件表示内容区。
10
11>  **说明:**
12>
13>  该组件从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15
16## 子组件
17
18可以包含子组件。
19
20>  **说明:**
21>
22>  - 子组件类型:系统组件和自定义组件,不支持渲染控制类型([if/else](../../../ui/state-management/arkts-rendering-control-ifelse.md)、[ForEach](../../../ui/state-management/arkts-rendering-control-foreach.md)和[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md))。
23>  - 子组件个数:必须且仅包含2个子组件。
24>  - 子组件个数异常时:3个或以上子组件,显示第一个和第二个。1个子组件,显示侧边栏,内容区为空白。
25>  - SideBarContainer走焦时,先在内容区走焦,再在侧边栏走焦。
26
27## 接口
28
29SideBarContainer( type?: SideBarContainerType )
30
31创建侧边栏容器。
32
33**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37**参数:**
38
39| 参数名 | 类型 | 必填 | 说明 |
40| -------- | -------- | -------- | -------- |
41| type | [SideBarContainerType](#sidebarcontainertype枚举说明) | 否 | 设置侧边栏的显示类型。<br/>默认值:SideBarContainerType.Embed |
42
43## SideBarContainerType枚举说明
44
45容器内侧边栏样式枚举。
46
47**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
48
49**系统能力:** SystemCapability.ArkUI.ArkUI.Full
50
51| 名称 | 说明 |
52| -------- | -------- |
53| Embed | 侧边栏嵌入到组件内,和内容区并列显示。<br/>整体容器大小不变时,显示侧边栏会导致内容区缩小,隐藏侧边栏会扩大内容区。<br/>组件尺寸小于minContentWidth + minSideBarWidth,并且未设置showSideBar时,侧边栏自动隐藏。<br/>未设置minSideBarWidth或者minContentWidth采用未设置接口的默认值进行计算。<br/> 组件在自动隐藏后,如果通过点击控制按钮唤出侧边栏,则侧边栏悬浮在内容区上显示。|
54| Overlay | 侧边栏浮在内容区上面,不会影响内容区的大小。 |
55| AUTO<sup>10+</sup> | 组件尺寸大于等于minSideBarWidth+minContentWidth时,采用Embed模式显示。<br/>组件尺寸小于minSideBarWidth+minContentWidth时,采用Overlay模式显示。<br/>未设置minSideBarWidth或minContentWidth时,会使用未设置接口的默认值进行计算,若计算的值小于600vp,则使用600vp做为模式切换的断点值。|
56
57## 属性
58
59除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性:
60
61### showSideBar
62
63showSideBar(value: boolean)
64
65设置是否显示侧边栏。
66
67从API version 10开始,该属性支持[$$](../../../ui/state-management/arkts-two-way-sync.md)双向绑定变量。
68
69**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
70
71**系统能力:** SystemCapability.ArkUI.ArkUI.Full
72
73**参数:**
74
75| 参数名 | 类型    | 必填 | 说明                                                         |
76| ------ | ------- | ---- | ------------------------------------------------------------ |
77| value  | boolean | 是   | 是否显示侧边栏。<br/>true:显示侧边栏<br/>false:不显示侧边栏<br/>默认值:true |
78
79### controlButton
80
81controlButton(value: ButtonStyle)
82
83设置侧边栏控制按钮的属性。
84
85**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
86
87**系统能力:** SystemCapability.ArkUI.ArkUI.Full
88
89**参数:**
90
91| 参数名 | 类型                                | 必填 | 说明                   |
92| ------ | ----------------------------------- | ---- | ---------------------- |
93| value  | [ButtonStyle](#buttonstyle对象说明) | 是   | 侧边栏控制按钮的属性。 |
94
95### showControlButton
96
97showControlButton(value: boolean)
98
99设置是否显示控制按钮。
100
101**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
102
103**系统能力:** SystemCapability.ArkUI.ArkUI.Full
104
105**参数:**
106
107| 参数名 | 类型    | 必填 | 说明                                                         |
108| ------ | ------- | ---- | ------------------------------------------------------------ |
109| value  | boolean | 是   | 是否显示控制按钮。<br/>true:显示控制按钮<br/>false:不显示控制按钮<br/>默认值:true |
110
111> **说明:**
112>
113> 通过控制按钮切换侧边栏的显隐会触发侧边栏的显示/隐藏动画。
114
115### sideBarWidth
116
117sideBarWidth(value: number)
118
119设置侧边栏的宽度。设置为小于0的值时按默认值显示。受最小宽度和最大宽度限制,不在限制区域内取最近的点。
120
121从API version 18开始,该参数支持[!!](../../../ui/state-management/arkts-new-binding.md)双向绑定变量。
122
123**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
124
125**系统能力:** SystemCapability.ArkUI.ArkUI.Full
126
127**参数:**
128
129| 参数名 | 类型                                                         | 必填 | 说明                                                         |
130| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
131| value  | number | 是   | 侧边栏的宽度。<br/>默认值:240vp<br/>单位:vp<br/>取值范围:[0, +∞)<br/>**说明:** <br/>API version 9及以下版本默认值为200vp,API version 10的默认值为240vp。 |
132
133### sideBarWidth<sup>9+</sup>
134
135sideBarWidth(value: Length)
136
137设置侧边栏的宽度。设置为小于0的值时按默认值显示。受最小宽度和最大宽度限制,不在限制区域内取最近的点。与[sideBarWidth](#sidebarwidth)相比,value参数新增了对百分比字符串和其他[像素单位](ts-pixel-units.md)的支持。
138
139从API version 18开始,该参数支持[!!](../../../ui/state-management/arkts-new-binding.md)双向绑定变量。
140
141**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
142
143**系统能力:** SystemCapability.ArkUI.ArkUI.Full
144
145**参数:**
146
147| 参数名 | 类型                                                         | 必填 | 说明                                                         |
148| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
149| value  | [Length](ts-types.md#length) | 是   | 侧边栏的宽度。<br/>默认值:240vp<br/>单位:vp<br/>取值范围:[0, +∞)<br/>**说明:** <br/>API version 9的默认值为200vp,API version 10的默认值为240vp。 |
150
151### minSideBarWidth
152
153minSideBarWidth(value: number)
154
155设置侧边栏最小宽度。设置为小于0的值时按默认值显示。值不能超过侧边栏容器本身宽度,超过使用侧边栏容器本身宽度。
156
157minSideBarWidth优先于侧边栏子组件minWidth,minSideBarWidth未设置时默认值优先级高于侧边栏子组件minWidth。
158
159**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
160
161**系统能力:** SystemCapability.ArkUI.ArkUI.Full
162
163**参数:**
164
165| 参数名 | 类型                                                         | 必填 | 说明                                                         |
166| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
167| value  | number | 是   | 侧边栏最小宽度。<br/>默认值:API version 9及以下版本默认值为200vp,API version 10的默认值为240vp。<br/>取值范围:[0, +∞) |
168
169### minSideBarWidth<sup>9+</sup>
170
171minSideBarWidth(value: Length)
172
173设置侧边栏最小宽度。设置为小于0的值时按默认值显示。值不能超过侧边栏容器本身宽度,超过使用侧边栏容器本身宽度。与[minSideBarWidth](#minsidebarwidth)相比,value参数新增了对百分比字符串和其他[像素单位](ts-pixel-units.md)的支持。
174
175minSideBarWidth优先于侧边栏子组件minWidth,minSideBarWidth未设置时默认值优先级高于侧边栏子组件minWidth。
176
177**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
178
179**系统能力:** SystemCapability.ArkUI.ArkUI.Full
180
181**参数:**
182
183| 参数名 | 类型                                                         | 必填 | 说明                                                         |
184| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
185| value  | [Length](ts-types.md#length) | 是   | 侧边栏最小宽度。<br/>默认值:API version 9及以下版本默认值为200vp,API version 10的默认值为240vp。<br/>取值范围:[0, +∞) |
186
187### maxSideBarWidth
188
189maxSideBarWidth(value: number)
190
191设置侧边栏最大宽度。设置为小于0的值时按默认值显示。值不能超过侧边栏容器本身宽度,超过使用侧边栏容器本身宽度。
192
193maxSideBarWidth优先于侧边栏子组件maxWidth,maxSideBarWidth未设置时默认值优先级高于侧边栏子组件maxWidth。
194
195**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
196
197**系统能力:** SystemCapability.ArkUI.ArkUI.Full
198
199**参数:**
200
201| 参数名 | 类型                                                         | 必填 | 说明                                                |
202| ------ | ------------------------------------------------------------ | ---- | --------------------------------------------------- |
203| value  | number | 是   | 设置侧边栏最大宽度。<br/>默认值:280vp<br/>单位:vp<br/>取值范围:[0, +∞) |
204
205### maxSideBarWidth<sup>9+</sup>
206
207maxSideBarWidth(value: Length)
208
209设置侧边栏最大宽度。设置为小于0的值时按默认值显示。值不能超过侧边栏容器本身宽度,超过使用侧边栏容器本身宽度。
210
211maxSideBarWidth优先于侧边栏子组件maxWidth,maxSideBarWidth未设置时默认值优先级高于侧边栏子组件maxWidth。
212
213**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
214
215**系统能力:** SystemCapability.ArkUI.ArkUI.Full
216
217**参数:**
218
219| 参数名 | 类型                                                         | 必填 | 说明                                                |
220| ------ | ------------------------------------------------------------ | ---- | --------------------------------------------------- |
221| value  | [Length](ts-types.md#length) | 是   | 设置侧边栏最大宽度。<br/>默认值:280vp<br/>单位:vp<br/>取值范围:[0, +∞) |
222
223### autoHide<sup>9+</sup>
224
225autoHide(value: boolean)
226
227设置当侧边栏拖拽到小于最小宽度后,是否自动隐藏。受minSideBarWidth属性方法影响,minSideBarWidth属性方法未设置值使用默认值。
228
229拖拽过程中判断是否要自动隐藏。小于最小宽度时需要阻尼效果触发隐藏(越界一段距离)。
230
231**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
232
233**系统能力:** SystemCapability.ArkUI.ArkUI.Full
234
235**参数:**
236
237| 参数名 | 类型    | 必填 | 说明                                                         |
238| ------ | ------- | ---- | ------------------------------------------------------------ |
239| value  | boolean | 是   | 侧边栏拖拽到小于最小宽度后,是否自动隐藏。<br/>true:会自动隐藏<br/>false:不会自动隐藏<br/>默认值:true |
240
241### sideBarPosition<sup>9+</sup>
242
243sideBarPosition(value: SideBarPosition)
244
245设置侧边栏显示位置。
246
247**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
248
249**系统能力:** SystemCapability.ArkUI.ArkUI.Full
250
251**参数:**
252
253| 参数名 | 类型                                         | 必填 | 说明                                               |
254| ------ | -------------------------------------------- | ---- | -------------------------------------------------- |
255| value  | [SideBarPosition](#sidebarposition9枚举说明) | 是   | 侧边栏显示位置。<br/>默认值:SideBarPosition.Start |
256
257### divider<sup>10+</sup>
258
259divider(value: DividerStyle | null)
260
261设置分割线的样式。
262
263**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
264
265**系统能力:** SystemCapability.ArkUI.ArkUI.Full
266
267**参数:**
268
269| 参数名 | 类型                                                      | 必填 | 说明                                                         |
270| ------ | --------------------------------------------------------- | ---- | ------------------------------------------------------------ |
271| value  | [DividerStyle](#dividerstyle10对象说明)&nbsp;\|&nbsp;null | 是   | 分割线的样式。<br/>默认为DividerStyle:显示分割线。<br/>- null或undefined:行为不做处理,分割线样式与默认值保持一致。<br/>**说明:** <br/>API version 11及以下版本,null效果为不显示分割线。|
272
273### minContentWidth<sup>10+</sup>
274
275minContentWidth(value: Dimension)
276
277设置SideBarContainer组件内容区可显示的最小宽度。
278
279设置为小于0,内容区显示的最小宽度为360vp,未设置该属性时,组件内容区的可缩小到0。
280
281Embed场景下,增大组件尺寸时仅增大内容区的尺寸。
282
283缩小组件尺寸时,先缩小内容区的尺寸至minContentWidth。继续缩小组件尺寸时,保持内容区宽度minContentWidth不变,优先缩小侧边栏的尺寸。
284
285当缩小侧边栏的尺寸至minSideBarWidth后,继续缩小组件尺寸时,
286
287- 如果autoHide属性为false,则会保持侧边栏宽度minSideBarWidth和内容区宽度minContentWidth不变,但内容区会被截断显示;
288- 如果autoHide属性为true,则会优先隐藏侧边栏,然后继续缩小至内容区宽度minContentWidth后,内容区宽度保持不变,但内容区会被截断显示。
289
290minContentWidth优先于侧边栏的maxSideBarWidth与sideBarWidth属性,minContentWidth未设置时默认值优先级低于设置的minSideBarWidth与maxSideBarWidth属性。
291
292**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
293
294**系统能力:** SystemCapability.ArkUI.ArkUI.Full
295
296**参数:**
297
298| 参数名 | 类型                                 | 必填 | 说明                                                         |
299| ------ | ------------------------------------ | ---- | ------------------------------------------------------------ |
300| value  | [Dimension](ts-types.md#dimension10) | 是   | SideBarContainer组件内容区可显示的最小宽度。<br/>默认值:360vp<br/>单位:vp |
301
302## ButtonStyle对象说明
303
304设置侧边栏控制按钮的样式。
305
306**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
307
308**系统能力:** SystemCapability.ArkUI.ArkUI.Full
309
310| 名称 | 类型 | 只读 | 可选 | 说明 |
311| -------- | -------- | -------- | -------- | -------- |
312| left | number | 否 | 是 | 设置侧边栏控制按钮距离容器左界限的间距。<br/>默认值:16vp<br>单位:vp<br/>取值范围:[0, +∞) |
313| top | number | 否 | 是 | 设置侧边栏控制按钮距离容器上界限的间距。<br/>默认值:48vp<br/>单位:vp<br/>取值范围:[0, +∞) |
314| width | number | 否 | 是 | 设置侧边栏控制按钮的宽度。<br/>默认值:<br/>API version 9及之前版本:32vp<br/>从API version 10开始:24vp<br/>单位:vp<br/>取值范围:[0, +∞) |
315| height | number | 否 | 是 | 设置侧边栏控制按钮的高度。<br/>默认值:<br/>API version 9及之前版本:32vp<br/>从API version 10开始:24vp<br/>单位:vp<br/>取值范围:[0, +∞) |
316| icons | [ButtonIconOptions<sup>18+</sup>](#buttoniconoptions18对象说明) | 否 | 是 | 设置侧边栏控制按钮的图标。 |
317
318## ButtonIconOptions<sup>18+</sup>对象说明
319
320设置侧边栏控制按钮的图标。
321
322> **说明:**
323>
324> 为规范匿名对象的定义,API 18版本修改了此处的元素定义。其中,保留了历史匿名对象的起始版本信息,会出现外层元素@since版本号高于内层元素版本号的情况,但这不影响接口的使用。
325
326**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
327
328**系统能力:** SystemCapability.ArkUI.ArkUI.Full
329
330| 名称       | 类型                           | 只读 | 可选 | 说明                                        |
331| --------- | ------------------------------- | ---- | ---- | ------------------------------------------ |
332| shown<sup>8+</sup>     | string&nbsp;\|&nbsp;[PixelMap](../../apis-image-kit/arkts-apis-image-PixelMap.md)&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 否 | 否   | 设置侧边栏显示时控制按钮的图标。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。              |
333| hidden<sup>8+</sup>    | string&nbsp;\|&nbsp;[PixelMap](../../apis-image-kit/arkts-apis-image-PixelMap.md)&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 否 | 否   | 设置侧边栏隐藏时控制按钮的图标。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。              |
334| switching<sup>8+</sup> | string&nbsp;\|&nbsp;[PixelMap](../../apis-image-kit/arkts-apis-image-PixelMap.md)&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 否 | 是   | 设置侧边栏显示和隐藏状态切换时控制按钮的图标。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
335
336> **说明:**
337>
338> 资源获取错误时,使用默认图标。
339
340## SideBarPosition<sup>9+</sup>枚举说明
341
342侧边栏显示位置。
343
344**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
345
346**系统能力:** SystemCapability.ArkUI.ArkUI.Full
347
348| 名称 | 说明 |
349| -------- | -------- |
350| Start | 侧边栏位于容器左侧。 |
351| End | 侧边栏位于容器右侧。 |
352
353## DividerStyle<sup>10+</sup>对象说明
354
355设置分割线的样式。
356
357**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
358
359**系统能力:** SystemCapability.ArkUI.ArkUI.Full
360
361| 名称        | 类型      | 只读 | 可选 | 说明                                     |
362| ----------- | ------------- | ---- | ---- | ---------------------------------------- |
363| strokeWidth | [Length](ts-types.md#length)        | 否 | 否   | 分割线的线宽。<br/>默认值:1vp。<br/>取值范围:[0, +∞)。<br/>**说明**:<br>分割线的宽度不支持百分比设置。优先级低于[通用属性height](ts-universal-attributes-size.md#height),超过通用属性设置大小时,按照通用属性进行裁切。部分设备硬件中存在1像素取整后分割线不显示问题,建议使用2像素。 |
364| color       | [ResourceColor](ts-types.md#resourcecolor) | 否 | 是   | 分割线的颜色。<br/>默认值:#000000,3%   |
365| startMargin | [Length](ts-types.md#length)        | 否 | 是   | 分割线与侧边栏顶端的距离。<br/>默认值:0。<br/>取值范围:[0, +∞)。 |
366| endMargin   | [Length](ts-types.md#length)        | 否 | 是   | 分割线与侧边栏底端的距离。<br/>默认值:0。<br/>取值范围:[0, +∞)。 |
367>  **说明:**
368>
369>  针对侧边栏子组件设置[通用属性宽高](ts-universal-attributes-size.md)时,宽高都不生效。
370>  针对侧边栏内容区设置[通用属性宽高](ts-universal-attributes-size.md)时,宽高都不生效,默认占满SideBarContainer的剩余空间。
371>
372>  当showSideBar属性未设置时,依据组件大小进行自动显示:
373>
374>  - 小于minSideBarWidth + minContentWidth:默认不显示侧边栏。
375>  - 大于等于minSideBarWidth + minContentWidth:默认显示侧边栏。
376
377## 事件
378
379除支持[通用事件](ts-component-general-events.md)外,还支持以下事件:
380
381### onChange
382
383onChange(callback: (value: boolean) =&gt; void)
384
385当侧边栏的状态在显示和隐藏之间切换时触发回调。
386
387触发该事件的条件:
388
3891、showSideBar属性值变换时;
390
3912、showSideBar属性自适应行为变化时;
392
3933、分割线拖拽触发autoHide时。
394
395**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
396
397**系统能力:** SystemCapability.ArkUI.ArkUI.Full
398
399**参数:**
400
401| 参数名 | 类型    | 必填 | 说明                          |
402| ------ | ------- | ---- | ----------------------------- |
403| value  | boolean | 是   | true表示显示,false表示隐藏。 |
404
405
406## 示例
407
408该示例主要演示如何使用侧边栏组件及页面布局效果。
409
410```ts
411// xxx.ets
412@Entry
413@Component
414struct SideBarContainerExample {
415  normalIcon: Resource = $r("app.media.icon");
416  selectedIcon: Resource = $r("app.media.icon");
417  @State arr: number[] = [1, 2, 3];
418  @State current: number = 1;
419
420  build() {
421    SideBarContainer(SideBarContainerType.Embed) {
422      Column() {
423        ForEach(this.arr, (item: number) => {
424          Column({ space: 5 }) {
425            Image(this.current === item ? this.selectedIcon : this.normalIcon).width(64).height(64)
426            Text("Index0" + item)
427              .fontSize(25)
428              .fontColor(this.current === item ? '#0A59F7' : '#999')
429              .fontFamily('source-sans-pro,cursive,sans-serif')
430          }
431          .onClick(() => {
432            this.current = item;
433          })
434        }, (item: string) => item)
435      }.width('100%')
436      .justifyContent(FlexAlign.SpaceEvenly)
437      .backgroundColor('#19000000')
438
439      Column() {
440        Text('SideBarContainer content text1').fontSize(25)
441        Text('SideBarContainer content text2').fontSize(25)
442      }
443      .margin({ top: 50, left: 20, right: 30 })
444    }
445    .controlButton({
446      icons: {
447        hidden: $r('app.media.drawer'),
448        shown: $r('app.media.drawer'),
449        switching: $r('app.media.drawer')
450      }
451    })
452    .sideBarWidth(150)
453    .minSideBarWidth(50)
454    .maxSideBarWidth(300)
455    .minContentWidth(0)
456    .onChange((value: boolean) => {
457      console.info('status:' + value);
458    })
459    .divider({ strokeWidth: '1vp', color: Color.Gray, startMargin: '4vp', endMargin: '4vp' })
460  }
461}
462```
463
464![](figures/sidebarcontainer.png)
465