• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 窗口管理开发常见问题
2
3## 如何获取状态栏和导航栏高度
4
5适用于OpenHarmony 3.2 Beta5  API 9
6
7**解决措施**
8
9在加载窗口内容之前,采用systemAvoidAreaChange事件监听。
10
11**代码示例**
12
13```
14// MainAbility.ts
15import window from '@ohos.window';
16
17/**
18 * 设置沉浸式窗口,并获取状态栏和导航栏高度
19 * @param mainWindow 主窗口对象
20 */
21async function enterImmersion(mainWindow: window.Window) {
22  mainWindow.on("systemBarTintChange", (data) => {
23    let avoidAreaRect = data.regionTint[0].region; //data.regionTint是个数组,包含状态栏、导航栏的矩形区域坐标。
24  })
25  await mainWindow.setFullScreen(true)
26  await mainWindow.setSystemBarEnable(["status", "navigation"])
27  await mainWindow.systemBarProperties({
28    navigationBarColor: "#00000000",
29    statusBarColor: "#00000000",
30    navigationBarContentColor: "#FF0000",
31    statusBarContentColor: "#FF0000"
32  })
33}
34export default class MainAbility extends Ability {
35  // do something
36  async onWindowStageCreate(windowStage: window.WindowStage) {
37    let mainWindow = await windowStage.getMainWindow()
38    await enterImmersion(mainWindow)
39    windowStage.loadContent('pages/index')
40  }
41  // do something
42}
43```
44
45## 应用如何设置隐藏顶部的状态栏
46
47适用于OpenHarmony 3.2 Beta5  API 9
48
49**解决措施**
50
51在UIAbility的onWindowStageCreate的生命周期中设置setWindowSystemBarEnable接口即可。
52
53**代码示例**
54
55```
56onWindowStageCreate(windowStage){
57  windowStage.getMainWindowSync().setWindowSystemBarEnable([])
58  ......
59}
60```
61
62**参考链接**
63
64[窗口基础能力文档](../reference/apis/js-apis-window.md)
65
66## 如何锁定设备竖屏,使得窗口不随屏幕旋转
67
68适用于:OpenHarmony SDK 3.2 Beta5 API 9 Stage模型
69
70**解决措施**
71
72采用窗口的setPreferredOrientation方法可以实现该效果,将orientation参数设置为window.Orientation.PORTRAIT时,可锁定屏幕为竖屏。
73
74**代码示例**
75
76```
77import window from "@ohos.window";
78//1.获取窗口实例对象,新建窗口使用createWindow方法,获取已有的窗口使用findWindow方法
79let windowClass = null;
80let config = {name: "alertWindow", windowType: window.WindowType.TYPE_SYSTEM_ALERT, ctx: this.context};
81try {
82    let promise = window.createWindow(config);
83    promise.then((data)=> {
84        windowClass = data;
85        console.info('Succeeded in creating the window. Data:' + JSON.stringify(data));
86    }).catch((err)=>{
87        console.error('Failed to create the Window. Cause:' + JSON.stringify(err));
88    });} catch (exception) {
89    console.error('Failed to create the window. Cause: ' + JSON.stringify(exception));
90}
91//2.窗口实例使用setPreferredOrientation方法,设置窗口的显示方向,PROTRAIT为固定竖屏,其他方向可参照参考链接
92let orientation = window.Orientation.PORTRAIT;
93if (windowClass) {
94    windowClass.setPreferredOrientation(orientation, (err) => {
95        if (err.code) {
96            console.error('Failed to set window orientation. Cause: ' + JSON.stringify(err));
97            return;
98        }
99        console.info('Succeeded in setting window orientation.');
100}
101```
102
103**参考链接**
104
105[window.Orientation](../reference/apis/js-apis-window.md#orientation9)
106
107## 调用Window实例的setWindowSystemBarProperties接口设置窗口状态栏和导航栏的高亮属性时不生效
108
109适用于:OpenHarmony SDK 3.2 Beta5 API9 Stage模型
110
111**解决措施**
112
113状态栏字体高亮属性的本质就只是让字体变成白色。调用window实例的setWindowSystemBarProperties接口时,如果设置了状态栏内容颜色statusBarContentColor,就以开发者设置的颜色为准,isStatusBarLightIcon状态栏字体高亮属性就不生效;同理,如果设置了导航栏内容颜色navigationBarContentColor,isNavigationBarLightIcon导航栏字体高亮属性就不生效。
114
115**参考链接**
116
117[window.SystemBarProperties](../reference/apis/js-apis-window.md#systembarproperties)
118
119## 如何保持屏幕常亮
120
121适用于:OpenHarmony 3.2 Beta5 API9
122
123**解决措施**
124
125设置屏幕常亮,不熄屏。
126
127获取窗口实例对象后,调用[setWindowKeepScreenOn方法](../reference/apis/js-apis-window.md#setwindowkeepscreenon9)可设置屏幕是否常亮。
128
129```
130let isKeepScreenOn = true;
131try {
132    windowClass.setWindowKeepScreenOn(isKeepScreenOn, (err) => {
133        if (err.code) {
134            console.error('Failed to set the screen to be always on. Cause: ' + JSON.stringify(err));
135            return;
136        }
137        console.info('Succeeded in setting the screen to be always on.');
138    });
139} catch (exception) {
140    console.error('Failed to set the screen to be always on. Cause: ' + JSON.stringify(exception));
141}
142```
143
144## 如何监听窗口大小的变化
145
146适用于:OpenHarmony 3.2 Beta5 API9
147
148**解决措施**
149
150获取窗口实例对象后,可以通过窗口的on\('windowSizeChange'\)方法实现对窗口尺寸大小变化的监听
151
152```
153try {
154    windowClass.on('windowSizeChange', (data) => {
155        console.info('Succeeded in enabling the listener for window size changes. Data: ' + JSON.stringify(data));
156   });
157} catch (exception) {
158    console.error('Failed to enable the listener for window size changes. Cause: ' + JSON.stringify(exception));
159}
160```
161
162**参考链接**
163
164[window.on\("windowSizeChange"\)](../reference/apis/js-apis-window.md#onwindowsizechange7)
165
166