如何实现折叠屏折叠态不适配旋转,展示态适配旋转
2024-12-18 15:51:04
123次阅读
0个评论
- 在module.json5添加属性"orientation": "unspecified"。 // module.json5
{
"module": {
...
,
"abilities": [
{
"name": "EntryAbility",
...,
"orientation":"unspecified" // 未定义方向模式,由系统判定
}
]
}
}
- 在EntryAbility.ets中的onWindowStageCreate方法中设置监听,如果是展开态,则设置跟随系统竖屏、横屏、反向竖屏、反向横屏,如果是折叠态则设置固定竖屏。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { display, window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
windowStage.getMainWindow().then((windowObj) => {
let orientation = display.getFoldStatus() === display.FoldStatus.FOLD_STATUS_EXPANDED ?
window.Orientation.AUTO_ROTATION : window.Orientation.PORTRAIT;
windowObj?.setPreferredOrientation(orientation);
// 监听折叠屏的展开态或折叠态
display.on('foldStatusChange', (foldStatus: display.FoldStatus) => {
orientation = foldStatus === display.FoldStatus.FOLD_STATUS_EXPANDED ? window.Orientation.AUTO_ROTATION :
window.Orientation.PORTRAIT;
try {
windowObj?.setPreferredOrientation(orientation, (err: BusinessError) => {
const errCode: number = err.code;
if (errCode) {
console.error(`Failed to set window orientation. Cause code: ${err.code}, message: ${err.message}`);
return;
}
console.info('Succeeded in setting window orientation.');
});
} catch (exception) {
console.error(`Failed to set window orientation. Cause code: ${exception.code}, message: ${exception.message}`);
}
})
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
00
- 1回答
- 0粉丝
- 0关注