如何实现折叠屏折叠态不适配旋转,展示态适配旋转

2024-12-18 15:51:04
123次阅读
0个评论
  1. 在module.json5添加属性"orientation": "unspecified"。 // module.json5

{
  "module": {
    ...
    ,
    "abilities": [
      {
        "name": "EntryAbility",
        ...,
        "orientation":"unspecified"  // 未定义方向模式,由系统判定
      }
    ]
  }
}
  1. 在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

登录 后评论。没有帐号? 注册 一个。