HarmonyOS 鸿蒙Next 状态栏和导航条如何沉浸

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 状态栏和导航条如何沉浸 如何将状态栏和导航条区域与app背景融合???像这样上下留白太丑了!!


更多关于HarmonyOS 鸿蒙Next 状态栏和导航条如何沉浸的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

onWindowStageCreate里加上

// 应用窗口对象 const windowClass = await windowStage.getMainWindow() // 设置全屏 windowClass.setWindowLayoutFullScreen(true)

更多关于HarmonyOS 鸿蒙Next 状态栏和导航条如何沉浸的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


import { window } from '@kit.ArkUI';
import { logger } from './logger';

class FullScreen {
  async enable() {
    try {
      const context = AppStorage.get<Context>('context')
      if (context) {
        const win = await window.getLastWindow(context)
        await win.setWindowLayoutFullScreen(true)
        const topArea = win.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM)
        AppStorage.setOrCreate('topHeight', px2vp(topArea.topRect.height))
        const bottomArea =  win.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR)
        AppStorage.setOrCreate('bottomHeight', px2vp(bottomArea.bottomRect.height))
      }
    } catch (e) {
      logger.error('FullScreen enable', JSON.stringify(e))
    }
  }

  async disable() {
    try {
      const context = AppStorage.get<Context>('context')
      if (context) {
        const win = await window.getLastWindow(context)
        await win.setWindowLayoutFullScreen(false)
        AppStorage.setOrCreate('topHeight', 0)
        AppStorage.setOrCreate('bottomHeight', 0)
      }
    } catch (e) {
      logger.error('FullScreen disable', JSON.stringify(e))
    }
  }
}

export const fullScreen = new FullScreen()

拿去用 不谢

还没做好软件适配呢呗

import { window } from '@kit.ArkUI'
import { logger } from './Logger'

class StatusBar {
  async setDarkBar() {
    await this.setBar({ statusBarContentColor: '#000000' })
  }

  async setLightBar() {
    await this.setBar({ statusBarContentColor: '#FFFFFF' })
  }

  async setBar(config: window.SystemBarProperties) {
    try {
      const context = AppStorage.get<Context>('context')
      if (context) {
        const win = await window.getLastWindow(context)
        await win.setWindowSystemBarProperties(config)
      }
    } catch (e) {
      logger.error('StatusBar setBar', JSON.stringify(e))
    }
  }
}

export const statusBar = new StatusBar()

搞错了 上面那个是沉浸式 这个是状态栏

在HarmonyOS鸿蒙Next中,实现状态栏和导航条的沉浸式效果,可以通过设置窗口的SystemUiVisibility属性来实现。具体步骤如下:

  1. 设置沉浸模式:在应用的主Activity中,调用WindowsetSystemUiVisibility方法,并传入View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN参数,这样可以让应用的内容布局延伸到状态栏和导航栏区域。

  2. 调整布局:为了确保应用内容不会被状态栏或导航栏遮挡,可以在布局文件中使用fitsSystemWindows属性,或者通过代码动态调整布局的paddingmargin

  3. 监听系统UI变化:如果需要响应系统UI的变化(例如用户滑出状态栏或导航栏),可以重写Activity的onWindowFocusChanged方法,并在其中重新设置SystemUiVisibility属性。

  4. 适配不同设备:由于不同设备的屏幕尺寸和系统UI布局可能不同,建议在实现沉浸式效果时,进行多设备测试,确保在各种设备上都能正常显示。

通过以上步骤,可以在HarmonyOS鸿蒙Next中实现状态栏和导航条的沉浸式效果,提升用户体验。

在HarmonyOS(鸿蒙Next)中,实现状态栏和导航条的沉浸式体验可以通过以下步骤完成:

  1. 设置全屏模式:在Activity的onCreate方法中调用getWindow().getDecorView().setSystemUiVisibility(),使用View.SYSTEM_UI_FLAG_FULLSCREENView.SYSTEM_UI_FLAG_HIDE_NAVIGATION标志来隐藏状态栏和导航条。

  2. 沉浸模式:使用View.SYSTEM_UI_FLAG_IMMERSIVEView.SYSTEM_UI_FLAG_IMMERSIVE_STICKY标志,让用户在滑动时暂时显示系统栏,随后自动隐藏。

  3. 监听变化:通过View.OnSystemUiVisibilityChangeListener监听系统栏的可见性变化,确保在全屏和沉浸模式之间平滑过渡。

通过这些步骤,你可以为应用创建沉浸式的用户体验,充分利用屏幕空间。

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