当前位置: 首页 > news >正文

HarmonyOS7 互动卡片和闪控窗,正在重写 UI 交互

文章目录

    • 前言
    • 互动卡片:不只是静态展示
      • 核心能力
      • 互动卡片组件开发
      • 卡片配置注册
    • 闪控窗:悬浮窗的终极形态
      • 三种形态
      • 闪控窗配置
      • 闪控窗内的 UI 面板
    • 把互动卡片和闪控窗串起来
    • 踩坑与心得
    • 小结

前言

上篇我们搞定了 3D 商品展示,今天换个方向——看看 HarmonyOS 7 最吸引眼球的两个 UI 新能力:互动卡片闪控窗

这两个东西组合起来能干嘛?简单说就是:你的 App 卡片在桌面上能"动起来",用户摇一摇手机卡片就有动态反馈;同时还能有一个全局悬浮的闪控球,随时呼出智能助手,不用切应用。

互动卡片:不只是静态展示

传统的桌面服务卡片就是一张静态图,点击跳 App。HarmonyOS 7 的互动卡片加了一层"活"的东西——你可以通过传感器事件(比如摇一摇)触发卡片的动态效果。

核心能力

  • 静态转动态:摇一摇手机,卡片从静态图变成动画状态
  • 前景出框:卡片里的人物/商品可以"溢出"卡片边界,产生立体感
  • 视差效果:随手机倾斜角度变化,卡片内元素产生视差移动

互动卡片组件开发

互动卡片还是基于@Entry装饰器的 Form 组件,但多了@Interactive装饰器和传感器事件绑定:

// card/SmartAssistantCard.ets@Entry@Component@Interactivestruct SmartAssistantCard{@StateisShaking:boolean=false;@StatetiltX:number=0;@StatetiltY:number=0;@StorageLink('cardWeather')weatherData:string='晴';build(){Stack(){// 背景层——静态天气场景Image($r('app.media.weather_bg')).width('100%').height('100%').objectFit(ImageFit.Cover)// 前景元素——会"出框"的天气图标Image($r('app.media.sun_icon')).width(80).height(80).offset({x:this.tiltX*10,y:this.tiltY*10-(this.isShaking?20:0)}).scale({x:this.isShaking?1.2:1.0,y:this.isShaking?1.2:1.0}).animation({duration:300,curve:Curve.EaseOut})// 文字信息Column(){Text(this.weatherData).fontSize(24).fontWeight(FontWeight.Bold).fontColor('#FFFFFF')Text('智能生活助手').fontSize(12).fontColor('#CCFFFFFF')}.alignItems(HorizontalAlign.Start).padding(16).layoutAlign(Alignment.BottomStart)}.width('100%').height('100%').borderRadius(16)// 绑定摇一摇事件.onShake(()=>{this.isShaking=true;setTimeout(()=>{this.isShaking=false;},1500);})// 绑定倾斜传感器.onTilt((event:TiltEvent)=>{this.tiltX=event.angleX;this.tiltY=event.angleY;})}}

几个要点:@Interactive装饰器告诉系统这个卡片支持交互事件;onShakeonTilt是卡片专属的传感器回调,普通页面里用不到这套 API。前景出框效果的核心就是让元素在offset方向上突破卡片边界——系统会自动裁切掉超出部分,但通过clip(false)可以让它"溢出来",产生 3D 感。

卡片配置注册

别忘了在module.json5里声明互动能力:

{"module":{"extensionAbilities":[{"name":"SmartAssistantForm","type":"form","metadata":[{"name":"ohos.extension.form","resource":"$profile:form_config"}],"interactive":true,"sensorCapabilities":["shake","tilt"]}]}}

interactive: truesensorCapabilities这两行是关键,少了任何一个,摇一摇和倾斜事件都不会触发。

闪控窗:悬浮窗的终极形态

闪控窗是 HarmonyOS 7 把悬浮窗、侧边栏暂存、闪控球三个东西融为一体的新方案。以前做一个悬浮功能,你得处理窗口管理、边界检测、收纳逻辑,现在系统全帮你搞定。

三种形态

  1. 悬浮窗模式:正常浮动在屏幕上的小窗口,可以自由拖动和调整大小
  2. 侧边栏暂存:拖到屏幕边缘自动吸附,变成侧边条,不占空间但随时可拉出来
  3. 闪控球模式:缩成一个悬浮小球,在任何 App 上方都能显示,点击展开恢复窗口

闪控窗配置

闪控窗通过window模块的StageWindowManager来管理:

// utils/FlashControlManager.etsimport{window}from'@kit.ArkUI';exportclassFlashControlManager{privateflashWindow:window.FlashControlWindow|null=null;// 创建闪控窗asynccreate(context:Context):Promise<void>{constconfig:window.FlashControlConfig={// 初始化为悬浮窗模式initialMode:window.FlashControlMode.FLOATING,// 窗口初始尺寸和位置bounds:{x:100,y:600,width:360,height:480},// 允许的模式切换supportedModes:[window.FlashControlMode.FLOATING,window.FlashControlMode.SIDEBAR,window.FlashControlMode.BALL],// 闪控球的外观ballConfig:{size:56,icon:$r('app.media.assistant_ball'),autoHide:true,// 无操作 5 秒后半透明edgeAttach:true// 允许吸附屏幕边缘}};this.flashWindow=awaitwindow.createFlashControl(context,config);// 加载卡片内容页面awaitthis.flashWindow.setUIContent('pages/AssistantFlashPanel');// 监听模式切换this.flashWindow.on('modeChanged',(mode:window.FlashControlMode)=>{switch(mode){casewindow.FlashControlMode.BALL:// 缩成球时,暂停不必要的后台任务console.info('闪控窗已缩为闪控球');break;casewindow.FlashControlMode.FLOATING:// 展开时恢复console.info('闪控窗已展开');break;}});// 显示this.flashWindow.show();}// 从闪控球状态主动展开asyncexpand():Promise<void>{if(this.flashWindow){awaitthis.flashWindow.setMode(window.FlashControlMode.FLOATING);}}// 销毁destroy():void{this.flashWindow?.destroy();this.flashWindow=null;}}

FlashControlConfig里的supportedModes决定了用户能怎么操作。如果不想让用户切成侧边栏,去掉SIDEBAR就行。ballConfig.autoHide挺实用的——闪控球在用户不碰它几秒后自动变半透明,不会挡住底下内容。

闪控窗内的 UI 面板

闪控窗里加载的是一个独立的页面,我们的智能助手面板长这样:

// pages/AssistantFlashPanel.ets@Entry@Componentstruct AssistantFlashPanel{@Statequery:string='';@Statemessages:string[]=[];build(){Column(){// 顶部拖动条(系统自动渲染,但你可以自定义颜色)Row().width(40).height(4).borderRadius(2).backgroundColor('#CCCCCC').margin({top:8,bottom:8})// 消息列表List(){ForEach(this.messages,(msg:string)=>{ListItem(){Text(msg).fontSize(14).padding(8).backgroundColor('#F0F0F0').borderRadius(8)}})}.layoutWeight(1)// 输入区Row(){TextInput({placeholder:'问点什么...',text:this.query}).layoutWeight(1).onChange((value:string)=>{this.query=value;})Button('发送').onClick(()=>{if(this.query.trim()){this.messages.push(this.query);this.query='';}})}.padding(12)}.width('100%').height('100%').backgroundColor('#FFFFFF').borderRadius(16)}}

把互动卡片和闪控窗串起来

在我们的智能生活助手里,这两个功能是这么配合的:

桌面卡片展示天气/日程摘要 → 用户摇一摇看到动态效果 → 点击卡片"展开详情" → 闪控球弹出悬浮面板 → 用户在面板里跟助手对话。

关键代码是在卡片的点击事件中拉起闪控窗:

// 卡片中点击展开的回调.onClick(()=>{// 通过 Want 通知主应用启动闪控窗constwant:Want={bundleName:'com.example.smartassistant',abilityName:'MainAbility',action:'action.showFlashControl'};context.startAbility(want);})

然后在MainAbilityonNewWant里判断 action,决定是否拉起闪控窗。这部分逻辑比较直白就不展开了。

踩坑与心得

卡片刷新频率有限制。互动卡片的动态更新不是无限的,系统有帧率管控(大约 30fps 上限),别在里面做太复杂的逐帧动画,会卡。

闪控窗权限。创建闪控窗需要ohos.permission.SYSTEM_FLOAT_WINDOW权限,这是个 system_grant 权限,需要在module.json5里声明。普通应用能申请到,但审核时华为会看你的使用场景是否合理。

侧边栏暂存的 UI 适配。从悬浮窗拖到侧边栏时,窗口宽度会被压到很窄。你的 UI 得能响应这个变化,建议用MediaQuery做适配,或者监听boundsChanged事件动态调整布局。

小结

互动卡片和闪控窗是 HarmonyOS 7 在系统级 UI 上的大升级。互动卡片让桌面不再只是图标排列,闪控窗让悬浮交互有了标准化方案。做智能助手这类需要"常驻"和"随时可达"的应用,这两个能力几乎是必选项。

下一篇我们聊多形态服务窗口——悬浮窗、分屏、平行视界,看看怎么让 App 在不同设备形态上都好用。

http://www.jsqmd.com/news/1083801/

相关文章:

  • 30.IEC61131-3 标准编程:电机延时防误报 + 故障复位系统,可直接落地
  • Oracle 11g RAC集群删除节点和重建(一)
  • 抖音直播数据采集终极指南:5分钟快速上手实时弹幕抓取
  • 2026年最新干货:天学网能提分吗?过来人实际使用效果全解析
  • SQL注入漏洞复现:从原理到实战,以万户ezOFFICE为例
  • Win11 联想笔记本摄像头失灵!物理开关、驱动都正常,原来是权限没全开
  • Lora转4G Cat1网关方案设计与实现
  • PCB走线S21插损:从-1dB到-6dB,信号到底衰减了多少?
  • VS Code真能替代IntelliJ IDEA吗?——基于237个真实项目、12.6万行代码的IDE行为日志分析(含JVM热加载失败率对比)
  • 如何高效使用开源AI绘图工具:NMKD Stable Diffusion GUI完整配置指南
  • 局部切空间排列(LTSA)流形学习算法 MATLAB 实现
  • 【每日学术速报】2026-06-24|三道防线之战:VLA可信部署与医学影像跨模态感知的平行求索
  • 推荐1款不错的实用工具,Windows 必备!
  • STM32主控电路板设计与电子竞赛实战经验
  • 3步找回加密压缩包密码:ArchivePasswordTestTool终极指南
  • Playwright爬虫实战:高效抓取SPA动态网页数据
  • 《仓颉语言面向对象程序设计》 全套PPT课件
  • 制药设备管理数字化追溯系统的设计与实现——基于T/SHQAP 011-2025标准
  • 从Selenium到Playwright:现代Web自动化测试框架的核心优势与实践指南
  • 终极指南:如何在Blender中无缝导入Rhinoceros 3D文件?
  • 告别词库迁移烦恼:深蓝词库转换助你3步完成20+输入法无缝切换
  • NatPass内网穿透工具:从原理到部署的完整指南
  • GARbro:视觉小说资源提取的终极解决方案
  • 快速部署GitLab及克隆地址url终极指南
  • AI 景健工艺 · 电动旋转展示盘智能功率 MOSFET 完整选型方案
  • SaaS系统解决方案深度解析:行业现状、痛点与2026发展趋势
  • 终极指南:用OpenCore Legacy Patcher让你的老Mac重获新生,免费升级到最新macOS
  • 2026年GEO培训机构行业调研:选型标准、落地痛点与实战落地标杆分析
  • AI写论文不用愁!4款AI论文写作工具,轻松应对各类论文需求!
  • HarmonyOS7 悬浮窗、分屏、平行视界怎么配合?多形态窗口实战