未验证 提交 4703483b 编写于 作者: O openharmony_ci 提交者: Gitee

!1970 增加窗口开发指南

Merge pull request !1970 from 陈海莹/master
......@@ -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)
# 窗口管理
* 窗口
* 窗口开发概述
* 窗口开发指导
* [窗口开发概述](window-overview.md)
* [窗口开发指导](window-guidelines.md)
* 显示设备
* [屏幕属性开发概述](display-overview.md)
* [屏幕属性开发指导](display-guidelines.md)
......
# 窗口开发指导
# 场景介绍
窗口的接口层在应用进程运行,负责对页面布局的加载,和提供应用程序接口。
通过调用窗口接口可以实现窗口创建与销毁,窗口的位置、大小布局,以及进入沉浸式等。
## 接口说明
窗口开放的能力如下: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\<Window>): void | 创建子窗口。 |
| moveTo(x: number, y: number): Promise\<void> | 移动窗口位置,x值为正表示右移,y为正表示右移。 |
| resetSize(width: number, height: number): Promise\<void> | 改变当前窗口大小。 |
| hide(): Promise\<void> | 隐藏当前窗口。 |
| destroy(): Promise\<void> | 销毁当前窗口。 |
## 开发步骤
### 创建主窗口
在当前模型下,应用启动时会自动创建主窗口,由应用管理窗口的声明周期,隐藏及销毁由应用管理。
###创建子窗口
当前可以通过`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)
# 窗口开发概述
**窗口子系统**提供窗口管理和Display管理的基础能力,是系统图形界面显示所需的基础子系统。
窗口系统的作用,是提供一种机制,让多个应用界面复用同一块物理屏幕进行显示和交互。每个应用程序中,著需要实现被分配部分的显示区域内的交互界面,窗口作用应用界面的显示容器,而窗口系统负责将这些交互界面组织成最终用户见到的形态。
## 基本概念
**沉浸式**
应用窗口跟状态栏与导航栏颜色一致,视觉上融合。
## 运作机制
为了将图形界面显示在屏幕上,应用和系统需要向窗口系统申请窗口对象,这通常代表了屏幕上一块矩形区域,具有位置、宽高、和叠加层次等属性。同时,窗口对象也负责加载界面中UI框架的根节点,应用程序的UI界面就通过这个根节点在窗口中加载显示。
## 约束与限制
window API提供的相关接口除回调注册`on`,注销`off`为同步接口外,其余全部为异步接口。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册