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```