应用在启动和退出时，状态栏颜色突兀
=================

#### 问题现象

进入应用时状态栏颜色由白色突变为黑色，退出应用时状态栏颜色由黑色突变为透明。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6/v3/hSQrVp8IRFG5eBt54mLDYw/zh-cn_image_0000002628661000.png?HW-CC-KV=V1&HW-CC-Date=20260709T134001Z&HW-CC-Expire=86400&HW-CC-Sign=660F571898CAF3675225C8845E6FD54E26D31C9C95047C7334EADC093186A177 "点击放大")

#### 背景知识

*   [setWindowSystemBarProperties](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#setwindowsystembarproperties9)在全屏主窗口下用于设置窗口内导航栏和状态栏的属性。
*   [SystemBarProperties](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-i#systembarproperties)包括背景颜色、文字颜色、图标是否高亮和图标动画等属性，适配可以参考[如何实现状态栏背景颜色沉浸](https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-arkui-358)。
*   [setWindowLayoutFullScreen](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#setwindowlayoutfullscreen9)可设置主窗口或子窗口的布局是否为沉浸式布局，使用Promise异步回调。系统窗口调用不生效。
*   [expandSafeArea](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-expand-safe-area#expandsafearea)可以控制组件扩展其安全区域。

#### 问题定位

查看状态栏设置，全局搜索setWindowSystemBarProperties，发现对SystemBarProperties中的statusBarColor进行了设置，且值没有设置为透明色。

import { window } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  aboutToAppear(): void {
    let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
    window.getLastWindow(context).then((lastWindow) => {
      let systemBarProperties: window.SystemBarProperties = {
        statusBarColor: '#000000', _// 状态栏背景色黑色_
        statusBarContentColor: '#ffffff' _// 状态栏文字白色_
      };
      lastWindow.setWindowSystemBarProperties(systemBarProperties); _// 设置主窗口状态栏的属性_
    });
  }

  build() {
    Column() {
      Text('Hello World')
        .width('100%')
        .height('100%')
        .fontColor(Color.White)
        .fontSize(20)
        .textAlign(TextAlign.Center);
    }
    .width('100%')
    .height('100%')
    .backgroundColor(Color.Black)
    .expandSafeArea(\[SafeAreaType.SYSTEM\], \[SafeAreaEdge.BOTTOM\]);
  }
}

#### 分析结论

进入和退出应用时应用更改了状态栏背景色，导致颜色突变。

#### 修改建议

1.  将statusBarColor值设置为透明。
2.  使用setWindowLayoutFullScreen设置页面全屏并使用expandSafeArea扩展页面到状态栏。
3.  完整示例如下：
    
    import { window } from '@kit.ArkUI';
    import { common } from '@kit.AbilityKit';
    
    @Entry
    @Component
    struct Index {
      aboutToAppear(): void {
        let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
        window.getLastWindow(context).then((lastWindow) => {
          lastWindow.setWindowLayoutFullScreen(true);
          let systemBarProperties: window.SystemBarProperties = {
            statusBarColor: 'rgba(0, 0, 0, 0)', _// 透明_
            statusBarContentColor: '#ffffff' _// 状态栏文字白色_
          };
          lastWindow.setWindowSystemBarProperties(systemBarProperties); _// 设置主窗口状态栏的属性_
        });
      }
    
      build() {
        Column() {
          Text('Hello World')
            .width('100%')
            .height('100%')
            .fontColor(Color.White)
            .fontSize(20)
            .textAlign(TextAlign.Center);
        }
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Black)
        .expandSafeArea(\[SafeAreaType.SYSTEM\], \[SafeAreaEdge.TOP,SafeAreaEdge.BOTTOM\]);
      }
    }
    
    效果图如下：
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c2/v3/fQ7IPzXkT3K4wS3TEx2t3A/zh-cn_image_0000002659060261.png?HW-CC-KV=V1&HW-CC-Date=20260709T134001Z&HW-CC-Expire=86400&HW-CC-Sign=89D2EF17B53D9680CBC424E442AE5B29A88430C2521A8297BA1FC949965A592E "点击放大")