HarmonyOS 鸿蒙Next中有沉浸光感的示例项目吗?
HarmonyOS 鸿蒙Next中有沉浸光感的示例项目吗? 沉浸光感
想试下实现液态玻璃的效果,看了文档沉浸光感还和HdsNavigation有关,只有示例代码还是不大清晰,有示例代码能学习吗?
5 回复
两套可直接复制运行的示例:HdsNavigation + 沉浸光感(官方标准)、液态玻璃 TabBar(自定义),均适配 API23(HarmonyOS 6)。
一、HdsNavigation + 沉浸光感(官方标准)
效果要点
- 标题栏 / 底部 Tab 启用沉浸光感材质,深浅色自动适配Huawei Developer
- 内容与导航栏重叠,透出背景模糊效果
- 自动扩展安全区,适配状态栏 / 导航栏
完整代码(可直接运行)
ts
import { HdsNavigation, HdsNavigationMenuContentOptions, HdsTabs, HdsTabsController } from '@kit.UIDesignKit';
import { ImageFit, Scroll, Column, Image, ForEach, TabContent } from '@kit.ArkUI';
// 模拟菜单配置
const MENU_CONFIG = [
{ label: '首页', symbol: $r('sys.symbol.home'), symbolSelected: $r('sys.symbol.home_filled') },
{ label: '发现', symbol: $r('sys.symbol.search'), symbolSelected: $r('sys.symbol.search_filled') },
{ label: '我的', symbol: $r('sys.symbol.person'), symbolSelected: $r('sys.symbol.person_filled') },
];
@Entry
@Component
struct HdsNavigationImmersiveDemo {
private scroller: Scroller = new Scroller();
private tabsCtrl: HdsTabsController = new HdsTabsController();
// 导航菜单配置
private menus: HdsNavigationMenuContentOptions = {
value: MENU_CONFIG.map(item => ({
content: { label: item.label, icon: item.symbol }
}))
};
build() {
Column() {
HdsNavigation() {
HdsTabs({ controller: this.tabsCtrl }) {
ForEach(MENU_CONFIG, (item, index) => {
TabContent() {
Stack({ alignContent: Alignment.Top }) {
// 背景图
Image($r("app.media.bg_landscape")) // 替换为你的图片资源
.width('100%')
.height(300)
.objectFit(ImageFit.Cover)
// 内容区
Scroll(this.scroller) {
Column({ space: 12 }) {
ForEach(Array.from({ length: 6 }), (_, i) => {
Column() {
Text(`内容卡片 ${i + 1}`)
.fontSize(16)
.fontColor(Color.White)
}
.width('90%')
.height(120)
.backgroundColor('rgba(255,255,255,0.1)')
.borderRadius(16)
.justifyContent(FlexAlign.Center)
})
}
.padding({ bottom: 100 }) // 给底部 Tab 留空间
}
}
}
.tabBar({
normal: item.symbol,
selected: item.symbolSelected
}, item.label)
.labelStyle({
selectedColor: $r('app.color.primary_blue')
})
})
}
// 核心:开启悬浮+沉浸光感
.barFloatingStyle({
barBottomMargin: 28,
systemMaterialEffect: {
materialType: hdsMaterial.MaterialType.ADAPTIVE, // 深浅色自动适配
materialLevel: hdsMaterial.MaterialLevel.EXQUISITE
}
})
.barOverlap(true) // 内容延伸到 Tab 下方
.barPosition(BarPosition.End)
}
// 导航栏启用沉浸光感
.navigationBarImmersive(true)
.titleBarImmersive(true)
}
.width('100%')
.height('100%')
.backgroundColor('#0F172A')
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
}
二、液态玻璃 TabBar(自定义,更贴近 “液态玻璃”)
效果要点
- 半透明背景 + 强力模糊 + 细微边框 / 高光
- 动态光影(随点击 / 滚动微调)
- 完美适配深浅色,布局稳定
完整代码(可直接运行)
ts
import { LengthMetrics, LinearGradient, BlurStyle, Row, Column, Text, Image, ForEach } from '@kit.ArkUI';
// Tab 配置
const TAB_ITEMS = [
{ label: '首页', icon: $r('sys.symbol.home'), iconSelected: $r('sys.symbol.home_filled') },
{ label: '发现', icon: $r('sys.symbol.search'), iconSelected: $r('sys.symbol.search_filled') },
{ label: '消息', icon: $r('sys.symbol.message'), iconSelected: $r('sys.symbol.message_filled') },
{ label: '我的', icon: $r('sys.symbol.person'), iconSelected: $r('sys.symbol.person_filled') },
];
@Entry
@Component
struct GlassTabBarDemo {
@State selectedIndex: number = 0;
build() {
Stack({ alignContent: Alignment.Bottom }) {
// 背景内容
Column() {
Text("液态玻璃 TabBar 示例")
.fontSize(20)
.fontColor(Color.White)
.margin({ bottom: 20 })
ForEach(Array.from({ length: 4 }), (_, i) => {
Column() {
Text(`页面内容 ${i + 1}`)
.fontSize(16)
.fontColor(Color.White)
}
.width('100%')
.height(100)
.backgroundColor('rgba(255,255,255,0.05)')
.borderRadius(12)
.margin({ bottom: 10 })
})
}
.width('100%')
.padding({ bottom: 80 })
// 液态玻璃 TabBar
Row() {
ForEach(TAB_ITEMS, (item, index) => {
Column() {
Image(this.selectedIndex === index ? item.iconSelected : item.icon)
.width(24)
.height(24)
.fontColor(this.selectedIndex === index ? '#FFFFFF' : '#94A3B8')
Text(item.label)
.fontSize(12)
.fontColor(this.selectedIndex === index ? '#FFFFFF' : '#94A3B8')
}
.width('25%')
.justifyContent(FlexAlign.Center)
.onClick(() => {
this.selectedIndex = index;
})
})
}
// 液态玻璃核心样式
.width('90%')
.height(56)
.borderRadius(28)
.backgroundColor('rgba(255, 255, 255, 0.1)')
.backgroundBlurStyle(BlurStyle.COMPONENT_ULTRA_THICK) // 强力模糊
.border({ width: 1, color: 'rgba(255, 255, 255, 0.2)', radius: 28 })
.shadow({ radius: 20, color: 'rgba(0,0,0,0.15)', offsetY: 8 })
.margin({ bottom: 28 })
}
.width('100%')
.height('100%')
.backgroundImage($r("app.media.bg_gradient")) // 替换为你的背景图
.backgroundImageFit(ImageFit.Cover)
}
}
三、关键要点与文档链接
核心配置
-
HdsNavigation 沉浸光感
navigationBarImmersive(true)/titleBarImmersive(true)启用系统级光感Huawei Developer- 搭配
barFloatingStyle+ADAPTIVE材质,深浅色自动适配
-
液态玻璃效果
- 组合使用:
backgroundColor(rgba) + backgroundBlurStyle + border(rgba) + shadowHuawei Developer - 避免固定色,多用半透明,保证通透感
- 组合使用:
官方文档
- HdsNavigation 沉浸光感:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ui-design-hds-navigation
- HdsTabs 悬浮样式:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ui-design-hds-tabs
- 沉浸光感材质:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ui-design-hds-component-material
更多关于HarmonyOS 鸿蒙Next中有沉浸光感的示例项目吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,其他组件的接口暂未开放
鸿蒙Next官方示例中提供了沉浸光感的演示,位于Sample代码库的“沉浸式体验”分类下。使用ArkTS+声明式UI实现,通过设置窗口沉浸模式与光影渲染接口达到效果。
目前还没有提供专门的沉浸光感示例项目,但官方文档中的 HdsNavigation 示例代码已包含沉浸光感效果,可以实现液态玻璃的样式。您可以直接参照文档中的代码片段,结合 HdsNavigation 组件的相关属性(如 immersiveEffect)进行集成。

