应用子窗口的开发流程是什么

应用子窗口的开发流程是什么

HarmonyOS
2024-01-30 20:28:28
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
ilikevc

1. 通过createSubWindow接口创建应用子窗口。

2. 子窗口创建成功后,可以设置子窗口属性,改变其大小、位置等,还可以根据应用需要设置窗口背景色、亮度等属性。

3. 通过setUIContent和showWindow接口加载显示子窗口的具体内容。

4. 当不再需要某些子窗口时,可根据具体实现逻辑,使用destroyWindow接口销毁子窗口。

示例代码如下:

import UIAbility from '@ohos.app.ability.UIAbility'; 
import window from '@ohos.window'; 
import { BusinessError } from '@ohos.base'; 
 
let windowStage_: window.WindowStage | null = null; 
let sub_windowClass: window.Window | null = null; 
 
export default class EntryAbility extends UIAbility { 
  showSubWindow() { 
    // 1.创建应用子窗口。 
    if (windowStage_ == null) { 
      console.error('Failed to create the subwindow. Cause: windowStage_ is null'); 
    } else { 
      windowStage_.createSubWindow("mySubWindow", (err: BusinessError, data) => { 
        if (err.code) { 
          console.error('Failed to create the subwindow. Cause: ' + JSON.stringify(err)); 
          return; 
        } 
        sub_windowClass = data; 
        // 2.子窗口创建成功后,设置子窗口的位置、大小及相关属性等。 
        sub_windowClass.moveWindowTo(300, 300, (err: BusinessError) => { 
          if (err.code) { 
            console.error('Failed to move the window. Cause:' + JSON.stringify(err)); 
            return; 
          } 
          console.info('Succeeded in moving the window.'); 
        }); 
        sub_windowClass.resize(500, 500, (err: BusinessError) => { 
          if (err.code) { 
            console.error('Failed to change the window size. Cause:' + JSON.stringify(err)); 
            return; 
          } 
          console.info('Succeeded in changing the window size.'); 
        }); 
        // 3.为子窗口加载对应的目标页面。 
        sub_windowClass.setUIContent("pages/page3", (err: BusinessError) => { 
          if (err.code) { 
            console.error('Failed to load the content. Cause:' + JSON.stringify(err)); 
            return; 
          } 
          // 3.显示子窗口。 
          (sub_windowClass as window.Window).showWindow((err: BusinessError) => { 
            if (err.code) { 
              console.error('Failed to show the window. Cause: ' + JSON.stringify(err)); 
              return; 
            } 
            console.info('Succeeded in showing the window.'); 
          }); 
        }); 
      }) 
    } 
  } 
  destroySubWindow() { 
    // 4.销毁子窗口。当不再需要子窗口时,可根据具体实现逻辑,使用destroy对其进行销毁。 
    (sub_windowClass as window.Window).destroyWindow((err: BusinessError) => { 
      if (err.code) { 
        console.error('Failed to destroy the window. Cause: ' + JSON.stringify(err)); 
        return; 
      } 
    }); 
  } 
  onWindowStageCreate(windowStage: window.WindowStage) { 
    windowStage_ = windowStage; 
    // 开发者可以在适当的时机,如主窗口上按钮点击事件等,创建子窗口。并不一定需要在onWindowStageCreate调用,这里仅作展示 
    this.showSubWindow(); 
  } 
  onWindowStageDestroy() { 
    // 开发者可以在适当的时机,如子窗口上点击关闭按钮等,销毁子窗口。并不一定需要在onWindowStageDestroy调用,这里仅作展示 
    this.destroySubWindow(); 
  } 
};
已于2024-2-4 13:48:01修改
分享
微博
QQ
微信
回复
2024-02-01 00:30:38
相关问题
物联网应用开发NOOBS是什么
4690浏览 • 1回复 待解决
arkTS无法创建窗口有了解吗?
854浏览 • 0回复 待解决
鸿蒙开发现在最缺是什么
5453浏览 • 2回复 待解决
ets开发关闭窗口组件问题
1614浏览 • 1回复 待解决
应用、元服务和卡片是什么关系
192浏览 • 1回复 待解决
如何固定应用窗口大小并居中展示
297浏览 • 1回复 待解决
OceanBase优势是什么
2696浏览 • 1回复 待解决