作者:梅科尔工作室刘俊威

今天想和大家分享一下,我们Makerizon APP在HarmonyOS 6.1版本上接入“沉浸光感”导航栏的一些实战心得。

先介绍一下Makerizon——这是一个为鸿蒙开发者打造的一站式学习实战平台,涵盖课程、速看、训练营与三方库四大模块。我们的用户每天要在课程列表、训练营入口和学习主界面之间频繁切换,导航栏的使用频率非常高。因此,如何让这个高频交互区域既有高级质感,又不牺牲流畅度,成了我们V1.0.1版本迭代的一个小目标。

为什么选择沉浸光感?

传统导航栏的平面化设计虽然简洁,但总感觉缺了点“呼吸感”。尤其是对于Makerizon这样一个主打“沉浸式学习”的应用,我们希望用户从进入首页、切换课程到打开训练营,每一步操作都能感受到界面是有温度的、有反馈的。

HarmonyOS 6.1新增的沉浸光感材质能力,恰好解决了这个痛点。它基于系统材质渲染技术,能为标题栏按钮、底部页签等组件模拟出真实的光影层次——说白了,就是让按钮看起来像悬浮在界面上的一小块通透玻璃,轻触时还有细腻的光影变化。

我们最终决定在Makerizon的HDS导航栏上接入沉浸光感,覆盖以下场景:

  • 课程/训练营切换时的顶部导航栏按钮
  • 学习主界面右侧的功能菜单按钮(分享、收藏、更多)
  • 返回按钮

实战:给Makerizon导航栏“注入光感”

第一步:评估方案

官方提供了两种沉浸光感接入方式:

  1. 系统自适应(推荐):系统根据设备算力动态调整材质效果,自动平衡视觉与性能。
  2. 自定义效果:开发者先查询设备支持的材质能力,再手动指定材质等级(如精致EXQUISITE、柔和GENTLE、流畅SMOOTH)。

考虑到Makerizon需要覆盖不同档位的鸿蒙设备(从入门手机到旗舰平板),我们选择了系统自适应模式——把专业判断交给系统,省心且稳妥。

第二步:分步代码实现

下面我们把沉浸光感的接入过程拆成 4 个小节,每一步都清晰可见。

步骤 1:导入所需模块

首先导入 HDS 导航组件和沉浸光感相关的模块:

import { 
  HdsNavigation, 
  HdsNavigationTitleMode, 
  HdsNavigationMenuContentOptions, 
  ScrollEffectType, 
  hdsMaterial 
} from '@kit.UIDesignKit';
步骤 2:配置右侧菜单按钮

Makerizon 首页右上角有三个功能按钮:分享、收藏、更多。用HdsNavigationMenuContentOptions​​ 定义它们:

private menus: HdsNavigationMenuContentOptions = {
  value: [
    { content: { label: '分享', icon: $r('sys.symbol.share') } },
    { content: { label: '收藏', icon: $r('sys.symbol.star') } },
    { content: { label: '更多', icon: $r('sys.symbol.more') } }
  ]
};
步骤 3:构建 HdsNavigation 容器并配置沉浸光感

在 ​​build()​​​ 方法中创建 ​​HdsNavigation​​​,重点是在 ​​titleBar.style​​​ 里加上 ​​systemMaterialEffect​​ 参数:

build() {
  HdsNavigation() {
    // 内容区域:课程列表 / 训练营入口 / 学习主界面
    Scroll(this.scrollerForScroll) {
      Column() {
        // 课程卡片、训练营模块等内容...
      }
    }
  }
  .mode(NavigationMode.Stack)
  .titleBar({
    content: {
      title: { mainTitle: 'Makerizon' },
      menu: this.menus
    },
    style: {
      scrollEffectOpts: {
        enableScrollEffect: true,
        scrollEffectType: ScrollEffectType.GRADIENT_BLUR
      },
      // ⭐ 沉浸光感核心配置
      systemMaterialEffect: {
        materialType: hdsMaterial.MaterialType.ADAPTIVE,
        materialLevel: hdsMaterial.MaterialLevel.ADAPTIVE
      }
    }
  })
  .bindToScrollable([this.scrollerForScroll])
  .titleMode(HdsNavigationTitleMode.MINI)
  .hideBackButton(false)  // 保留返回按钮,同样具备光感效果
步骤 4:绑定滚动控制器,增强联动效果

如果你希望导航栏在滚动时平滑变化(渐变模糊、迷你模式切换),记得在 ​​Scroll​​​ 组件创建时传入 ​​scroller​​​,并通过 ​​bindToScrollable​​ 绑定:

private scrollerForScroll: Scroller = new Scroller();

// 在 Scroll 组件上使用
Scroll(this.scrollerForScroll) { ... }

// 在 HdsNavigation 上绑定
.bindToScrollable([this.scrollerForScroll])

实际体验:那些让人惊喜的细节

代码改动其实非常小,就是给 ​​titleBar.style​​​ 里加了一个 ​​systemMaterialEffect​​ 参数。但运行到真机上之后,效果差异是肉眼可见的:

  • 视觉上:导航栏按钮不再是一张扁平的图标,而是像一小块磨砂玻璃浮在内容之上。深色模式下尤其明显,按钮边缘有一圈若隐若现的光晕。
  • 交互上:轻触按钮时,会有一个细腻的光影呼吸反馈——按下去时光感增强,松开后恢复,非常跟手。
  • 性能上:我们测试了麒麟9000、骁龙8+等多款芯片的设备,都没有出现掉帧或发热异常。自适应的材质等级机制确实有效。

一个容易被忽略的细节:返回按钮也有光感

很多开发者在接入沉浸光感时,只关注右侧的功能菜单按钮,却忽略了左侧的返回按钮。其实,只要 ​​hideBackButton(false)​​​(默认就是 false),返回按钮会自动继承同一个 ​​systemMaterialEffect​​ 配置。

在Makerizon的学习主界面,用户经常需要从“课程详情”返回到“课程列表”。打开沉浸光感后,返回按钮的光影反馈让这个高频操作不再生硬,反而有种“推开一扇玻璃门”的顺滑感——这可能是设计心理学上的小惊喜,但用户确实会感受到。

避坑指南:我们踩过的两个坑

坑一:沉浸光感不生效?

一开始我们在模拟器上调试,发现设置 ​​systemMaterialEffect​​ 后完全没有视觉效果。排查了半天才想起来:模拟器不支持沉浸光感渲染,必须上真机测试。如果你的代码没问题但效果出不来,先检查是不是在真机上运行的。

坑二:低版本设备怎么办?

沉浸光感需要 API 23及以上版本。如果我们的应用跑在更低版本的设备上,​​systemMaterialEffect​​ 参数会被静默忽略,导航栏回退到普通样式——不会报错,也不会崩溃。所以我们没有做额外的版本判断,直接把适配工作交给系统,省心。

当然,如果你追求更精细的控制(比如低版本设备主动降级某些动画),可以参考官方文档调用 ​​getSystemMaterialTypes()​​ 接口做动态适配。

写在最后

沉浸光感并不是一个“必须要有”的功能,但对于追求界面质感和交互温度的应用来说,它是一个投入产出比极高的特性——代码改动量极小,但用户感知提升明显。

在Makerizon V1.0.1版本中,我们把沉浸光感用在了导航栏按钮上,配合原有的悬浮页签和双边流光视效,让课程切换、训练营入口与学习主界面之间的流转更加灵动顺滑。很多用户反馈说“感觉界面高级了不少”,但又说不清楚具体哪里变了——这可能就是沉浸光感最理想的状态:润物细无声,但体验确实更好了。

如果你的应用也使用了HDS导航栏或底部页签,不妨花十分钟接入这个特性。你的用户会感受到这份用心的。

Makerizon已在华为应用市场上架,欢迎下载体验搭载沉浸光感的新版本。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐