HarmonyOS 鸿蒙Next开发设置应用的状态栏为沉浸式状态

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

HarmonyOS 鸿蒙Next开发设置应用的状态栏为沉浸式状态

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

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(); // 同步获取主窗口
  }
  /**
   * 该方法用于设置应用的状态栏为沉浸式状态,允许自定义状态栏和导航栏的显示样式和颜色。
   *
   * @param isLayoutFullScreen 指定窗口是否采用沉浸式布局。当值为true时,布局为沉浸式,状态栏和导航栏仍然可见;
   *                           当值为false时,布局为非沉浸式,状态栏和导航栏的显示将根据enable参数决定。
   *                           默认值为true。
   * @param enable 控制在全屏模式下状态栏、导航栏和底部导航条的显示状态。当值为true时,这些元素将被显示;
   *               当值为false时,这些元素将被隐藏。默认值为true。
   * @param color 设置窗口的背景颜色,采用十六进制颜色代码表示。默认值为白色(#FFFFFF)。
   * @param systemBarProperties 可选参数,用于自定义状态栏和导航栏的属性,包括背景颜色、文字颜色以及图标的高亮状态。
   *                            属性包括:
   *                            - statusBarColor: 状态栏背景颜色,默认值为#0x66000000。
   *                            - statusBarContentColor: 状态栏文字颜色,默认值为#0xE5FFFFFF。
   *                            - isStatusBarLightIcon: 状态栏图标是否高亮,默认值为false。
   *                            - navigationBarColor: 导航栏背景颜色,默认值为#0x66000000。
   *                            - navigationBarContentColor: 导航栏文字颜色,默认值为#0xE5FFFFFF。
   *                            - isNavigationBarLightIcon: 导航栏图标是否高亮,默认值为false。
   */
  static setStatusBar(isLayoutFullScreen: boolean = true, enable: boolean = true, color: string = '#FFFFFF', systemBarProperties?: window.SystemBarProperties) {
    try {
      let windowClass = AppUtil.getMainWindow();
      windowClass.setWindowLayoutFullScreen(isLayoutFullScreen).then(() => {
        windowClass.setWindowBackgroundColor(color);
      }).catch((error: BusinessError) => {
        console.error(`setWindowLayoutFullScreen-异常 ~ code: ${error.code} -·- message:${error.message}`);
      });
      windowClass.setWindowSystemBarEnable(enable ? ['status', 'navigation'] : []).then(() => {
        windowClass.setSpecificSystemBarEnabled("navigationIndicator", enable); //底部导航条。
      }).catch((error: BusinessError) => {
        console.error(`setWindowSystemBarEnable-异常 ~ code: ${error.code} -·- message:${error.message}`);
      });
      if (systemBarProperties) {
        windowClass.setWindowSystemBarProperties(systemBarProperties).catch((error: BusinessError) => {
          console.error(`setWindowSystemBarProperties-异常 ~ code: ${error.code} -·- message:${error.message}`);
        });
      }
    } catch (err) {
      console.error(JSON.stringify(err));
    }
  }

}

1 回复

在HarmonyOS鸿蒙Next开发中,设置应用的状态栏为沉浸式状态,可以通过以下步骤实现:

  1. 导入必要的模块

    • 从ArkUI导入window模块,用于窗口管理。
    • 从AbilityKit导入common模块,用于UIAbility的上下文管理。
  2. 初始化窗口和上下文

    • 在UIAbility的onWindowStageCreate方法中,初始化窗口管理器和上下文信息。
  3. 设置沉浸式状态栏

    • 调用windowClass的setWindowLayoutFullScreen方法,设置窗口为全屏布局。
    • 使用setWindowSystemBarEnable方法控制状态栏和导航栏的显示。
    • 可选地,使用setWindowSystemBarProperties方法自定义状态栏和导航栏的属性,如背景颜色、文字颜色等。
  4. 处理安全区域

    • 获取状态栏和导航条的高度,以便在布局中进行避让处理。
    • 在布局中,对具体控件进行布局调整,以避免遮挡状态栏和导航条。

如果以上步骤正确实施,应用的状态栏应能成功设置为沉浸式状态。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部