#鸿蒙通关秘籍#如何在Page中创建和销毁子窗口?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
JWT梦幻境

可以在HarmonyOS的某个页面中通过按钮点击事件来创建或销毁子窗口。以下是实现的步骤:

  1. 首先在EntryAbility中传递windowStage到要处理的页面。
  2. 在页面中,通过按钮点击事件创建子窗口。
  3. 为子窗口设置大小、位置及其内容。
  4. 通过点击事件销毁子窗口。

示例代码:

javascript // EntryAbility.ets onWindowStageCreate(windowStage: window.WindowStage) { windowStage.loadContent('pages/Index', (err) => { if (err.code) { console.error('加载内容失败: ' + JSON.stringify(err)); return; } console.info('成功加载内容'); }) AppStorage.setOrCreate('windowStage', windowStage); }

// Index.ets import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit';

let windowStage_: window.WindowStage | undefined = undefined; let sub_windowClass: window.Window | undefined = undefined;

@Entry @Component struct Index { @State message: string = 'Hello World';

private CreateSubWindow(){ windowStage_ = AppStorage.get('windowStage'); if (windowStage_ == null) { console.error('创建子窗口失败: windowStage_ is null'); } else { windowStage_.createSubWindow("mySubWindow", (err: BusinessError, data) => { if (err.code) { console.error('创建子窗口失败: ' + JSON.stringify(err)); return; } sub_windowClass = data; sub_windowClass.moveWindowTo(300, 300, (err: BusinessError) => { if (err.code) { console.error('移动窗口失败: ' + JSON.stringify(err)); return; } }); sub_windowClass.resize(500, 500, (err: BusinessError) => { if (err.code) { console.error('改变窗口大小失败: ' + JSON.stringify(err)); return; } }); sub_windowClass.setUIContent("pages/subWindow", (err: BusinessError) => { if (err.code) { console.error('加载内容失败: ' + JSON.stringify(err)); return; } sub_windowClass.showWindow((err: BusinessError) => { if (err.code) { console.error('显示窗口失败: ' + JSON.stringify(err)); return; } }); }); }) } }

private destroySubWindow(){ (sub_windowClass as window.Window).destroyWindow((err: BusinessError) => { if (err.code) { console.error('销毁窗口失败: ' + JSON.stringify(err)); return; } }); }

build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) Button(){ Text('CreateSubWindow') .fontSize(24) }.width(220).height(68) .onClick(() => this.CreateSubWindow()) Button(){ Text('destroySubWindow') .fontSize(24) }.width(220).height(68) .onClick(() => this.destroySubWindow()) } .width('100%') } .height('100%') } }

// subWindow.ets @Entry @Component struct SubWindow { @State message: string = 'Hello subWindow'; build() { Row() { Column() { Text(this.message) .fontSize(50) } .width('100%') } .height('100%') } }

分享
微博
QQ
微信
回复
2天前
相关问题