HarmonyOS鸿蒙Next中子Window展示时是否可以保持主Window焦点状态

HarmonyOS鸿蒙Next中子Window展示时是否可以保持主Window焦点状态 由于业务需要,工程开发时希望定制键盘,且需要应用到Web页面中(不包含TextInput场景),进而考虑通过子Window展示定制键盘,用户操作后再传递到Web页面中。

在Demo测试过程中发现,假设主Window中包含TextInput,点击TextInput进入输入状态后创建子Window,当子Window展示后,主Window中的TextInput就丢失的焦点,取消了输入状态。

以上情况下,子Window展示时,是否可以保持主Window焦点状态?具体代码如下:

@Entry({ routeName: 'pages/window/WindowTestPage' })
@Component
export struct WindowTestPage {
  build() {
    Column() {
      Text('SubWindowTestPage')
    }
    .backgroundColor('#e5e5e5')
    .width('100%')
    .height('100%')
  }
}

@Entry
@Component
export struct WindowPage {
  private KeyBoardWindow: window.Window | undefined = undefined

  build() {
    List({ space: 20 }) {
      ListItem() {
        TextInput({ placeholder: '请输入内容' })
      }
      ListItem() {
        Text('创建子Window')
        .height(44)
        .width('100%')
        .textAlign(TextAlign.Center)
        .onClick(() => {
          this.createSubWindow()
        })
      }

      ListItem() {
        Text('关闭子Window')
        .height(44)
        .width('100%')
        .textAlign(TextAlign.Center)
        .onClick(() => {
          this.destroySubWindow()
        })
      }
    }
    .width('100%')
    .height('100%')
  }

  createSubWindow() {
    Single.getInstance().windowStage?.createSubWindow('WindowTestPage', (err: BusinessError, data) => {
      let errCode: number = err.code;
      if (errCode) {
        return;
      }
      this.KeyBoardWindow = data;
      const displayClass = display.getDefaultDisplaySync();
      const screenWidth = displayClass.width;
      const screenHeight = displayClass.height;

      this.KeyBoardWindow?.moveWindowTo(0, 1000, (err: BusinessError) => {
        let errCode: number = err.code;
        if (errCode) return;
        this.KeyBoardWindow?.resize(screenWidth, screenHeight - 1000, (err: BusinessError) => {
          let errCode: number = err.code;
          if (errCode) return;
          this.KeyBoardWindow?.setUIContent('pages/window/WindowTestPage', (err: BusinessError) => {
            let errCode: number = err.code;
            if (errCode) return;
            this.KeyBoardWindow?.showWindow((err: BusinessError) => {
              let errCode: number = err.code;
              if (errCode) {
                return;
              }
            });
          });
        });
      })
    }
  }

  destroySubWindow() {
    this.KeyBoardWindow?.destroyWindow()
  }
}

更多关于HarmonyOS鸿蒙Next中子Window展示时是否可以保持主Window焦点状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

兄弟,这个可以创建子窗口,点击子窗口默认无法让主窗口获焦。可以通过setWindowFocusable设置是否支持切换焦点窗口,参考文档链接:[‘https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-window-V13#setwindowfocusable9’]

更多关于HarmonyOS鸿蒙Next中子Window展示时是否可以保持主Window焦点状态的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,子Window展示时默认不会保持主Window的焦点状态。子Window的展示通常会暂时接管焦点,直到子Window关闭或焦点被手动切换回主Window。如果需要保持主Window的焦点状态,可以通过设置子Window的属性或使用相关的API来实现。具体实现方式需要根据应用场景和需求进行调整。

在HarmonyOS鸿蒙Next中,子Window展示时默认情况下不会保持主Window的焦点状态。焦点通常会转移到新展示的子Window上,以确保用户交互的连续性。如果需要保持主Window的焦点状态,可以通过编程方式控制焦点行为,例如在子Window显示时手动设置主Window的焦点。具体实现可以参考HarmonyOS的API文档,使用相关焦点管理方法来实现这一需求。

回到顶部