import window from '@ohos.window'; import mediaquery from '@ohos.mediaquery'; import { Log } from './Log'; export class ScreenUtil { // TODO: 工具待抽离, key统一定义 static readonly isPortraitKey: string = "screen_is_portrait"; private static instance: ScreenUtil; public width: number = 0 public height: number = 0 public statusBarHeight: number = 0 public bottomSafeHeight: number = 0 public contentHeight: number = 0; public layoutWidth: number = 0 public layoutHeight: number = 0 private portraitListener: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: portrait)'); public static getInstance(): ScreenUtil { if (!ScreenUtil.instance) { ScreenUtil.instance = new ScreenUtil(); } return ScreenUtil.instance; } initScreenSize(): void { this.portraitListener.on('change', (result)=> { AppStorage.setOrCreate(ScreenUtil.isPortraitKey, result.matches) }) window.getLastWindow(getContext(this)) .then((windowClass: window.Window) => { let type = window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR; // 以导航条避让为例 let avoidArea = windowClass.getWindowAvoidArea(type); this.bottomSafeHeight = px2vp(avoidArea.bottomRect.height); // 获取到导航条区域的高度 type = window.AvoidAreaType.TYPE_SYSTEM; avoidArea = windowClass.getWindowAvoidArea(type); this.statusBarHeight = px2vp(avoidArea.topRect.height); this.width = px2vp(windowClass.getWindowProperties().windowRect.width); this.height = px2vp(windowClass.getWindowProperties().windowRect.height); this.layoutWidth = this.width; this.layoutHeight = this.height - this.statusBarHeight - this.bottomSafeHeight; }) .catch((error: Error) => { }) } setPreferredOrientation(orientation: window.Orientation): void { window.getLastWindow(getContext(this)) .then((windowClass: window.Window) => { windowClass.setPreferredOrientation(orientation); }) .catch((error: Error) => { }) } setPreferredOrientationCallBack(orientation: window.Orientation, callback: ()=>void): void{ window.getLastWindow(getContext(this)) .then((windowClass: window.Window) => { windowClass.setPreferredOrientation(orientation,callback); AppStorage.setOrCreate(ScreenUtil.isPortraitKey, orientation == window.Orientation.PORTRAIT || orientation == window.Orientation.PORTRAIT_INVERTED); }) .catch((error: Error) => { }) } setWindowLayoutFullScreen(isLayoutFullScreen: boolean): void { window.getLastWindow(getContext(this)) .then((windowClass: window.Window) => { windowClass.setWindowLayoutFullScreen(isLayoutFullScreen); windowClass.setSpecificSystemBarEnabled('status', !isLayoutFullScreen); }) .catch((error: Error) => { }) } setWindowSystemBarProperties(systemBarProperties: window.SystemBarProperties): void { window.getLastWindow(getContext(this)) .then((windowClass: window.Window) => { windowClass.setWindowSystemBarProperties(systemBarProperties, (err) => { if (err.code) { console.error('Failed to set the system bar properties. Cause: ' + JSON.stringify(err)); return; } console.info('Succeeded in setting the system bar properties.'); }); }) .catch((error: Error) => { }) } setWindowSystemBarEnable(names:Array<'status' | 'navigation'>){ window.getLastWindow(getContext(this)) .then((windowClass: window.Window) => { windowClass.setWindowSystemBarEnable(names, (err) => { if (err.code) { console.error('Failed to set the system bar properties. Cause: ' + JSON.stringify(err)); return; } console.info('Succeeded in setting the system bar properties.'); }); }) .catch((error: Error) => { }) } setWindowKeepScreenOn(isKeep: boolean) { Log.i(`setWindowKeepScreenOn:${isKeep}`) window.getLastWindow(getContext(this)) .then((windowClass: window.Window) => { windowClass.setWindowKeepScreenOn(isKeep); }); } }