文档管理中心
您当前正在浏览HarmonyOS最新文档,覆盖已发布的所有API版本,可在API参考中筛选您使用的API版本。详细的版本配套关系请参考版本说明

浮层

设置组件的浮层,可用于在当前组件上叠加遮罩文本、自定义组件或ComponentContent,并支持基于当前组件进行定位,适用于提示信息展示、水印等需要在组件上方叠加内容的场景。

说明

从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

overlay

PhonePC/2in1TabletTVWearable

overlay(value: string | CustomBuilder | ComponentContent, options?: OverlayOptions): T

在当前组件上,增加遮罩文本、叠加自定义组件或将ComponentContent作为该组件的浮层。浮层的定位同样基于当前组件进行计算。浮层不通过组件树进行渲染,getRectangleById等获取组件信息的接口不支持获取浮层中的组件。

说明
  • overlay会将浮层组件覆盖在所绑定的组件上方,阻塞用户对浮层下方组件的所有交互操作。若需用户可操作下方组件,应参照示例2(通过builder设置浮层)中的实现,在浮层builder的最外层组件上配置.hitTestBehavior(HitTestMode.Transparent)。此配置在通过浮层实现水印时尤其重要,因为水印显示不应妨碍用户对下层组件的操作。

  • 多次调用overlay接口时,如果同时传入string类型和CustomBuilder类型,或者同时传入string类型和ComponentContent类型,浮层内容会叠加显示。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
value string | CustomBuilder10+ | ComponentContent12+

遮罩文本内容、自定义组件构造函数或组件内容的实体封装。

说明:

自定义组件作为浮层时,不支持键盘走焦到自定义组件中。通过CustomBuilder设置浮层时,浮层中的内容会在页面刷新时销毁并重新创建,存在性能损耗,页面频繁刷新的场景推荐使用ComponentContent方式设置浮层。

options OverlayOptions

浮层的定位。当需要自定义浮层相对于组件的方位或偏移量时传入该参数;不传入时,浮层默认按照align的默认值TopStart定位,并使用默认偏移量offset: { x: 0, y: 0 },显示在组件左上角。

说明:

API version 12之前,options:

{

align?: Alignment,

offset?: {x?: number, y?: number}

}

返回值:

展开
类型 说明
T 返回当前组件,可用于链式调用。
说明

overlay节点不支持onAppearonDisAppear等和节点挂载/卸载相关的事件。

OverlayOptions12+

PhonePC/2in1TabletTVWearable
说明

为规范匿名对象的定义,API version 12修改了此处的元素定义。其中,保留了历史匿名对象的起始版本信息,会出现外层元素@since版本号高于内层元素版本号的情况,但这不影响接口的使用。

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 类型 只读 可选 说明
align7+ Alignment

设置浮层相对于组件的方位。与offset同时设置时,浮层相对于组件方位定位后,再基于当前位置的左上角进行偏移。

默认值:TopStart

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

offset7+ OverlayOffset

设置浮层基于自身左上角的偏移量。与align同时设置时,浮层相对于组件方位定位后,再基于当前位置的左上角进行偏移。浮层默认处于组件左上角。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

说明

align和offset都设置时,定位效果叠加:浮层相对于组件方位定位后,再基于当前位置的左上角进行偏移。

OverlayOffset12+

PhonePC/2in1TabletTVWearable
说明

为规范匿名对象的定义,API version 12修改了此处的元素定义。其中,保留了历史匿名对象的起始版本信息,会出现外层元素@since版本号高于内层元素版本号的情况,但这不影响接口的使用。

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
名称 类型 只读 可选 说明
x7+ number

横向偏移量。

默认值:0

单位:vp

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

y7+ number

纵向偏移量。

默认值:0

单位:vp

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

ComponentContent12+

PhonePC/2in1TabletTVWearable

type ComponentContent<T = Object> = import('../api/arkui/ComponentContent').ComponentContent<T>

组件内容的实体封装。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

展开
类型 说明
import('../api/arkui/ComponentContent').ComponentContent<T> 组件内容的实体封装。

示例

PhonePC/2in1TabletTVWearable

示例1(通过string设置浮层)

该示例通过传入string设置浮层。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct OverlayExample {
  5. build() {
  6. Column() {
  7. Column() {
  8. Text('floating layer')
  9. .fontSize(12).fontColor(0xCCCCCC).maxLines(1)
  10. Column() {
  11. // $r('app.media.img')需要替换为开发者所需的图像资源文件
  12. Image($r('app.media.img'))
  13. .width(240).height(240)
  14. .overlay('Winter is a beautiful season, especially when it snows.', {
  15. align: Alignment.Bottom,
  16. offset: { x: 0, y: -15 }
  17. })
  18. }.border({ color: Color.Black, width: 2 })
  19. }.width('100%')
  20. }.padding({ top: 20 })
  21. }
  22. }

示例2(通过builder设置浮层)

该示例通过传入builder设置浮层。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct OverlayExample {
  5. @Builder
  6. overlayNode() {
  7. Column() {
  8. // $r('app.media.img1')需要替换为开发者所需的图像资源文件
  9. Image($r('app.media.img1'))
  10. Text('This is overlayNode').fontSize(20).fontColor(Color.White)
  11. }
  12. .width(180)
  13. .height(180)
  14. .alignItems(HorizontalAlign.Center)
  15. .hitTestBehavior(HitTestMode.Transparent) // 配置浮层不阻塞交互
  16. }
  17. build() {
  18. Column() {
  19. // $r('app.media.img2')需要替换为开发者所需的图像资源文件
  20. Image($r('app.media.img2'))
  21. .overlay(this.overlayNode(), { align: Alignment.Center })
  22. .objectFit(ImageFit.Contain)
  23. }.width('100%')
  24. .border({ color: Color.Black, width: 2 }).padding(20)
  25. }
  26. }

示例3(通过ComponentContent设置浮层)

该示例通过overlay传入ComponentContent,并通过update方法更新ComponentContent参数,使backgroundColor不断发生变化。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. import { ComponentContent } from '@kit.ArkUI';
  3. class Params {
  4. backgroundColor: string | Resource = '';
  5. constructor(backgroundColor: string | Resource) {
  6. this.backgroundColor = backgroundColor;
  7. }
  8. }
  9. @Builder
  10. function overlayBuilder(params: Params) {
  11. Row() {
  12. }.width('100%').height('100%').backgroundColor(params.backgroundColor)
  13. }
  14. @Entry
  15. @Component
  16. struct OverlayContentPage {
  17. @State overlayColor: string = 'rgba(0, 0, 0, 0.6)';
  18. private uiContext: UIContext = this.getUIContext();
  19. private overlayNode: ComponentContent<Params> =
  20. new ComponentContent(this.uiContext, wrapBuilder(overlayBuilder), new Params(this.overlayColor));
  21. aboutToAppear(): void {
  22. setInterval(() => {
  23. if (this.overlayColor.includes('0.6')) {
  24. this.overlayColor = 'rgba(0, 0, 0, 0.1)';
  25. this.overlayNode.update(new Params(this.overlayColor));
  26. } else {
  27. this.overlayColor = 'rgba(0, 0, 0, 0.6)';
  28. this.overlayNode.update(new Params(this.overlayColor));
  29. }
  30. }, 1000);
  31. }
  32. build() {
  33. Row() {
  34. Column() {
  35. Text(this.overlayColor)
  36. .fontSize(40)
  37. .fontWeight(FontWeight.Bold)
  38. }
  39. .width('100%')
  40. }
  41. .height('100%')
  42. .overlay(this.overlayNode)
  43. }
  44. }

在 API参考 中进行搜索
请输入您想要搜索的关键词