harmony 鸿蒙弹出框焦点策略

  • 2025-06-16
  • 浏览 (2)

弹出框焦点策略

ArkUI的弹出框焦点策略可以设定是否中断用户当前操作,并聚焦到新弹出的弹出框。若设定弹出框不获取焦点,则新弹出时不会中断用户当前操作,例如,当用户正在文本框中输入内容时,新弹出的弹出框不会关闭软键盘,焦点仍保留在文本框中。

从API version 19开始,可以通过设置focusable参数来管理弹出框是否获取焦点。

使用约束

openCustomDialogCustomDialog支持通过focusable参数来管理弹出框是否获取焦点。

说明:

只有弹出覆盖在当前窗口之上的弹出框才可以获取焦点。

创建不获取焦点的弹出框

说明:

详细变量定义请参考完整示例

  1. 初始化一个弹出框内容区域,内含一个Text组件。
  private message = '弹窗'
  @State dialogIdIndex: number = 0
  @Builder customDialogComponent() {
    Column({ space: 5 }) {
      Text(this.message + this.dialogIdIndex)
        .fontSize(30)
    }
    .height(200)
    .padding(5)
    .justifyContent(FlexAlign.SpaceBetween)
  }
  1. 创建一个TextInput组件,在onChange事件函数中通过调用UIContext中的getPromptAction方法获取PromptAction对象,再通过该对象调用openCustomDialog接口,并设置focusable参数为false,以创建弹出框。
  TextInput()
    .onChange(() => {
      this.dialogIdIndex++
      this.getUIContext().getPromptAction().openCustomDialog({
        builder: () => {
          this.customDialogComponent()
        },
        focusable: false
      }).then((dialogId: number) => {
        setTimeout(() => {
          this.getUIContext().getPromptAction().closeCustomDialog(dialogId);
        }, 3000)
      })
    })

完整示例

当用户正在文本框中输入内容时,新弹出的弹出框不会关闭软键盘,焦点仍保留在文本框中。

  @Entry
  @Component
  export struct Index {
    private message = '弹窗'
    @State dialogIdIndex: number = 0
    @Builder customDialogComponent() {
      Column({ space: 5 }) {
        Text(this.message + this.dialogIdIndex)
          .fontSize(30)
      }
      .height(200)
      .padding(5)
      .justifyContent(FlexAlign.SpaceBetween)
    }

    build() {
      Column({ space: 5 }) {
        TextInput()
          .onChange(() => {
            this.dialogIdIndex++
            this.getUIContext().getPromptAction().openCustomDialog({
              builder: () => {
                this.customDialogComponent()
              },
              focusable: false
            }).then((dialogId: number) => {
              setTimeout(() => {
                this.getUIContext().getPromptAction().closeCustomDialog(dialogId);
              }, 3000)
            })
          })
      }.width('100%')
    }
  }

dialog-focusable-demo1

你可能感兴趣的鸿蒙文章

harmony 鸿蒙ArkUI(方舟UI框架)

harmony 鸿蒙全屏启动原子化服务组件(FullScreenLaunchComponent)

harmony 鸿蒙弧形按钮 (ArcButton)

harmony 鸿蒙动画衔接

harmony 鸿蒙动画概述

harmony 鸿蒙帧动画(ohos.animator)

harmony 鸿蒙实现属性动画

harmony 鸿蒙属性动画概述

harmony 鸿蒙弹出框概述

harmony 鸿蒙模糊

0  赞