HarmonyOS 鸿蒙Next开发设置应用的状态栏为沉浸式状态
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开发中,设置应用的状态栏为沉浸式状态,可以通过以下步骤实现:
-
导入必要的模块:
- 从ArkUI导入window模块,用于窗口管理。
- 从AbilityKit导入common模块,用于UIAbility的上下文管理。
-
初始化窗口和上下文:
- 在UIAbility的onWindowStageCreate方法中,初始化窗口管理器和上下文信息。
-
设置沉浸式状态栏:
- 调用windowClass的setWindowLayoutFullScreen方法,设置窗口为全屏布局。
- 使用setWindowSystemBarEnable方法控制状态栏和导航栏的显示。
- 可选地,使用setWindowSystemBarProperties方法自定义状态栏和导航栏的属性,如背景颜色、文字颜色等。
-
处理安全区域:
- 获取状态栏和导航条的高度,以便在布局中进行避让处理。
- 在布局中,对具体控件进行布局调整,以避免遮挡状态栏和导航条。
如果以上步骤正确实施,应用的状态栏应能成功设置为沉浸式状态。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。