• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# FolderStack
2
3FolderStack继承于Stack(层叠布局)控件,新增了折叠屏悬停能力,通过识别upperItems自动避让折叠屏折痕区后移到上半屏。
4
5>  **说明:**
6>
7>  该组件从API version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9>  该组件不支持在Wearable设备上使用。
10
11
12## 子组件
13
14可以包含多个子组件。
15
16
17## 接口
18
19FolderStack(options?: FolderStackOptions)
20
21**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
22
23**系统能力:** SystemCapability.ArkUI.ArkUI.Full
24
25**参数:**
26
27| 参数名       | 类型                                    | 必填 | 说明                                                                 |
28| ------------ | ------------------------------------------- | ---- |----------------------------------------------------------------------|
29| options |  [FolderStackOptions](#folderstackoptions14对象说明) | 否   | FolderStack的配置项。 |
30
31## FolderStackOptions<sup>14+</sup>对象说明
32
33**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37| 名称       | 类型         | 必填 | 说明                       |
38| ------------ | -------------------------- | ---- |----------------------------|
39| upperItems<sup>11+</sup> |    Array<string\>  | 否   | FolderStack的配置项。<br/>upperItems:定义悬停态会被移到上半屏的子组件的id,组件id在此数组中的子组件悬停触发时自动避让折叠屏折痕区后移到上半屏,其它组件堆叠在下半屏区域。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
40
41## 属性
42
43除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性:
44
45### alignContent
46
47alignContent(value: Alignment)
48
49设置子组件在容器内的对齐方式。该属性与[通用属性align](ts-universal-attributes-location.md)同时设置时,后设置的属性生效。
50
51**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
52
53**系统能力:** SystemCapability.ArkUI.ArkUI.Full
54
55**参数:**
56
57| 参数名 | 类型                                        | 必填 | 说明                                                    |
58| ------ | ------------------------------------------- | ---- | ------------------------------------------------------- |
59| value  | [Alignment](ts-appendix-enums.md#alignment) | 是   | 子组件在容器内的对齐方式。<br/>默认值:Alignment.Center |
60
61### enableAnimation
62
63enableAnimation(value: boolean)
64
65设置是否使用默认动效。
66
67**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
68
69**系统能力:** SystemCapability.ArkUI.ArkUI.Full
70
71**参数:**
72
73| 参数名 | 类型                                        | 必填 | 说明                                |
74| ------ | ------------------------------------------- | ---- | ----------------------------------- |
75| value  | boolean | 是   | 是否使用默认动效。<br/>默认值:true |
76
77### autoHalfFold
78
79autoHalfFold(value: boolean)
80
81设置是否开启自动旋转,仅在系统自动旋转关闭时该属性生效。
82
83**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
84
85**系统能力:** SystemCapability.ArkUI.ArkUI.Full
86
87**参数:**
88
89| 参数名 | 类型    | 必填 | 说明                                |
90| ------ | ------- | ---- | ----------------------------------- |
91| value  | boolean | 是   | 是否开启自动旋转。<br/>默认值:true |
92
93>  **说明:**
94>
95>  设置offset和margin属性,可能会导致上下半屏遮挡折痕区,不建议开发者使用。
96
97## 事件
98
99除支持[通用事件](ts-component-general-events.md)外,还支持以下事件:
100
101### onFolderStateChange
102
103onFolderStateChange(callback: OnFoldStatusChangeCallback)
104
105当折叠状态改变的时候回调,仅在横屏状态下生效。
106
107**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
108
109**系统能力:** SystemCapability.ArkUI.ArkUI.Full
110
111**参数:**
112
113| 参数名     | 类型                                            | 必填 | 说明                 |
114| ---------- | ----------------------------------------------- | ---- | -------------------- |
115| callback | [OnFoldStatusChangeCallback](#onfoldstatuschangecallback14) | 是   | 当前设备的折叠状态。 |
116
117
118### onHoverStatusChange<sup>12+</sup>
119
120onHoverStatusChange(handler: OnHoverStatusChangeCallback)
121
122当悬停状态改变的时候回调。
123
124**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
125
126**系统能力:** SystemCapability.ArkUI.ArkUI.Full
127
128**参数:**
129
130| 参数名     | 类型                                            | 必填 | 说明                 |
131| ---------- | ----------------------------------------------- | ---- | -------------------- |
132| handler | [OnHoverStatusChangeCallback](#onhoverstatuschangecallback14) | 是   | 当悬停状态改变的时候触发回调。 |
133
134## OnHoverStatusChangeCallback<sup>14+</sup>
135
136type OnHoverStatusChangeCallback = (param: HoverEventParam) => void
137
138当悬停状态改变的时候触发回调。
139
140**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
141
142**系统能力:** SystemCapability.ArkUI.ArkUI.Full
143
144| 参数名     | 类型                                            | 必填 | 说明                 |
145| ---------- | ----------------------------------------------- | ---- | -------------------- |
146| param | [HoverEventParam](#hovereventparam12对象说明) | 是   | 当悬停状态改变的时候触发回调。 |
147
148## OnFoldStatusChangeCallback<sup>14+</sup>
149
150type OnFoldStatusChangeCallback = (event: OnFoldStatusChangeInfo) => void
151
152当前设备的折叠状态。
153
154**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
155
156**系统能力:** SystemCapability.ArkUI.ArkUI.Full
157
158| 参数名     | 类型                                            | 必填 | 说明                 |
159| ---------- | ----------------------------------------------- | ---- | -------------------- |
160| callback | [OnFoldStatusChangeInfo](#onfoldstatuschangeinfo14) | 是   | 当前设备的折叠状态。 |
161
162
163## OnFoldStatusChangeInfo<sup>14+</sup>
164
165当折叠状态改变的时候回调,仅在横屏状态下生效。
166
167**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
168
169**系统能力:** SystemCapability.ArkUI.ArkUI.Full
170
171| 名称     | 类型                                            | 必填 | 说明                 |
172| ---------- | ----------------------------------------------- | ---- | -------------------- |
173| foldStatus<sup>11+</sup> | [FoldStatus](ts-appendix-enums.md#foldstatus11) | 是   | 当前设备的折叠状态。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
174
175## HoverEventParam<sup>12+</sup>对象说明
176
177**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
178
179**系统能力:** SystemCapability.ArkUI.ArkUI.Full
180
181| 名称              | 类型                                                          | 必填 | 说明         |
182|------------------|-------------------------------------------------------------| --- |------------|
183| foldStatus       | [FoldStatus](ts-appendix-enums.md#foldstatus11)             | 是   | 当前设备的折叠状态。 |
184| isHoverMode      | boolean                                                     | 是   | 当前是否悬停模式。  |
185| appRotation      | [AppRotation](ts-appendix-enums.md#approtation12)           | 是   | 当前应用方向。    |
186| windowStatusType | [WindowStatusType](#windowstatustype12) | 是   | 窗口模式枚举。    |
187
188## WindowStatusType<sup>12+</sup>
189
190type WindowStatusType = WindowStatusType
191
192窗口模式枚举。
193
194**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
195
196**系统能力:** SystemCapability.ArkUI.ArkUI.Full
197
198| 类型        | 说明                 |
199| ---------- | ---------------------|
200| [WindowStatusType](../js-apis-window.md#windowstatustype11)  | 窗口模式枚举。 |
201
202
203## 示例
204
205该示例实现了折叠屏悬停能力。
206
207```ts
208@Entry
209@Component
210struct Index {
211  @State len_wid: number = 480
212  @State w: string = "40%"
213
214  build() {
215    Column() {
216      // upperItems将所需要的悬停到上半屏的id放入upperItems传入,其余组件会堆叠在下半屏区域
217      FolderStack({ upperItems: ["upperitemsId"] }) {
218        // 此Column会自动上移到上半屏
219        Column() {
220          Text("video zone").height("100%").width("100%").textAlign(TextAlign.Center).fontSize(25)
221        }.backgroundColor('rgb(0, 74, 175)').width("100%").height("100%").id("upperitemsId")
222
223        // 下列两个Column堆叠在下半屏区域
224        Column() {
225          Text("video title")
226            .width("100%")
227            .height(50)
228            .textAlign(TextAlign.Center)
229            .backgroundColor('rgb(213, 213, 213)')
230            .fontSize(25)
231        }.width("100%").height("100%").justifyContent(FlexAlign.Start)
232
233        Column() {
234          Text("video bar ")
235            .width("100%")
236            .height(50)
237            .textAlign(TextAlign.Center)
238            .backgroundColor('rgb(213, 213, 213)')
239            .fontSize(25)
240        }.width("100%").height("100%").justifyContent(FlexAlign.End)
241      }
242      .backgroundColor('rgb(39, 135, 217)')
243      // 是否启动动效
244      .enableAnimation(true)
245      // 是否自动旋转
246      .autoHalfFold(true)
247      // folderStack回调 当折叠状态改变时回调
248      .onFolderStateChange((msg) => {
249        if (msg.foldStatus === FoldStatus.FOLD_STATUS_EXPANDED) {
250          console.info("The device is currently in the expanded state")
251        } else if (msg.foldStatus === FoldStatus.FOLD_STATUS_HALF_FOLDED) {
252          console.info("The device is currently in the half folded state")
253        } else {
254          // .............
255        }
256      })
257      // hoverStatusChange回调 当悬停状态改变时回调
258      .onHoverStatusChange((msg) => {
259        console.log('this foldStatus:' + msg.foldStatus);
260        console.log('this isHoverMode:' + msg.isHoverMode);
261        console.log('this appRotation:' + msg.appRotation);
262        console.log('this windowStatusType:' + msg.windowStatusType);
263      })
264      // folderStack如果不撑满页面全屏,作为普通Stack使用
265      .alignContent(Alignment.Bottom)
266      .height("100%")
267      .width("100%")
268      .backgroundColor('rgb(39, 135, 217)')
269
270    }
271    .height("100%")
272    .width("100%")
273    .borderWidth(1)
274    .borderColor('rgb(213, 213, 213)')
275    .backgroundColor('rgb(0, 74, 175)')
276    .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
277  }
278}
279```
280**图1** 横屏展开
281</br> ![FolderStack01.png](figures/FolderStack01.png)
282</br> **图2** 横屏半折叠
283</br> ![FolderStack02.png](figures/FolderStack02.png)