HarmonyOS鸿蒙Next中开启深色模式时顶部显示内容被状态栏覆盖

HarmonyOS鸿蒙Next中开启深色模式时顶部显示内容被状态栏覆盖 开启深色模式,顶部显示内容被状态栏覆盖,杀死APP重启后恢复正常

3 回复
楼主你好

```javascript
onWindowStageCreate(windowStage: window.WindowStage): void {

  // Main window is created, set main page for this ability
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  let windowClass: window.Window = windowStage.getMainWindowSync(); // 获取应用主窗口
  try {
    windowClass.on('avoidAreaChange', (data) => {
      console.info('Succeeded in enabling the listener for system avoid area changes. type:' +
      JSON.stringify(data.type) + ', area: ' + JSON.stringify(data.area));
      let area = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
      let statusBarHeight = 0
      //注意:返回的是px值,如果要用vp值需要转换
      statusBarHeight = px2vp(area.topRect.height);
      PersistentStorage.persistProp('test', statusBarHeight);
    });
  } catch (exception) {
    console.error(`Failed to enable the listener for system avoid area changes. Cause code: ${exception.code}, message: ${exception.message}`);
  }
  windowStage.loadContent('pages/Index', (err) => {
    if (err.code) {
      hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
      return;
    }
    hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
  });
}
import { window } from '[@kit](/user/kit).ArkUI';

[@Component](/user/Component)
struct Demo {
  [@State](/user/State) message: string = 'Hello World';
  [@StorageLink](/user/StorageLink)('test') statusBarHeight: number = 0

  build() {
    Column() {
      Row() {
        Text(this.message)
          .id('DemoHelloWorld')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .alignRules({
            center: { anchor: '__container__', align: VerticalAlign.Center },
            middle: { anchor: '__container__', align: HorizontalAlign.Center }
          })
      }
      .padding({ top: this.statusBarHeight })
      .width('100%')
      .backgroundColor(Color.Pink)
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中开启深色模式时顶部显示内容被状态栏覆盖的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,开启深色模式时顶部显示内容被状态栏覆盖的问题,可能是由于状态栏的深色模式适配未完全处理好。鸿蒙系统的状态栏在深色模式下会自动调整其背景色和图标颜色,以确保内容的可见性。如果应用未正确适配深色模式,可能会导致状态栏与顶部内容重叠或覆盖。

解决此问题,开发者需要确保应用在深色模式下正确调整布局和颜色。可以通过检查应用的window设置,确保其statusBarColornavigationBarColor在深色模式下与状态栏的深色背景相匹配。此外,应用应使用系统提供的深色模式资源,如@color/background_dark,以确保整体UI风格的一致性。

如果应用使用了自定义的顶部布局,可能需要手动调整布局的paddingTopmarginTop属性,以避免与状态栏重叠。开发者还可以通过WindowInsets类获取状态栏的高度,并动态调整布局,确保内容不会被状态栏覆盖。

在鸿蒙Next中,系统提供了UiModeManager类来管理应用的主题模式,开发者可以通过监听系统主题的变化,动态调整应用的UI布局和颜色,以适应深色模式。

在HarmonyOS鸿蒙Next中开启深色模式时,若顶部内容被状态栏覆盖,可以通过以下步骤解决:

  1. 检查布局文件:确保布局文件中使用了android:fitsSystemWindows="true"属性,以便系统自动调整内容区域,避免与状态栏重叠。

  2. 调整状态栏颜色:在代码中动态设置状态栏颜色为深色模式下的合适颜色,确保内容清晰可见。

  3. 使用WindowInsets:通过WindowInsets获取状态栏高度,并在布局中预留相应空间,避免内容被覆盖。

  4. 适配深色模式:确保应用的主题和资源文件已正确适配深色模式,避免显示异常。

通过以上步骤,可以有效解决深色模式下顶部内容被状态栏覆盖的问题。

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