鸿蒙NEXT开发屏幕相关工具类(ArkTs)

发布于:2025-04-11 ⋅ 阅读:(29) ⋅ 点赞:(0)
import { display } from '@kit.ArkUI';
import { Callback } from '@kit.BasicServicesKit';

/**
 * 屏幕相关工具类
 * author: 鸿蒙布道师
 * since: 2025/04/10
 */
export class DisplayUtil {

  /**
   * 获取当前默认的 display 对象。
   * @returns 当前默认的 display 对象。
   */
  private static getDefaultDisplaySync(): display.Display {
    return display.getDefaultDisplaySync();
  }

  /**
   * 获取设备的屏幕宽度,单位为 px。
   * @returns 屏幕宽度。
   */
  static getWidth(): number {
    return DisplayUtil.getDefaultDisplaySync().width;
  }

  /**
   * 获取设备的屏幕高度,单位为 px。
   * @returns 屏幕高度。
   */
  static getHeight(): number {
    return DisplayUtil.getDefaultDisplaySync().height;
  }

  /**
   * 获取设备当前显示的方向。
   * Orientation:
   *   PORTRAIT (0): 竖屏方式显示。
   *   LANDSCAPE (1): 横屏方式显示。
   *   PORTRAIT_INVERTED (2): 反向竖屏方式显示。
   *   LANDSCAPE_INVERTED (3): 反向横屏方式显示。
   * @returns 当前显示方向。
   */
  static getOrientation(): display.Orientation {
    return DisplayUtil.getDefaultDisplaySync().orientation;
  }

  /**
   * 获取设备的状态。
   * DisplayState:
   *   STATE_UNKNOWN (0): 显示设备状态未知。
   *   STATE_OFF (1): 显示设备关闭。
   *   STATE_ON (2): 显示设备开启。
   *   STATE_DOZE (3): 显示设备低电耗模式。
   *   STATE_DOZE_SUSPEND (4): 显示设备睡眠模式(CPU挂起)。
   *   STATE_VR (5): 显示设备VR模式。
   *   STATE_ON_SUSPEND (6): 显示设备开启状态(CPU挂起)。
   * @returns 当前显示状态。
   */
  static getDisplayState(): display.DisplayState {
    return DisplayUtil.getDefaultDisplaySync().state;
  }

  /**
   * 获取挖孔屏、刘海屏等不可用屏幕区域信息。
   * 建议应用布局规避该区域。
   * @returns 不可用屏幕区域信息。
   */
  static async getCutoutRect(): Promise<display.Rect> {
    const cutoutInfo = await DisplayUtil.getDefaultDisplaySync().getCutoutInfo();
    return cutoutInfo.boundingRects[0];
  }

  /**
   * 获取挖孔屏、刘海屏等不可用屏幕区域的高度,单位 px。
   * @returns 不可用屏幕区域的高度。
   */
  static async getCutoutHeight(): Promise<number> {
    const rect = await DisplayUtil.getCutoutRect();
    return rect ? rect.height : 0;
  }

  /**
   * 检查设备是否可折叠。
   * @returns 是否可折叠。
   */
  static isFoldable(): boolean {
    return display.isFoldable();
  }

  /**
   * 获取可折叠设备的当前折叠状态。
   * FoldStatus:
   *   FOLD_STATUS_UNKNOWN (0): 折叠状态未知。
   *   FOLD_STATUS_EXPANDED (1): 完全展开。
   *   FOLD_STATUS_FOLDED (2): 折叠。
   *   FOLD_STATUS_HALF_FOLDED (3): 半折叠。
   * @returns 当前折叠状态。
   */
  static getFoldStatus(): display.FoldStatus {
    return display.getFoldStatus();
  }

  /**
   * 获取可折叠设备的显示模式。
   * FoldDisplayMode:
   *   FOLD_DISPLAY_MODE_UNKNOWN (0): 折叠显示模式未知。
   *   FOLD_DISPLAY_MODE_FULL (1): 全屏显示。
   *   FOLD_DISPLAY_MODE_MAIN (2): 主屏幕显示。
   *   FOLD_DISPLAY_MODE_SUB (3): 子屏幕显示。
   *   FOLD_DISPLAY_MODE_COORDINATION (4): 双屏协同显示。
   * @returns 当前折叠显示模式。
   */
  static getFoldDisplayMode(): display.FoldDisplayMode {
    return display.getFoldDisplayMode();
  }

  /**
   * 开启折叠设备折叠状态变化的监听。
   * @param callback 回调函数。
   */
  static onFoldStatusChange(callback: Callback<display.FoldStatus>): void {
    display.on('foldStatusChange', callback);
  }

  /**
   * 关闭折叠设备折叠状态变化的监听。
   * @param callback 回调函数(可选)。
   */
  static offFoldStatusChange(callback?: Callback<display.FoldStatus>): void {
    display.off('foldStatusChange', callback);
  }
}
代码如下:
import { display } from '@kit.ArkUI';
import { Callback } from '@kit.BasicServicesKit';

/**
 * 屏幕相关工具类
 * author: 鸿蒙布道师
 * since: 2025/04/10
 */
export class DisplayUtil {

  /**
   * 获取当前默认的 display 对象。
   * @returns 当前默认的 display 对象。
   */
  private static getDefaultDisplaySync(): display.Display {
    return display.getDefaultDisplaySync();
  }

  /**
   * 获取设备的屏幕宽度,单位为 px。
   * @returns 屏幕宽度。
   */
  static getWidth(): number {
    return DisplayUtil.getDefaultDisplaySync().width;
  }

  /**
   * 获取设备的屏幕高度,单位为 px。
   * @returns 屏幕高度。
   */
  static getHeight(): number {
    return DisplayUtil.getDefaultDisplaySync().height;
  }

  /**
   * 获取设备当前显示的方向。
   * Orientation:
   *   PORTRAIT (0): 竖屏方式显示。
   *   LANDSCAPE (1): 横屏方式显示。
   *   PORTRAIT_INVERTED (2): 反向竖屏方式显示。
   *   LANDSCAPE_INVERTED (3): 反向横屏方式显示。
   * @returns 当前显示方向。
   */
  static getOrientation(): display.Orientation {
    return DisplayUtil.getDefaultDisplaySync().orientation;
  }

  /**
   * 获取设备的状态。
   * DisplayState:
   *   STATE_UNKNOWN (0): 显示设备状态未知。
   *   STATE_OFF (1): 显示设备关闭。
   *   STATE_ON (2): 显示设备开启。
   *   STATE_DOZE (3): 显示设备低电耗模式。
   *   STATE_DOZE_SUSPEND (4): 显示设备睡眠模式(CPU挂起)。
   *   STATE_VR (5): 显示设备VR模式。
   *   STATE_ON_SUSPEND (6): 显示设备开启状态(CPU挂起)。
   * @returns 当前显示状态。
   */
  static getDisplayState(): display.DisplayState {
    return DisplayUtil.getDefaultDisplaySync().state;
  }

  /**
   * 获取挖孔屏、刘海屏等不可用屏幕区域信息。
   * 建议应用布局规避该区域。
   * @returns 不可用屏幕区域信息。
   */
  static async getCutoutRect(): Promise<display.Rect> {
    const cutoutInfo = await DisplayUtil.getDefaultDisplaySync().getCutoutInfo();
    return cutoutInfo.boundingRects[0];
  }

  /**
   * 获取挖孔屏、刘海屏等不可用屏幕区域的高度,单位 px。
   * @returns 不可用屏幕区域的高度。
   */
  static async getCutoutHeight(): Promise<number> {
    const rect = await DisplayUtil.getCutoutRect();
    return rect ? rect.height : 0;
  }

  /**
   * 检查设备是否可折叠。
   * @returns 是否可折叠。
   */
  static isFoldable(): boolean {
    return display.isFoldable();
  }

  /**
   * 获取可折叠设备的当前折叠状态。
   * FoldStatus:
   *   FOLD_STATUS_UNKNOWN (0): 折叠状态未知。
   *   FOLD_STATUS_EXPANDED (1): 完全展开。
   *   FOLD_STATUS_FOLDED (2): 折叠。
   *   FOLD_STATUS_HALF_FOLDED (3): 半折叠。
   * @returns 当前折叠状态。
   */
  static getFoldStatus(): display.FoldStatus {
    return display.getFoldStatus();
  }

  /**
   * 获取可折叠设备的显示模式。
   * FoldDisplayMode:
   *   FOLD_DISPLAY_MODE_UNKNOWN (0): 折叠显示模式未知。
   *   FOLD_DISPLAY_MODE_FULL (1): 全屏显示。
   *   FOLD_DISPLAY_MODE_MAIN (2): 主屏幕显示。
   *   FOLD_DISPLAY_MODE_SUB (3): 子屏幕显示。
   *   FOLD_DISPLAY_MODE_COORDINATION (4): 双屏协同显示。
   * @returns 当前折叠显示模式。
   */
  static getFoldDisplayMode(): display.FoldDisplayMode {
    return display.getFoldDisplayMode();
  }

  /**
   * 开启折叠设备折叠状态变化的监听。
   * @param callback 回调函数。
   */
  static onFoldStatusChange(callback: Callback<display.FoldStatus>): void {
    display.on('foldStatusChange', callback);
  }

  /**
   * 关闭折叠设备折叠状态变化的监听。
   * @param callback 回调函数(可选)。
   */
  static offFoldStatusChange(callback?: Callback<display.FoldStatus>): void {
    display.off('foldStatusChange', callback);
  }
}


网站公告

今日签到

点亮在社区的每一天
去签到