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)
  }
}

三、关键要点与文档链接

核心配置

  1. HdsNavigation 沉浸光感

    • navigationBarImmersive(true) / titleBarImmersive(true) 启用系统级光感Huawei Developer
    • 搭配 barFloatingStyle + ADAPTIVE 材质,深浅色自动适配
  2. 液态玻璃效果

    • 组合使用:backgroundColor(rgba) + backgroundBlurStyle + border(rgba) + shadowHuawei Developer
    • 避免固定色,多用半透明,保证通透感

官方文档

更多关于HarmonyOS 鸿蒙Next中有沉浸光感的示例项目吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next官方示例中提供了沉浸光感的演示,位于Sample代码库的“沉浸式体验”分类下。使用ArkTS+声明式UI实现,通过设置窗口沉浸模式与光影渲染接口达到效果。

目前还没有提供专门的沉浸光感示例项目,但官方文档中的 HdsNavigation 示例代码已包含沉浸光感效果,可以实现液态玻璃的样式。您可以直接参照文档中的代码片段,结合 HdsNavigation 组件的相关属性(如 immersiveEffect)进行集成。

回到顶部