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