diff --git a/zh-cn/application-dev/Readme-CN.md b/zh-cn/application-dev/Readme-CN.md index 59d832ea6745d2aec8bc216883437981b8d3a84c..161512be40adc5e622985e081c2710bc903f498b 100644 --- a/zh-cn/application-dev/Readme-CN.md +++ b/zh-cn/application-dev/Readme-CN.md @@ -21,14 +21,15 @@ - [数据管理](database/Readme-CN.md) - [USB服务](usb/Readme-CN.md) - [DFX](dfx/Readme-CN.md) + - [窗口管理](windowmanager/Readme-CN.md) - 工具 - [DevEco Studio(OpenHarmony)使用指南](quick-start/deveco-studio-user-guide-for-openharmony.md) - 示例教程 - [示例代码](https://gitee.com/openharmony/app_samples/blob/master/README_zh.md) - [Codelabs](https://gitee.com/openharmony/codelabs/blob/master/README.md) -- API参考 +- API参考 - [组件参考(基于JS扩展的类Web开发范式)](reference/arkui-js/Readme-CN.md) - [组件参考(基于TS扩展的声明式开发范式)](reference/arkui-ts/Readme-CN.md) - [接口参考](reference/apis/Readme-CN.md) - 贡献 - - [参与贡献](../contribute/贡献文档.md) \ No newline at end of file + - [参与贡献](../contribute/贡献文档.md) diff --git a/zh-cn/application-dev/windowmanager/Readme-CN.md b/zh-cn/application-dev/windowmanager/Readme-CN.md index 3fd9703535131da3414947cd088cc75418cf9f02..2c417b95e5415083eb56b5defa79b52eb6ed6c13 100644 --- a/zh-cn/application-dev/windowmanager/Readme-CN.md +++ b/zh-cn/application-dev/windowmanager/Readme-CN.md @@ -1,8 +1,8 @@ # 窗口管理 * 窗口 - * 窗口开发概述 - * 窗口开发指导 + * [窗口开发概述](window-overview.md) + * [窗口开发指导](window-guidelines.md) * 显示设备 * [屏幕属性开发概述](display-overview.md) * [屏幕属性开发指导](display-guidelines.md) diff --git a/zh-cn/application-dev/windowmanager/window-guidelines.md b/zh-cn/application-dev/windowmanager/window-guidelines.md new file mode 100644 index 0000000000000000000000000000000000000000..0c4e6e252f43a041cb7d2ced3df7607064121657 --- /dev/null +++ b/zh-cn/application-dev/windowmanager/window-guidelines.md @@ -0,0 +1,109 @@ +# 窗口开发指导 + +# 场景介绍 +窗口的接口层在应用进程运行,负责对页面布局的加载,和提供应用程序接口。 +通过调用窗口接口可以实现窗口创建与销毁,窗口的位置、大小布局,以及进入沉浸式等。 + +## 接口说明 +窗口开放的能力如下:Window类,具体的API详见[接口文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md)。 + +**表1** 窗口主要接口API + +| 接口名 | 描述 | +| :----------------------------------------------------------- | :--------------------------------------------- | +| create(id: string, type: WindowType, callback: AsyncCallback\): void | 创建子窗口。 | +| moveTo(x: number, y: number): Promise\ | 移动窗口位置,x值为正表示右移,y为正表示右移。 | +| resetSize(width: number, height: number): Promise\ | 改变当前窗口大小。 | +| hide(): Promise\ | 隐藏当前窗口。 | +| destroy(): Promise\ | 销毁当前窗口。 | + +## 开发步骤 + +### 创建主窗口 + +在当前模型下,应用启动时会自动创建主窗口,由应用管理窗口的声明周期,隐藏及销毁由应用管理。 +###创建子窗口 +当前可以通过`create`接口创建子窗口。具体示例代码如下: + +``` + import window from '@ohos.window'; + var windowClass = null; + let promise = window.create("subWindow", window.WindowType.TYPE_APP); + promise.then((data)=> { + windowClass = data; + console.info('SubWindow created. Data: ' + JSON.stringify(data)) + }).catch((err)=>{ + console.error('Failed to create the subWindow. Cause: ' + JSON.stringify(err)); + }); +``` + +### 获取窗口对象 + +- 应用内可以通过`getTopWindow`来获取当前应用内最后显示的窗口。具体示例代码如下: + +``` + var windowClass = null; + let promise = window.getTopWindow(); + promise.then((data)=> { + windowClass = data; + console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data)) + }).catch((err)=>{ + console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err)); + }) +``` + +- 应用内也可以通过`Find`来获取已经创建的子窗口。具体示例代码如下: + +``` + var windowClass = null; + let promise = window.find("subWindow"); + promise.then((data)=> { + windowClass = data; + console.info('window found. Data: ' + JSON.stringify(data)) + }).catch((err)=>{ + console.error('Failed to find the Window. Cause: ' + JSON.stringify(err)); + }); +``` + +### 窗口的隐藏和销毁 + +在已经获取到窗口对象的前提下,可以调用`hide`、`destroy`来隐藏和销毁已经创建的窗口对象。具体示例代码如下: + +``` + let promise = windowClass.hide(); + promise.then((data)=> { + console.info('window hidden. Data: ' + JSON.stringify(data)) + windowClass.destroy((err, data) => { + if (err.code) { + console.error('Failed to destroy the window. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in destroying the window. Data: ' + JSON.stringify(data)) + }) + }).catch((err)=>{ + console.error('Failed to hide the window. Cause: ' + JSON.stringify(err)); + }) +``` + +### 设置沉浸式窗口 + +在已经获取到应用窗口对象的前提下: + +- 调用`setFullScreen`来设置窗口进入全屏沉浸式。 + +示例代码如下: + +``` +import window from '@ohos.window'; +.onClick(async () => { + try { + const win = await window.getTopWindow() + await win.setFullScreen(true) + } catch (err) { + console.log(`setFullScreen fail, code = ${err.code}`) + } +}) +``` + +完整[示例工程](https://gitee.com/openharmony/windowmanager/tree/master/AppDemo/window/immersive)。 + diff --git a/zh-cn/application-dev/windowmanager/window-overview.md b/zh-cn/application-dev/windowmanager/window-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..5fc7811424d937bf3e9a27c42cfc42923be50424 --- /dev/null +++ b/zh-cn/application-dev/windowmanager/window-overview.md @@ -0,0 +1,18 @@ +# 窗口开发概述 + +**窗口子系统**提供窗口管理和Display管理的基础能力,是系统图形界面显示所需的基础子系统。 +窗口系统的作用,是提供一种机制,让多个应用界面复用同一块物理屏幕进行显示和交互。每个应用程序中,著需要实现被分配部分的显示区域内的交互界面,窗口作用应用界面的显示容器,而窗口系统负责将这些交互界面组织成最终用户见到的形态。 + +## 基本概念 + +**沉浸式** + +应用窗口跟状态栏与导航栏颜色一致,视觉上融合。 + +## 运作机制 + +为了将图形界面显示在屏幕上,应用和系统需要向窗口系统申请窗口对象,这通常代表了屏幕上一块矩形区域,具有位置、宽高、和叠加层次等属性。同时,窗口对象也负责加载界面中UI框架的根节点,应用程序的UI界面就通过这个根节点在窗口中加载显示。 + +## 约束与限制 + +window API提供的相关接口除回调注册`on`,注销`off`为同步接口外,其余全部为异步接口。 \ No newline at end of file