• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 浮层
2
3设置组件的浮层。
4
5>  **说明:**
6>
7>  从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## overlay
10
11overlay(value: string | CustomBuilder | ComponentContent, options?: OverlayOptions )
12
13在当前组件上,增加遮罩文本或者叠加自定义组件以及ComponentContent作为该组件的浮层。
14
15**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
16
17**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
18
19**系统能力:** SystemCapability.ArkUI.ArkUI.Full
20
21**参数:**
22
23| 参数名  | 类型                                                         | 必填 | 说明                                                         |
24| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
25| value   | string&nbsp;\|&nbsp;[CustomBuilder](ts-types.md#custombuilder8)<sup>10+</sup>&nbsp;\| [ComponentContent](../js-apis-arkui-ComponentContent.md)<sup>12+</sup> | 是   | 遮罩文本内容或自定义组件构造函数。<br/>**说明:**<br/>自定义组件作为浮层时,不支持键盘走焦到自定义组件中。 |
26| options | [OverlayOptions](#overlayoptions12) | 否   | 浮层的定位。<br/>**说明:**<br/>需要解析为Json格式。<br/>API version 12之前,options: <br/>{<br/>align?:&nbsp;[Alignment](ts-appendix-enums.md#alignment),&nbsp;<br/>offset?:&nbsp;{x?:&nbsp;number, y?:&nbsp;number}<br/>} |
27
28>  **说明:**
29>
30>  overlay节点不支持onAppear和onDisappear等和节点生命周期相关的事件。
31
32## OverlayOptions<sup>12+</sup>
33
34**系统能力:** SystemCapability.ArkUI.ArkUI.Full
35
36| 名称                  | 类型                                       | 只读 | 可选  | 说明                                                |
37| --------------------- | -------------------------------------------| --- | -------| --------------------------------------------------- |
38| align<sup>7+</sup>   | [Alignment](ts-appendix-enums.md#alignment) | 否  | 是      |设置浮层相对于组件的方位。<br/>默认值:TopStart         |
39| offset<sup>7+</sup>  | [OverlayOffset](#overlayoffset12)          | 否  | 是     |设置浮层基于自身左上角的偏移量。浮层默认处于组件左上角。 |
40
41> **说明:**
42>
43> align和offset都设置时,效果重叠,浮层相对于组件方位定位后,再基于当前位置的左上角进行偏移。
44
45## OverlayOffset<sup>12+</sup>
46
47| 名称    | 类型                                                      | 只读 | 可选  | 说明                                                |
48| ------- | ---------------------------------------------------------| ---- | ------| --------------------------------------------------- |
49| x       | number                                                   | 否   | 是    | 横向偏移量                                           |
50| y       | number                                                   | 否   | 是    | 纵向偏移量                                           |
51
52## 示例
53
54### 示例1
55
56```ts
57// xxx.ets
58@Entry
59@Component
60struct OverlayExample {
61  build() {
62    Column() {
63      Column() {
64        Text('floating layer')
65          .fontSize(12).fontColor(0xCCCCCC).maxLines(1)
66        Column() {
67          Image($r('app.media.img'))
68            .width(240).height(240)
69            .overlay("Winter is a beautiful season, especially when it snows.", {
70              align: Alignment.Bottom,
71              offset: { x: 0, y: -15 }
72            })
73        }.border({ color: Color.Black, width: 2 })
74      }.width('100%')
75    }.padding({ top: 20 })
76  }
77}
78```
79
80![zh-cn_image_0000001205769446](figures/zh-cn_image_0000001205769446.png)
81
82### 示例2
83
84```ts
85// xxx.ets
86@Entry
87@Component
88struct OverlayExample {
89  @Builder OverlayNode() {
90    Column() {
91      Image($r('app.media.img1'))
92      Text("This is overlayNode").fontSize(20).fontColor(Color.White)
93    }.width(180).height(180).alignItems(HorizontalAlign.Center)
94  }
95
96  build() {
97    Column() {
98      Image($r('app.media.img2'))
99        .overlay(this.OverlayNode(), { align: Alignment.Center })
100        .objectFit(ImageFit.Contain)
101    }.width('100%')
102    .border({ color: Color.Black, width: 2 }).padding(20)
103  }
104}
105```
106![zh-cn_image_0000001210111632](figures/zh-cn_image_0000001210111632.png)
107
108### 示例3
109通过overlay传入了ComponentContent使backgroundColor不断发生变化
110```ts
111// xxx.ets
112import { ComponentContent } from '@kit.ArkUI';
113
114class Params{
115  backgroundColor: string | Resource = ""
116  constructor(backgroundColor: string | Resource) {
117    this.backgroundColor = backgroundColor;
118  }
119}
120
121@Builder
122function overlayBuilder(params: Params){
123  Row(){
124  }.width('100%').height('100%').backgroundColor(params.backgroundColor)
125}
126
127@Entry
128@Component
129struct Page_4040 {
130  @State overlayColor: string = 'rgba(0, 0, 0, 0.6)';
131  private uiContext: UIContext = this.getUIContext();
132  private overlayNode: ComponentContent<Params> = new ComponentContent(this.uiContext, wrapBuilder(overlayBuilder), new Params(this.overlayColor))
133
134  aboutToAppear(): void {
135    setInterval(() => {
136      if (this.overlayColor.includes('0.6')) {
137        this.overlayColor = 'rgba(0, 0, 0, 0.1)'
138        this.overlayNode.update(new Params(this.overlayColor));
139      } else {
140        this.overlayColor = 'rgba(0, 0, 0, 0.6)'
141        this.overlayNode.update(new Params(this.overlayColor));
142      }
143    }, 1000)
144  }
145
146  build() {
147    Row() {
148      Column(){
149        Text(this.overlayColor)
150          .fontSize(40)
151          .fontWeight(FontWeight.Bold)
152      }
153      .width('100%')
154    }
155    .height('100%')
156    .overlay(this.overlayNode)
157  }
158}
159```
160![zh-cn_image_0000001210111632](figures/component_content_overlay.gif)
161