1# Class (OverlayManager) 2 3提供绘制浮层的能力。 4 5> **说明:** 6> 7> - 本模块首批接口从API version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> 9> - 本Class首批接口从API version 12开始支持。 10> 11> - 以下API需先使用UIContext中的[getOverlayManager()](arkts-apis-uicontext-uicontext.md#getoverlaymanager12)方法获取到OverlayManager对象,再通过该对象调用对应方法。 12> 13> - OverlayManager上节点的层级在Page页面层级之上,在Dialog、Popup、Menu、BindSheet、BindContentCover和Toast等之下。 14> 15> - OverlayManager上节点安全区域内外的绘制方式与Page一致,键盘避让方式与Page一致。 16> 17> - 与OverlayManager相关的属性推荐采用AppStorage来进行应用全局存储,以免切换页面后属性值发生变化从而导致业务错误。 18 19## addComponentContent<sup>12+</sup> 20 21addComponentContent(content: ComponentContent, index?: number): void 22 23在OverlayManager上新增指定节点。 24 25**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 26 27**系统能力:** SystemCapability.ArkUI.ArkUI.Full 28 29**参数:** 30 31| 参数名 | 类型 | 必填 | 说明 | 32| ------- | ---------------------------------------- | ---- | ----------- | 33| content | [ComponentContent](js-apis-arkui-ComponentContent.md) | 是 | 在OverlayManager上新增指定节点上添加此content。 <br>**说明:** <br/> 新增的节点默认处于页面居中,按层级堆叠。| 34| index | number | 否 | 新增节点在OverlayManager上的层级位置。<br>**说明:** <br/> 当index ≥ 0时,越大,ComponentContent的层级越高;若多个ComponentContent的index相同,ComponentContent添加的时间越晚层级越高。<br/> 当index < 0、index = null或index = undefined时,ComponentContent默认添加至最高层。<br/>当同一个ComponentContent被添加多次时,只保留最后一次添加的ComponentContent。 35 36**示例:** 37 38```ts 39import { ComponentContent, OverlayManager } from '@kit.ArkUI'; 40 41class Params { 42 text: string = ""; 43 offset: Position; 44 45 constructor(text: string, offset: Position) { 46 this.text = text; 47 this.offset = offset; 48 } 49} 50 51@Builder 52function builderText(params: Params) { 53 Column() { 54 Text(params.text) 55 .fontSize(30) 56 .fontWeight(FontWeight.Bold) 57 }.offset(params.offset) 58} 59 60@Entry 61@Component 62struct OverlayExample { 63 @State message: string = 'ComponentContent'; 64 private uiContext: UIContext = this.getUIContext(); 65 private overlayNode: OverlayManager = this.uiContext.getOverlayManager(); 66 @StorageLink('contentArray') contentArray: ComponentContent<Params>[] = []; 67 @StorageLink('componentContentIndex') componentContentIndex: number = 0; 68 @StorageLink('arrayIndex') arrayIndex: number = 0; 69 @StorageLink("componentOffset") componentOffset: Position = { x: 0, y: 80 }; 70 71 build() { 72 Column() { 73 Button("++componentContentIndex: " + this.componentContentIndex).onClick(() => { 74 ++this.componentContentIndex; 75 }) 76 Button("--componentContentIndex: " + this.componentContentIndex).onClick(() => { 77 --this.componentContentIndex; 78 }) 79 Button("增加ComponentContent" + this.contentArray.length).onClick(() => { 80 let componentContent = new ComponentContent( 81 this.uiContext, wrapBuilder<[Params]>(builderText), 82 new Params(this.message + (this.contentArray.length), this.componentOffset) 83 ); 84 this.contentArray.push(componentContent); 85 this.overlayNode.addComponentContent(componentContent, this.componentContentIndex); 86 }) 87 Button("++arrayIndex: " + this.arrayIndex).onClick(() => { 88 ++this.arrayIndex; 89 }) 90 Button("--arrayIndex: " + this.arrayIndex).onClick(() => { 91 --this.arrayIndex; 92 }) 93 Button("删除ComponentContent" + this.arrayIndex).onClick(() => { 94 if (this.arrayIndex >= 0 && this.arrayIndex < this.contentArray.length) { 95 let componentContent = this.contentArray.splice(this.arrayIndex, 1); 96 this.overlayNode.removeComponentContent(componentContent.pop()); 97 } else { 98 console.info("arrayIndex有误"); 99 } 100 }) 101 Button("显示ComponentContent" + this.arrayIndex).onClick(() => { 102 if (this.arrayIndex >= 0 && this.arrayIndex < this.contentArray.length) { 103 let componentContent = this.contentArray[this.arrayIndex]; 104 this.overlayNode.showComponentContent(componentContent); 105 } else { 106 console.info("arrayIndex有误"); 107 } 108 }) 109 Button("隐藏ComponentContent" + this.arrayIndex).onClick(() => { 110 if (this.arrayIndex >= 0 && this.arrayIndex < this.contentArray.length) { 111 let componentContent = this.contentArray[this.arrayIndex]; 112 this.overlayNode.hideComponentContent(componentContent); 113 } else { 114 console.info("arrayIndex有误"); 115 } 116 }) 117 Button("显示所有ComponentContent").onClick(() => { 118 this.overlayNode.showAllComponentContents(); 119 }) 120 Button("隐藏所有ComponentContent").onClick(() => { 121 this.overlayNode.hideAllComponentContents(); 122 }) 123 124 Button("跳转页面").onClick(() => { 125 this.getUIContext().getRouter().pushUrl({ 126 url: 'pages/Second' 127 }); 128 }) 129 } 130 .width('100%') 131 .height('100%') 132 } 133} 134``` 135 136## addComponentContentWithOrder<sup>18+</sup> 137 138addComponentContentWithOrder(content: ComponentContent, levelOrder?: LevelOrder): void 139 140创建浮层节点时,指定显示顺序。 141 142支持在浮层节点创建时指定显示的顺序。 143 144**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 145 146**系统能力:** SystemCapability.ArkUI.ArkUI.Full 147 148**参数:** 149 150| 参数名 | 类型 | 必填 | 说明 | 151| ------- | ---------------------------------------- | ---- | ----------- | 152| content | [ComponentContent](js-apis-arkui-ComponentContent.md) | 是 | 在OverlayManager上新增指定节点上添加此content。 <br>**说明:** <br/> 新增的节点默认处于页面居中位置,按层级堆叠。| 153| levelOrder | [LevelOrder](js-apis-promptAction.md#levelorder18) | 否 | 新增浮层节点的显示顺序。<br />**说明:**<br />- 默认值:LevelOrder.clamp(0)| 154 155**示例:** 156 157该示例通过调用addComponentContentWithOrder接口,实现了按照指定显示顺序创建浮层节点的功能。 158 159```ts 160import { ComponentContent, PromptAction, LevelOrder, UIContext, OverlayManager } from '@kit.ArkUI'; 161 162class Params { 163 text: string = ""; 164 offset: Position; 165 constructor(text: string, offset: Position) { 166 this.text = text; 167 this.offset = offset; 168 } 169} 170@Builder 171function builderText(params: Params) { 172 Column() { 173 Text(params.text) 174 .fontSize(30) 175 .fontWeight(FontWeight.Bold) 176 }.offset(params.offset) 177} 178 179@Entry 180@Component 181struct Index { 182 @State message: string = '弹窗'; 183 private ctx: UIContext = this.getUIContext(); 184 private promptAction: PromptAction = this.ctx.getPromptAction(); 185 private overlayNode: OverlayManager = this.ctx.getOverlayManager(); 186 @StorageLink('contentArray') contentArray: ComponentContent<Params>[] = []; 187 @StorageLink('componentContentIndex') componentContentIndex: number = 0; 188 @StorageLink('arrayIndex') arrayIndex: number = 0; 189 @StorageLink("componentOffset") componentOffset: Position = { x: 0, y: 80 }; 190 191 build() { 192 Row() { 193 Column({ space: 10 }) { 194 Button('OverlayManager下面弹窗') 195 .fontSize(20) 196 .onClick(() => { 197 let componentContent = new ComponentContent( 198 this.ctx, wrapBuilder<[Params]>(builderText), 199 new Params(this.message + (this.contentArray.length), this.componentOffset) 200 ); 201 this.contentArray.push(componentContent); 202 this.overlayNode.addComponentContentWithOrder(componentContent, LevelOrder.clamp(100.1)); 203 let topOrder: LevelOrder = this.promptAction.getTopOrder(); 204 if (topOrder !== undefined) { 205 console.error('topOrder: ' + topOrder.getOrder()); 206 } 207 let bottomOrder: LevelOrder = this.promptAction.getBottomOrder(); 208 if (bottomOrder !== undefined) { 209 console.error('bottomOrder: ' + bottomOrder.getOrder()); 210 } 211 }) 212 Button('OverlayManager上面弹窗') 213 .fontSize(20) 214 .onClick(() => { 215 let componentContent = new ComponentContent( 216 this.ctx, wrapBuilder<[Params]>(builderText), 217 new Params(this.message + (this.contentArray.length), this.componentOffset) 218 ); 219 this.contentArray.push(componentContent); 220 this.overlayNode.addComponentContentWithOrder(componentContent, LevelOrder.clamp(100.2)); 221 let topOrder: LevelOrder = this.promptAction.getTopOrder(); 222 if (topOrder !== undefined) { 223 console.error('topOrder: ' + topOrder.getOrder()); 224 } 225 let bottomOrder: LevelOrder = this.promptAction.getBottomOrder(); 226 if (bottomOrder !== undefined) { 227 console.error('bottomOrder: ' + bottomOrder.getOrder()); 228 } 229 }) 230 }.width('100%') 231 }.height('100%') 232 } 233} 234``` 235 236## removeComponentContent<sup>12+</sup> 237 238removeComponentContent(content: ComponentContent): void 239 240删除overlay上的指定节点。 241 242**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 243 244**系统能力:** SystemCapability.ArkUI.ArkUI.Full 245 246**参数:** 247 248| 参数名 | 类型 | 必填 | 说明 | 249| ------- | ---------------------------------------- | ---- | ----------- | 250| content | [ComponentContent](js-apis-arkui-ComponentContent.md) | 是 | 在OverlayManager上删除此content。 | 251 252**示例:** 253 254请参考[addComponentContent示例](#addcomponentcontent12)。 255 256## showComponentContent<sup>12+</sup> 257 258showComponentContent(content: ComponentContent): void 259 260在OverlayManager上显示指定节点。 261 262**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 263 264**系统能力:** SystemCapability.ArkUI.ArkUI.Full 265 266**参数:** 267 268| 参数名 | 类型 | 必填 | 说明 | 269| ------- | ---------------------------------------- | ---- | ----------- | 270| content | [ComponentContent](js-apis-arkui-ComponentContent.md) | 是 | 在OverlayManager上显示此content。| 271 272**示例:** 273 274请参考[addComponentContent示例](#addcomponentcontent12)。 275 276## hideComponentContent<sup>12+</sup> 277 278hideComponentContent(content: ComponentContent): void 279 280隐藏OverlayManager上的指定节点。 281 282**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 283 284**系统能力:** SystemCapability.ArkUI.ArkUI.Full 285 286**参数:** 287 288| 参数名 | 类型 | 必填 | 说明 | 289| ------- | ---------------------------------------- | ---- | ----------- | 290| content | [ComponentContent](js-apis-arkui-ComponentContent.md) | 是 | 在OverlayManager上隐藏此content。 | 291 292**示例:** 293 294请参考[addComponentContent示例](#addcomponentcontent12)。 295 296## showAllComponentContents<sup>12+</sup> 297 298showAllComponentContents(): void 299 300显示OverlayManager上所有的ComponentContent。 301 302**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 303 304**系统能力:** SystemCapability.ArkUI.ArkUI.Full 305 306**示例:** 307 308请参考[addComponentContent示例](#addcomponentcontent12)。 309 310## hideAllComponentContents<sup>12+</sup> 311 312hideAllComponentContents(): void 313 314隐藏OverlayManager上的所有ComponentContent。 315 316**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 317 318**系统能力:** SystemCapability.ArkUI.ArkUI.Full 319 320**示例:** 321 322请参考[addComponentContent示例](#addcomponentcontent12)。 323