# 浮层 设置组件的浮层。 > **说明:** > > 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## overlay overlay(value: string | CustomBuilder | ComponentContent, options?: OverlayOptions ) 在当前组件上,增加遮罩文本或者叠加自定义组件以及ComponentContent作为该组件的浮层。浮层不通过组件树进行渲染,部分接口(例如[getRectangleById](../js-apis-arkui-componentUtils.md#componentutilsgetrectanglebyid))不支持获取浮层中的组件。 **卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | value | string \| [CustomBuilder](ts-types.md#custombuilder8)10+ \| [ComponentContent](../js-apis-arkui-ComponentContent.md)12+ | 是 | 遮罩文本内容或自定义组件构造函数。
**说明:**
自定义组件作为浮层时,不支持键盘走焦到自定义组件中。通过CustomBuilder设置浮层时,浮层中的内容会在页面刷新时销毁并重新创建,存在一定的性能损耗,页面频繁刷新的场景推荐使用ComponentContent方式设置浮层。 | | options | [OverlayOptions](#overlayoptions12) | 否 | 浮层的定位。
**说明:**
需要解析为Json格式。
API version 12之前,options:
{
align?: [Alignment](ts-appendix-enums.md#alignment), 
offset?: {x?: number, y?: number}
} | > **说明:** > > overlay节点不支持onAppear和onDisappear等和节点挂载/卸载相关的事件。 ## OverlayOptions12+ **系统能力:** SystemCapability.ArkUI.ArkUI.Full | 名称 | 类型 | 只读 | 可选 | 说明 | | --------------------- | -------------------------------------------| --- | -------| --------------------------------------------------- | | align7+ | [Alignment](ts-appendix-enums.md#alignment) | 否 | 是 |设置浮层相对于组件的方位。
默认值:TopStart | | offset7+ | [OverlayOffset](#overlayoffset12) | 否 | 是 |设置浮层基于自身左上角的偏移量。浮层默认处于组件左上角。 | > **说明:** > > align和offset都设置时,效果重叠,浮层相对于组件方位定位后,再基于当前位置的左上角进行偏移。 ## OverlayOffset12+ | 名称 | 类型 | 只读 | 可选 | 说明 | | ------- | ---------------------------------------------------------| ---- | ------| --------------------------------------------------- | | x | number | 否 | 是 | 横向偏移量 | | y | number | 否 | 是 | 纵向偏移量 | ## 示例 ### 示例1(通过string设置浮层) 该示例通过传入string设置浮层。 ```ts // xxx.ets @Entry @Component struct OverlayExample { build() { Column() { Column() { Text('floating layer') .fontSize(12).fontColor(0xCCCCCC).maxLines(1) Column() { Image($r('app.media.img')) .width(240).height(240) .overlay("Winter is a beautiful season, especially when it snows.", { align: Alignment.Bottom, offset: { x: 0, y: -15 } }) }.border({ color: Color.Black, width: 2 }) }.width('100%') }.padding({ top: 20 }) } } ``` ![zh-cn_image_0000001205769446](figures/zh-cn_image_0000001205769446.png) ### 示例2(通过builder设置浮层) 该示例通过传入builder设置浮层。 ```ts // xxx.ets @Entry @Component struct OverlayExample { @Builder OverlayNode() { Column() { Image($r('app.media.img1')) Text("This is overlayNode").fontSize(20).fontColor(Color.White) }.width(180).height(180).alignItems(HorizontalAlign.Center) } build() { Column() { Image($r('app.media.img2')) .overlay(this.OverlayNode(), { align: Alignment.Center }) .objectFit(ImageFit.Contain) }.width('100%') .border({ color: Color.Black, width: 2 }).padding(20) } } ``` ![zh-cn_image_0000001210111632](figures/zh-cn_image_0000001210111632.png) ### 示例3(通过ComponentContent设置浮层) 该示例通过overlay传入了ComponentContent使backgroundColor不断发生变化。 ```ts // xxx.ets import { ComponentContent } from '@kit.ArkUI'; class Params{ backgroundColor: string | Resource = "" constructor(backgroundColor: string | Resource) { this.backgroundColor = backgroundColor; } } @Builder function overlayBuilder(params: Params){ Row(){ }.width('100%').height('100%').backgroundColor(params.backgroundColor) } @Entry @Component struct Page_4040 { @State overlayColor: string = 'rgba(0, 0, 0, 0.6)'; private uiContext: UIContext = this.getUIContext(); private overlayNode: ComponentContent = new ComponentContent(this.uiContext, wrapBuilder(overlayBuilder), new Params(this.overlayColor)) aboutToAppear(): void { setInterval(() => { if (this.overlayColor.includes('0.6')) { this.overlayColor = 'rgba(0, 0, 0, 0.1)' this.overlayNode.update(new Params(this.overlayColor)); } else { this.overlayColor = 'rgba(0, 0, 0, 0.6)' this.overlayNode.update(new Params(this.overlayColor)); } }, 1000) } build() { Row() { Column(){ Text(this.overlayColor) .fontSize(40) .fontWeight(FontWeight.Bold) } .width('100%') } .height('100%') .overlay(this.overlayNode) } } ``` ![zh-cn_image_0000001210111632](figures/component_content_overlay.gif)