HarmonyOS 鸿蒙Next 状态栏和导航条如何沉浸
HarmonyOS 鸿蒙Next 状态栏和导航条如何沉浸
如何将状态栏和导航条区域与app背景融合???像这样上下留白太丑了!!
更多关于HarmonyOS 鸿蒙Next 状态栏和导航条如何沉浸的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
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
属性来实现。具体步骤如下:
-
设置沉浸模式:在应用的主Activity中,调用
Window
的setSystemUiVisibility
方法,并传入View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
参数,这样可以让应用的内容布局延伸到状态栏和导航栏区域。 -
调整布局:为了确保应用内容不会被状态栏或导航栏遮挡,可以在布局文件中使用
fitsSystemWindows
属性,或者通过代码动态调整布局的padding
或margin
。 -
监听系统UI变化:如果需要响应系统UI的变化(例如用户滑出状态栏或导航栏),可以重写Activity的
onWindowFocusChanged
方法,并在其中重新设置SystemUiVisibility
属性。 -
适配不同设备:由于不同设备的屏幕尺寸和系统UI布局可能不同,建议在实现沉浸式效果时,进行多设备测试,确保在各种设备上都能正常显示。
通过以上步骤,可以在HarmonyOS鸿蒙Next中实现状态栏和导航条的沉浸式效果,提升用户体验。
在HarmonyOS(鸿蒙Next)中,实现状态栏和导航条的沉浸式体验可以通过以下步骤完成:
-
设置全屏模式:在Activity的
onCreate
方法中调用getWindow().getDecorView().setSystemUiVisibility()
,使用View.SYSTEM_UI_FLAG_FULLSCREEN
和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
标志来隐藏状态栏和导航条。 -
沉浸模式:使用
View.SYSTEM_UI_FLAG_IMMERSIVE
或View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
标志,让用户在滑动时暂时显示系统栏,随后自动隐藏。 -
监听变化:通过
View.OnSystemUiVisibilityChangeListener
监听系统栏的可见性变化,确保在全屏和沉浸模式之间平滑过渡。
通过这些步骤,你可以为应用创建沉浸式的用户体验,充分利用屏幕空间。