1# 窗口子系统变更说明 2 3## cl.window.1 setWindowLayoutFullScreen、setImmersiveModeEnabledState接口在2in1设备和平板设备的自由多窗模式上禁用 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11因为phone设备上的沉浸式是应用布局全屏且窗口与系统状态栏与导航条交叠,而平板设备的自由多窗模式上的沉浸式是应用布局全屏且窗口与导航条交叠,2in1设备上的沉浸式是应用布局全屏且隐藏系统状态栏和Dock栏,行为与phone设备不一致。所以在2in1设备和平板设备的自由多窗模式上禁用setWindowLayoutFullScreen、setImmersiveModeEnabledState接口,只能调用maximize接口设置进入/退出沉浸式,在进入最大化时通过maximize接口的入参控制状态栏和Dock栏的隐藏/显示状态。 12 13**变更影响** 14 15该变更为不兼容变更。 16 17变更前:2in1设备和平板设备的自由多窗模式上调用setWindowLayoutFullScreen、setImmersiveModeEnabledState接口,窗口进入/退出沉浸式。 18 19变更后:2in1设备和平板设备的自由多窗模式上调用setWindowLayoutFullScreen、setImmersiveModeEnabledState接口不生效。 20 21**起始 API Level** 22 23setWindowLayoutFullScreen接口从API version 9开始支持 24 25setImmersiveModeEnabledState接口从API version 12开始支持 26 27**变更发生版本** 28 29从OpenHarmony SDK 5.0.0.56开始。 30 31**变更的接口/组件** 32 33@ohos.window.d.ts 34 35系统能力:SystemCapability.Window.SessionManager 36 37接口:setWindowLayoutFullScreen、setImmersiveModeEnabledState 38 39**适配指导** 40 412in1设备和平板设备的自由多窗模式上需要调用[maximize](../../../application-dev/reference/apis-arkui/js-apis-window.md#maximize12)接口实现窗口沉浸式状态设置。 42 43当调用[setWindowLayoutFullScreen](../../../application-dev/reference/apis-arkui/js-apis-window.md#setwindowlayoutfullscreen9)接口时,建议同时调用setWindowLayoutFullScreen和maximize接口。 44 45当调用[setImmersiveModeEnabledState](../../../application-dev/reference/apis-arkui/js-apis-window.md#setimmersivemodeenabledstate12)接口时,建议同时调用setImmersiveModeEnabledState和maximize接口。 46 47示例: 48 49```ts 50// EntryAbility.ets 51import { BusinessError } from '@kit.BasicServicesKit'; 52 53export default class EntryAbility extends UIAbility { 54 // ... 55 onWindowStageCreate(windowStage: window.WindowStage): void { 56 console.info('onWindowStageCreate'); 57 let windowClass: window.Window | undefined = undefined; 58 windowStage.getMainWindow((err: BusinessError, data) => { 59 const errCode: number = err.code; 60 if (errCode) { 61 console.error(`Failed to obtain the main window. Cause code: ${err.code}, message: ${err.message}`); 62 return; 63 } 64 windowClass = data; 65 let isLayoutFullScreen = true; 66 try { 67 let promise = windowClass.setWindowLayoutFullScreen(isLayoutFullScreen); 68 promise.then(() => { 69 console.info('Succeeded in setting the window layout to full-screen mode.'); 70 }).catch((err: BusinessError) => { 71 console.error(`Failed to set the window layout to full-screen mode. Cause code: ${err.code}, message: ${err.message}`); 72 }); 73 } catch (exception) { 74 console.error(`Failed to set the window layout to full-screen mode. Cause code: ${exception.code}, message: ${exception.message}`); 75 } 76 77 try { 78 let promise = windowClass.maximize(window.MaximizePresentation.ENTER_IMMERSIVE); 79 promise.then(() => { 80 console.info('Succeeded in maximizing the window.'); 81 }).catch((err: BusinessError) => { 82 console.error(`Failed to maximize the window. Cause code: ${err.code}, message: ${err.message}`); 83 }); 84 } catch (exception) { 85 console.error(`Failed to maximize the window. Cause code: ${exception.code}, message: ${exception.message}`); 86 } 87 }); 88 } 89} 90``` 91 92```ts 93// EntryAbility.ets 94import { BusinessError } from '@kit.BasicServicesKit'; 95 96export default class EntryAbility extends UIAbility { 97 // ... 98 onWindowStageCreate(windowStage: window.WindowStage): void { 99 console.info('onWindowStageCreate'); 100 let windowClass: window.Window | undefined = undefined; 101 windowStage.getMainWindow((err: BusinessError, data) => { 102 const errCode: number = err.code; 103 if (errCode) { 104 console.error(`Failed to obtain the main window. Cause code: ${err.code}, message: ${err.message}`); 105 return; 106 } 107 windowClass = data; 108 try { 109 let enabled = true; 110 windowClass.setImmersiveModeEnabledState(enabled); 111 } catch (exception) { 112 console.error(`Failed to set the window immersive mode enabled status. Cause code: ${exception.code}, message: ${exception.message}`); 113 } 114 115 try { 116 let promise = windowClass.maximize(window.MaximizePresentation.ENTER_IMMERSIVE); 117 promise.then(() => { 118 console.info('Succeeded in maximizing the window.'); 119 }).catch((err: BusinessError) => { 120 console.error(`Failed to maximize the window. Cause code: ${err.code}, message: ${err.message}`); 121 }); 122 } catch (exception) { 123 console.error(`Failed to maximize the window. Cause code: ${exception.code}, message: ${exception.message}`); 124 } 125 }); 126 } 127} 128```