import { display, window } from '@kit.ArkUI'; import { common } from '@kit.AbilityKit'; export class WindowHelper { /** * 缓存窗体,关闭时需要 * 同时只能出现一个窗口,所以只做一个缓存就可以 */ private static cacheWindow: window.Window | null = null; /** * 根据参数创建窗口 * @param options * @returns */ static async open(options: WinOptions): Promise { if (WindowHelper.cacheWindow) { options.callBack && options.callBack(-1, '窗口已存在') return } if (!options) { options = new WinOptions(); } if (!options.name) { options.name = 'window'; } if (options.windowType == undefined) { options.windowType = window.WindowType.TYPE_DIALOG; } if (!options.bgColor) { options.bgColor = '#33606266'; } try { //创建窗口 let windowClass = await window.createWindow({ name: options.name, windowType: options.windowType, ctx: getContext() as common.UIAbilityContext }); //将窗口缓存 WindowHelper.cacheWindow = windowClass; await windowClass.setUIContent(options.router); //获取屏幕四大角 let d = display.getDefaultDisplaySync(); //设置窗口大小 await windowClass.resize(d.width, d.height); // 设置窗口背景颜色 windowClass.setWindowBackgroundColor(options.bgColor); //显示窗口 await windowClass.showWindow(); } catch (exception) { options.callBack && options.callBack(-1, '创建窗口失败,原因为:' + JSON.stringify(exception)) } } /** * 关闭窗口 * @returns */ static async close(): Promise { if (WindowHelper.cacheWindow) { await WindowHelper.cacheWindow.destroyWindow(); WindowHelper.cacheWindow = null } } } /** * 窗口入参对象 */ class WinOptions { /** * 窗口名称 默认window */ name?: string; /** * 窗口类型 默认TYPE_DIALOG */ windowType?: window.WindowType; /** *窗口要显示的路由 如:pages/Welcome需要在main_pages.json中声明 */ router: string = ''; /** * 窗口背景颜色,默认#33606266 */ bgColor?: string; /** * 窗口创建回调函数 */ callBack?: (code: number, msg: string) => void; }