HarmonyOS鸿蒙Next中沉浸光感顶部导航栏逐渐模糊怎么避让状态栏
HarmonyOS鸿蒙Next中沉浸光感顶部导航栏逐渐模糊怎么避让状态栏
根据官方文档;“从6.1.0(23) 版本开始,新增支持HDS组件的沉浸光感材质能力。
HDS导航:通过设置TitleBarStyleOptions的systemMaterialEffect参数,可为标题栏按钮设置沉浸光感视效。
HDS底部页签:通过设置HdsTabsFloatingStyle的systemMaterialEffect参数,可为底部页签设置沉浸光感视效。”
HDS导航做出来之后是直接跑到顶部和状态栏重合了,是否是设置的沉浸式状态栏的问题?
如果设置避让状态栏,位置对了,但是导航栏就全变白色了,还有一种情况就是上滑变成白色了,就是不能像鸿蒙设置 应用商店 音乐那样,可以很自然悬浮逐渐模糊


更多关于HarmonyOS鸿蒙Next中沉浸光感顶部导航栏逐渐模糊怎么避让状态栏的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者您好,可以在内容区顶部增加Blank组件占位。
Blank().height(110),
更多关于HarmonyOS鸿蒙Next中沉浸光感顶部导航栏逐渐模糊怎么避让状态栏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我是直接用文档代码修改的,你看看是不是哪个属性设置错了,可以参考我自己的APP经验分享:https://developer.huawei.com/consumer/cn/blog/topic/03214613570575010,
谢谢。
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
内容区占位了,但是导航栏还是一直和状态栏重合,不知是不是沉浸式状态栏冲突的问题,
原因:状态栏和页面设置了延伸的安全区域,删除后,用HDS套件(hdsnvagation作为hdstabs的子组件)去包裹整个页面再做延伸,就成功了,
这个现象更像是标题栏安全区策略和背景层没有对齐,不是单独加 Blank 高度就能解决。想做系统应用那种“内容延伸到状态栏,同时顶部随滚动逐渐模糊”的效果,我这边建议把三件事分开处理:背景层负责铺到状态栏,内容层用占位避开标题栏,HdsNavigation 只负责滚动联动和模糊。
可参考这个写法,重点是 bindToScrollable、GRADIENT_BLUR、maskExtraHeight,以及不要把标题栏初始/滚动后的背景配成白色:
import { HdsNavigation, ScrollEffectType } from '@kit.UIDesignKit';
import { LengthMetrics } from '@kit.ArkUI';
const TITLE_PLACEHOLDER: number = 112;
@Entry
@Component
struct DemoPage {
private scroller: Scroller = new Scroller();
build() {
Stack() {
Image($r('app.media.header_bg'))
.width('100%')
.height(280)
.objectFit(ImageFit.Cover)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])
HdsNavigation() {
Scroll(this.scroller) {
Column() {
Blank().height(TITLE_PLACEHOLDER)
// 这里放页面内容
}
.width('100%')
}
.scrollBar(BarState.Off)
}
.backgroundColor(Color.Transparent)
.titleBar({
avoidLayoutSafeArea: false,
enableComponentSafeArea: true,
style: {
scrollEffectOpts: {
enableScrollEffect: true,
scrollEffectType: ScrollEffectType.GRADIENT_BLUR,
blurEffectiveStartOffset: LengthMetrics.vp(0),
blurEffectiveEndOffset: LengthMetrics.vp(56)
},
originalStyle: {
backgroundStyle: { backgroundColor: Color.Transparent }
},
scrollEffectStyle: {
backgroundStyle: { maskExtraHeight: 56 }
}
}
})
.bindToScrollable([this.scroller])
}
.width('100%')
.height('100%')
}
}
如果开启 avoidLayoutSafeArea: true 后顶部变白,通常是标题栏整体避开了状态栏,但状态栏下方没有同一张背景或透明模糊层承接;这时应优先补背景层,而不是继续加大 Blank。若你的顶部背景需要跟随 Scroll 一起滚动,再按安全区文档检查滚动容器链路上的 expandSafeArea 生效条件。
参考: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ui-design-hdsnavigation https://developer.huawei.com/consumer/cn/doc/HarmonyOS-Guides/ui-design-navigation-dynamic-blur
期待HarmonyOS能在未来带来更多创新的技术和理念。
👍,
分层,
hdsnavigation有避让安全区的参数,
避让安全区状态栏就变成一片白色,不能统一底色,
可以自定义设置状态栏颜色,
但看官方的模糊效果都是内容区一路模糊到状态栏的,这样就达不到一样的效果了,
结合Blank非安全区,
在HarmonyOS Next中,实现沉浸光感导航栏模糊并避让状态栏,需在页面根组件使用 expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP]) 允许内容延伸至状态栏区域,同时通过 safeAreaPadding 或 constraintSize 约束导航栏不遮挡状态栏。借助 backdropBlur 或 backgroundEffect 实现模糊,并确保导航栏高度包含状态栏区域。
在使用HDS导航栏的沉浸光感材质时,出现与状态栏重叠或避让后变白现象,通常是因为未正确配置背景与安全区行为。
核心原因:开启了沉浸光感材质后,导航栏本身已具备透明模糊背景;若额外给导航栏或页面设置了白色/纯色背景,或通过避让机制直接下移了导航栏,都会遮盖原始的沉浸模糊效果,导致出现纯白或滑动后变白。
正确做法是:
- 页面设置为沉浸式布局(
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])),让内容延伸到状态栏下方。 - 不通过全局偏移或 margin 手动避让状态栏,而是让 HDS 导航栏利用系统已有的安全区能力自然放置在状态栏下方,并保持透明背景。
- 确保导航栏自身背景为透明,且未设置任何纯色背景属性(包括滚动后的背景变化)。系统会基于下方滚动内容自动计算渐模糊效果,无需额外干预。
若仍异常,请检查是否在多处重复设置了背景或偏移,导致材质效果被覆盖。


