弹出框焦点策略
=======

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

从API version 19开始，可以通过设置[focusable](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-promptaction#basedialogoptions11)参数来管理弹出框是否获取焦点。

#### 使用约束

[openCustomDialog](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-uicontext-custom-dialog)和[CustomDialog](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-common-components-custom-dialog)支持通过focusable参数来管理弹出框是否获取焦点。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d2/v3/xzoBW1L8SE-pPp0sEjjbuw/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132303Z&HW-CC-Expire=86400&HW-CC-Sign=287844E3BAA2C63891EFA93658BC04FD7D86165C18509A5DE9C038714910E7BA)

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

#### 创建不获取焦点的弹出框

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f1/v3/esjoX7tTRPOx6CmWqNlP1Q/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132303Z&HW-CC-Expire=86400&HW-CC-Sign=3BA0E31C95C4F8E26EC0124518BAEB4ED4F052A93A0253B7A14225E29FE7121E)

详细变量定义请参考[完整示例](#完整示例)。

1.  初始化一个弹出框内容区域，内含一个Text组件。
    
    @State dialogIdIndex: number = 0;
    // 请在resources\\base\\element\\string.json文件中配置name为'dialog\_message'，value为非空字符串的资源
    private message: string =
      this.getUIContext().getHostContext()?.resourceManager.getStringByNameSync('dialog\_message') as string;
    
    @Builder
    customDialogComponent() {
      Column({ space: 5 }) {
        Text(this.message + this.dialogIdIndex)
          .fontSize(30)
      }
      .height(200)
      .padding(5)
      .justifyContent(FlexAlign.SpaceBetween)
    }
    
2.  创建一个TextInput组件，在onChange事件函数中通过调用[UIContext](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-uicontext)中的[getPromptAction](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-uicontext#getpromptaction)方法获取[PromptAction](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-promptaction)对象，再通过该对象调用[openCustomDialog](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-promptaction#opencustomdialog12)接口，并设置[focusable](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-promptaction#basedialogoptions11)参数为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 {
  @State dialogIdIndex: number = 0;
  // 请在resources\\base\\element\\string.json文件中配置name为'dialog\_message'，value为非空字符串的资源
  private message: string =
    this.getUIContext().getHostContext()?.resourceManager.getStringByNameSync('dialog\_message') as string;

  @Builder
  customDialogComponent() {
    Column({ space: 5 }) {
      Text(this.message + this.dialogIdIndex)
        .fontSize(30)
    }
    .height(200)
    .padding(5)
    .justifyContent(FlexAlign.SpaceBetween)
  }


  build() {
    NavDestination() {
      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%')
    }
  }
}

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/59/v3/QD3jjsGaQfq6eT1x1Wa5OQ/zh-cn_image_0000002664327717.gif?HW-CC-KV=V1&HW-CC-Date=20260709T132303Z&HW-CC-Expire=86400&HW-CC-Sign=EB614B7EBDF3AB4EEBC8A02106BD3405F92C538981805743BA74EEB0B7C50381)