HarmonyOS 鸿蒙Next开发设置窗口的显示方向属性,并使用Promise异步回调

发布于 1周前 作者 itying888 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next开发设置窗口的显示方向属性,并使用Promise异步回调

import { KeyboardAvoidMode, window } from '@kit.ArkUI'; // 导入ArkUI的window模块
import { common } from '@kit.AbilityKit'; // 导入AbilityKit的common模块

export class AppUtil {
  private static windowStage: window.WindowStage; // 静态变量,用于存储窗口管理器
  private static context: common.UIAbilityContext; // 静态变量,用于存储UIAbility的上下文信息

  /**
   * 初始化方法,缓存全局变量,在UIAbility的onWindowStageCreate方法中调用该方法进行初始化。
   * Initialization method, caches global variables, call this method in the onWindowStageCreate method of UIAbility for initialization.
   * @param context 上下文
   * @param windowStage 窗口管理器
   */
  static init(context: common.UIAbilityContext, windowStage: window.WindowStage) {
    AppUtil.context = context; // 初始化上下文
    AppUtil.windowStage = windowStage; // 初始化窗口管理器
  }

  /**
   * 获取主窗口
   * Get the main window
   */
  static getMainWindow(): window.Window {
    if (!AppUtil.windowStage) { // 如果窗口管理器未初始化
      console.error("windowStage为空,请在UIAbility的onWindowStageCreate方法中调用AppUtil的init方法进行初始化!WindowStage is null, please call the init method of AppUtil in the onWindowStageCreate method of UIAbility for initialization!");
    }
    return AppUtil.windowStage.getMainWindowSync(); // 同步获取主窗口
  }

  /**
   * 获取UIContext
   * @returns
   */
  static getUIContext(): UIContext {
    return AppUtil.getMainWindow().getUIContext();
  }

  /**
   * 设置窗口的显示方向属性,并使用Promise异步回调。
   *
   * @param orientation 指定窗口显示的方向,必须是Orientation枚举类型中的一个值。
   * @param windowClass 可选参数,指定要设置显示方向的具体窗口实例。如果不提供,则默认使用主窗口。
   *
   * Orientation 窗口显示方向类型枚举定义如下:
   * - UNSPECIFIED: 0,表示未定义方向模式,由系统根据当前情况判定。
   * - PORTRAIT: 1,表示竖屏显示模式。
   * - LANDSCAPE: 2,表示横屏显示模式。
   * - PORTRAIT_INVERTED: 3,表示反向竖屏显示模式。
   * - LANDSCAPE_INVERTED: 4,表示反向横屏显示模式。
   * - AUTO_ROTATION: 5,表示传感器自动旋转模式。
   * - AUTO_ROTATION_PORTRAIT: 6,表示传感器自动竖向旋转模式。
   * - AUTO_ROTATION_LANDSCAPE: 7,表示传感器自动横向旋转模式。
   * - AUTO_ROTATION_RESTRICTED: 8,表示受开关控制的自动旋转模式。
   * - AUTO_ROTATION_PORTRAIT_RESTRICTED: 9,表示受开关控制的自动竖向旋转模式。
   * - AUTO_ROTATION_LANDSCAPE_RESTRICTED: 10,表示受开关控制的自动横向旋转模式。
   * - LOCKED: 11,表示锁定模式,窗口显示方向不会随设备旋转而改变。
   */
  static async setPreferredOrientation(orientation: window.Orientation, windowClass?: window.Window): Promise<void> {
    try {
      // 如果没有提供具体的窗口实例,则使用主窗口
      if (!windowClass) {
        windowClass = AppUtil.getMainWindow();
      }
      // 设置窗口的显示方向,并返回一个Promise对象
      return windowClass.setPreferredOrientation(orientation);
    } catch (err) {
      // 如果设置过程中发生错误,记录错误信息
      console.error(JSON.stringify(err));
      // 返回一个空的Promise对象,表示操作完成
      return;
    }
  }
}

更多关于HarmonyOS 鸿蒙Next开发设置窗口的显示方向属性,并使用Promise异步回调的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next开发设置窗口的显示方向属性,并使用Promise异步回调的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next开发中,设置窗口的显示方向属性并使用Promise异步回调,可以通过以下方式实现:

  1. 设置窗口显示方向

    • 使用WindowManager.LayoutParams类中的相关字段来设置窗口的方向。例如,可以通过设置WindowManager.LayoutParams.ROTATION_0(0度)、ROTATION_90(90度)、ROTATION_180(180度)或ROTATION_270(270度)来调整窗口的旋转方向。
    • 调用Window对象的setAttributes方法,并传入包含所需旋转角度的WindowManager.LayoutParams对象,以应用新的显示方向。
  2. 使用Promise异步回调

    • 在Java或Kotlin中,虽然原生不支持Promise机制,但可以通过CompletableFuture或自定义回调接口来实现类似功能。
    • 创建一个异步任务(如使用线程或异步执行器),在任务完成后通过回调接口或CompletableFuturecomplete方法通知主线程。

示例代码(简化版,未包含完整错误处理和Promise实现细节):

// 假设已有Window对象window
WindowManager.LayoutParams params = window.getAttributes();
params.rotation = WindowManager.LayoutParams.ROTATION_90;
window.setAttributes(params);

// 使用CompletableFuture模拟Promise
CompletableFuture.runAsync(() -> {
    // 异步操作
}).thenRun(() -> {
    // 回调操作
});

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!