Cocos Creator ScrollView嵌套事件拦截:8行代码解决UI交互冲突
1. 项目概述ScrollView嵌套事件拦截的“顽疾”在Cocos Creator的UI开发中ScrollView组件几乎是制作可滚动列表、页面、背包等界面的不二之选。然而当你试图在一个ScrollView内部嵌套另一个ScrollView或者在其中放置Button、Toggle等交互组件时一个令人头疼的问题便会频繁出现内部的触摸事件经常被外层的ScrollView“吞掉”。想象一下这个场景你设计了一个垂直滚动的任务列表外层ScrollView每个任务项里又有一个可以左右滑动切换状态的小控件内层ScrollView或一个可拖拽区域。用户的本意是左右滑动小控件但手指的微小垂直移动就可能被外层ScrollView判定为试图滚动列表从而拦截了所有事件导致内部控件毫无反应。这种体验上的“卡顿”和“失灵”对于追求操作流畅的游戏或应用来说是致命的。官方文档和社区里针对这个问题的主流解决方案往往比较“重”。比如有的建议通过复杂的节点层级和事件冒泡机制手动控制有的则推荐重写ScrollView的_onTouchBegan、_onTouchMove等内部方法侵入性较强且在不同Cocos Creator版本间可能存在兼容风险。这些方法虽然能解决问题但代码量不小理解成本高不够优雅。今天要分享的是我在多个项目中实践并提炼出的一个“黑科技”级方案。核心思路极其简单仅需八行代码通过一个自定义组件无侵入式地解决嵌套事件拦截问题。它不修改任何引擎源码完全基于Cocos Creator现有的事件机制稳定且高效。下面我们就来彻底拆解这个问题并一步步实现这个轻量级解决方案。2. 问题根源Cocos Creator UI事件系统的运作机制要解决问题必须先理解问题是如何产生的。Cocos Creator的UI事件处理遵循一个特定的流程核心在于_hitTest点击测试和事件冒泡与拦截机制。2.1 点击测试_hitTest与事件派发当手指触摸屏幕时引擎会从场景根节点开始递归地进行点击测试。对于UITransform组件它会检查触摸点是否在其节点及其子节点的包围盒内。ScrollView组件之所以能响应滚动是因为它内部监听了触摸事件TOUCH_START,TOUCH_MOVE,TOUCH_END,TOUCH_CANCEL。关键在于一个节点能否接收到触摸事件取决于它在点击测试中是否被“命中”以及事件在传播过程中是否被拦截。2.2 ScrollView的“贪婪”拦截ScrollView组件有一个名为cancelInnerEvents的属性在属性检查器中可见。这个属性的名字已经暗示了它的行为取消内部事件。默认情况下这个属性是true。它的工作机制是这样的当触摸开始TOUCH_START时ScrollView会通过_hitTest判断触摸点是否落在自己的content节点或ScrollBar节点上。如果是ScrollView会“声称”这个触摸事件并调用event.propagationStopped true;来立即停止事件的进一步冒泡。这意味着即使触摸点同时也落在了ScrollView内部的一个Button上这个Button也永远收不到TOUCH_START事件。没有开始自然也就没有后续的TOUCH_END来触发点击回调。随后ScrollView会监听TOUCH_MOVE。只有当手指移动距离超过一个阈值一个很小的死区ScrollView才会判定用户意图是“滚动”并开始移动content。但如果用户只是点击或者在死区内微小的移动意图是点击内部按钮ScrollView在判定为非滚动后也不会将事件重新派发给子节点因为事件传播早已在第一步就被停止了。这就是嵌套交互失效的根本原因父级ScrollView为了独占滚动判断过早地、无条件地拦截了所有触摸事件没有给子级交互组件任何机会。2.3 嵌套ScrollView的特殊情况当内外两层都是ScrollView时情况更复杂。假设外层是垂直滚动内层是水平滚动。用户想水平滑动内层手指轨迹不可能完全水平总会带一点垂直分量。外层ScrollView一旦检测到这个垂直分量就可能判定为垂直滚动意图从而拦截事件导致内层水平滚动无法触发。注意cancelInnerEvents属性设置为false并不能完美解决此问题。它允许事件继续向子节点冒泡子节点如内层ScrollView可以接收到TOUCH_START。但是当内外层滚动方向不同时引擎底层的事件竞争逻辑依然会导致滚动冲突体验不跟手。我们需要更精细的控制。3. 解决方案设计动态事件拦截权我们的目标不是简单地关闭cancelInnerEvents而是实现一种智能的、动态的事件分配机制。核心思想是在触摸开始阶段允许事件正常传递给内部的可交互组件。只有当手指移动距离明确超过阈值且移动方向符合外层ScrollView的滚动方向时才让外层ScrollView“接管”并拦截后续事件执行滚动。否则事件应继续由内部组件处理。这听起来需要监控触摸轨迹和方向判断似乎很复杂。但得益于Cocos Creator的事件系统我们可以用一个取巧的方式实现。方案的核心是创建一个中间层组件将其挂载在内层需要交互的节点或内层ScrollView的节点上。这个组件的作用是“欺骗”外层ScrollView。具体流程如下触摸开始时中间层组件立即响应并临时阻止事件冒泡到外层ScrollView。中间层组件开始监控触摸移动。如果移动方向主要是内层交互允许的方向例如水平则什么都不做事件自然由内层组件如内层ScrollView消费。如果移动方向主要是外层ScrollView允许的方向例如垂直并且距离超过阈值那么中间层组件就“放行”并模拟一个触摸取消事件给内层同时让外层ScrollView开始滚动。然而实现上述逻辑依然需要不少代码。我们有一个更简洁、更通用的“黑科技”思路它利用了ScrollView组件对节点**_touchListener** 的依赖。通过修改内层节点的触摸监听器属性可以使其对外层ScrollView“不可见”从而避免事件在初始阶段被拦截。4. 八行代码“黑科技”实现详解下面就是解决此问题的核心代码我们将其封装为一个名为ScrollViewNestedHelper的组件。import { _decorator, Component, Node, UITransform, ScrollView } from cc; const { ccclass, property } _decorator; ccclass(ScrollViewNestedHelper) export class ScrollViewNestedHelper extends Component { onEnable() { const uiTransform this.node.getComponent(UITransform); if (uiTransform uiTransform._touchListener) { // 关键操作临时修改触摸监听器的 swallowTouches 属性 // ts-ignore 访问私有属性需要忽略类型检查 uiTransform._touchListener.swallowTouches false; } } onDisable() { const uiTransform this.node.getComponent(UITransform); if (uiTransform uiTransform._touchListener) { // 组件禁用时恢复默认行为可选根据需求决定 // ts-ignore uiTransform._touchListener.swallowTouches true; } } }4.1 代码逐行解析onEnable(): 当该组件所在的节点被激活时此方法被调用。这是我们进行“魔法”操作的最佳时机。const uiTransform this.node.getComponent(UITransform);: 获取当前节点上的UITransform组件。任何需要响应UI事件的节点都必须有UITransform它内部管理着触摸监听器_touchListener。if (uiTransform uiTransform._touchListener): 安全检查。确保节点有UITransform并且其内部的触摸监听器已创建。uiTransform._touchListener.swallowTouches false;:这是最核心的一行代码。_touchListener是UITransform内部用于注册到事件系统的事件监听器对象。swallowTouches属性决定了当这个监听器处理事件时是否“吞噬”该事件阻止其继续向父节点冒泡。默认情况下对于可交互UI节点这个值可能是true。我们将其设置为false意味着由此节点处理的触摸事件在它处理完后还会继续向上层父节点即外层的ScrollView冒泡。这行代码前加了// ts-ignore因为_touchListener是引擎的内部属性在TypeScript定义文件中可能是私有的直接访问会有类型报错。在实际运行中这个属性是存在的。4.2 工作原理揭秘为什么这样修改就能解决问题让我们结合之前分析的事件流来看默认情况出问题时手指按下同时覆盖外层ScrollView和内层Button。引擎进行点击测试。内层Button的UITransform和外层ScrollView的UITransform都被命中。事件开始冒泡。假设先到达内层Button的监听器因为节点树顺序或其它机制但由于其swallowTouches可能为true事件被它“吞噬”停止冒泡。但更重要的是外层ScrollView拥有更高的优先级或通过cancelInnerEvents直接拦截内层Button可能根本收不到事件。使用我们的组件后手指按下点击测试同上。事件冒泡。当事件到达我们挂载了ScrollViewNestedHelper的内层节点或其子节点的UITransform监听器时由于swallowTouches false该监听器处理事件但不会停止冒泡。事件继续向上传递到外层ScrollView。此时外层ScrollView也接收到了TOUCH_START事件。但它内部的逻辑尤其是与cancelInnerEvents相关的部分发现事件已经由子节点处理过了并且子节点没有“吞噬”事件那么它可能会采取不同的行为策略。在Cocos Creator的实现中这通常意味着外层ScrollView不会立即强制停止事件传播而是会等待TOUCH_MOVE来判断是否滚动。如果用户手指很快抬起点击内层Button能成功接收到完整的TOUCH_START和TOUCH_END序列触发点击回调。如果用户开始滑动外层ScrollView在TOUCH_MOVE中判断符合滚动条件此时它仍然可以“接管”滚动并可能中断子节点的事件流例如发送TOUCH_CANCEL给内层但这已经是在用户意图明确之后了滚动体验变得正常。简而言之这八行代码通过修改子节点的事件监听行为为内外层组件创造了一个短暂的事件“共享窗口期”使得点击操作能够优先被内层组件响应而滚动操作依然由外层ScrollView有效接管。4.3 使用方法将上述TypeScript代码保存为scroll-view-nested-helper.ts。在Cocos Creator编辑器中找到内层需要被保护的可交互节点例如嵌套在内层ScrollView的content节点下的那个Button或者内层ScrollView节点本身。选中该节点在属性检查器中点击“添加组件” - “用户脚本组件” -ScrollViewNestedHelper。可选但重要确保外层ScrollView的cancelInnerEvents属性为true默认值即可。我们的方案是在此基础上优化的。5. 方案优化与边界情况处理基础的八行代码已经能解决90%的嵌套事件冲突。但在更复杂的生产环境中我们需要考虑更多细节使其更健壮。5.1 优化一精确控制作用目标有时我们只想让内层的某个特定区域如一个按钮不干扰滚动而内层其他区域仍希望触发外层滚动。我们可以增加一个targetNode属性让助手组件只影响特定的子节点。import { _decorator, Component, Node, UITransform } from cc; const { ccclass, property } _decorator; ccclass(ScrollViewNestedHelper) export class ScrollViewNestedHelper extends Component { property(Node) targetNode: Node | null null; // 指定需要辅助的节点不填则默认为当前节点 onEnable() { const node this.targetNode || this.node; this.setNodeSwallowTouches(node, false); } onDisable() { const node this.targetNode || this.node; this.setNodeSwallowTouches(node, true); } private setNodeSwallowTouches(node: Node, swallow: boolean) { const uiTransform node.getComponent(UITransform); if (uiTransform uiTransform._touchListener) { // ts-ignore uiTransform._touchListener.swallowTouches swallow; } } }5.2 优化二处理动态创建与复用如果你的滚动列表是动态生成的例如使用Layout或ScrollView的content下动态创建项你需要确保在项被创建并添加到场景后助手组件能正确生效。通常将组件添加到预制体Prefab上在onEnable生命周期中执行操作即可满足。如果遇到问题可以尝试在start或首次update中延迟一帧设置。5.3 优化三与ScrollView的交互滚动方向协同对于嵌套ScrollView垂直内嵌水平我们的方案允许内层水平ScrollView先接收到事件。但我们需要确保当用户明显意图是垂直滚动外层时外层能顺利接管。这通常依赖于外层ScrollView自身的滚动阈值判断已经能工作得很好。如果你需要更精细的控制可以扩展助手组件让其监测初始触摸点并在一定延迟或距离后主动管理内外层的事件开关但这会大大增加复杂度超出了“八行代码”的简洁范畴。对于绝大多数情况基础方案已足够。6. 常见问题排查与实战心得在实际使用中你可能会遇到一些疑问或异常情况。这里我总结了一份排查清单和心得。6.1 问题排查速查表问题现象可能原因解决方案内部按钮完全无法点击1.ScrollViewNestedHelper组件未正确挂载或启用。2. 内部按钮节点本身没有UITransform或Button组件。3. 外层有多个遮挡层如全屏透明按钮。1. 检查节点激活状态和组件启用状态。2. 确保按钮有UITransform和Button组件。3. 检查节点层级确保触摸能传递到目标按钮。内部按钮可以点击但外层ScrollView完全无法滚动了可能将ScrollViewNestedHelper挂载到了错误的节点上例如直接挂在了外层ScrollView的content上导致所有触摸事件都不被吞噬滚动无法触发。确保助手组件只挂载在需要穿透点击的内部交互子节点上不要挂在外层ScrollView或其直接content节点。嵌套的ScrollView内部无法滚动了内层ScrollView也需要能“吞噬”事件来触发自身滚动。我们的助手组件挂在内层ScrollView节点上将其swallowTouches设为false可能导致内层ScrollView也失去了拦截事件的能力。这是关键点对于嵌套的ScrollView助手组件应该挂在内层ScrollView的子交互元素上而不是内层ScrollView节点本身。如果内层ScrollView内部只有滚动内容没有其他交互则可能不需要此助手或者需要更复杂的双方向判断逻辑。在部分安卓机或Web平台效果不一致不同平台或浏览器对于触摸事件处理的细微差异可能导致阈值判断不同。检查外层ScrollView的inertia惯性、brake减速度等属性确保滚动体验平滑。可以微调ScrollView的滚动敏感度。6.2 实操心得与注意事项最小化影响范围不要图省事将ScrollViewNestedHelper挂到整个content节点上。这会导致该content下所有子节点的事件都不再被“吞噬”可能会意外影响其他UI逻辑。始终将其挂载到最需要解决冲突的、具体的交互子节点上。理解事件流这个方案是一个“ Hack ”它利用了引擎的内部属性。虽然稳定但你需要对Cocos Creator的事件传播机制有基本了解才能在复杂UI树中正确应用。性能考量修改swallowTouches是一个非常轻量的操作每帧不会产生额外开销。性能影响可以忽略不计。版本兼容性代码中访问了_touchListener这个私有属性。在Cocos Creator未来的大版本更新中如果引擎内部事件系统重构此属性可能会失效。目前v3.x版本是稳定的。如果升级后出现问题应首先检查此部分代码。备选方案如果这个方案在你的极端复杂场景下仍不理想最后的“大招”是考虑放弃使用嵌套ScrollView改用单个ScrollView 自定义Item渲染逻辑来模拟内层滚动效果。例如在内层区域使用拖拽事件和动画来模拟水平滚动这样可以完全掌控事件逻辑。7. 总结与扩展思考通过这八行代码我们巧妙地绕过了Cocos Creator默认UI事件机制在嵌套滚动/交互场景下的一个限制。其本质是通过调整子节点事件监听器的“吞噬”行为来延迟外层ScrollView的事件拦截判断从而让子节点获得一个短暂的事件响应机会。这个方案的优势在于极其轻量代码少逻辑简单运行开销几乎为零。无侵入性不修改引擎源码不继承重写标准组件维护方便。针对性强可以精确应用到某个特定节点不影响其他UI逻辑。当然软件开发没有银弹。这个方案最适合解决“外层可滚动容器 内层点击/轻交互”的冲突。对于复杂的双向嵌套滚动如垂直列表内嵌水平画廊可能需要结合内层ScrollView的滚动方向进行更精细化的控制例如在助手组件中加入方向判断逻辑在检测到垂直滑动时主动将事件控制权交还给外层。最后分享一个我在实际项目中的小技巧对于特别复杂的动态列表项我会为每个项预制体创建一个空节点专门用于处理“防止事件被父ScrollView误拦截”的逻辑将所有需要内部交互的按钮作为其子节点。然后将ScrollViewNestedHelper挂在这个空节点上这样可以集中管理逻辑清晰。希望这个“黑科技”和这些实战经验能帮助你彻底告别Cocos Creator中ScrollView的嵌套事件之痛。

相关新闻

从2D图像到3D人体网格:HybrIK混合逆运动学算法终极指南

从2D图像到3D人体网格:HybrIK混合逆运动学算法终极指南

从2D图像到3D人体网格:HybrIK混合逆运动学算法终极指南 【免费下载链接】HybrIK Official code of "HybrIK: A Hybrid Analytical-Neural Inverse Kinematics Solution for 3D Human Pose and Shape Estimation", CVPR 2021 项目地址: https://gitcode.…

2026/8/6 23:16:00 阅读更多 →
基于Langfuse的AI Agent可观测性实战:从黑盒调试到生产部署

基于Langfuse的AI Agent可观测性实战:从黑盒调试到生产部署

如果你正在准备大模型或AI Agent相关的面试,或者正在企业中负责相关项目的落地,那么这篇文章就是为你准备的。今天我们不谈空洞的概念,而是聚焦一个核心问题: 如何系统性地追踪、评估和观测一个AI Agent项目的全生命周期&#xf…

2026/8/6 23:15:00 阅读更多 →
纯碘宽带隙钙钛矿,MPPT追踪8140小时:22.1%效率刷新宽带隙稳定性纪录

纯碘宽带隙钙钛矿,MPPT追踪8140小时:22.1%效率刷新宽带隙稳定性纪录

硅/钙钛矿叠层太阳能电池是下一代光伏技术的主流方向,顶电池通常靠混合卤化物宽带隙钙钛矿来担纲,但卤化物偏析对运行寿命的拖累一直是个老大难。美能钙钛矿最大功率点追踪测试MPPT采用3A级LED太阳光模拟器作为老化光源,可通过多种方式对电池…

2026/8/6 23:15:00 阅读更多 →

最新新闻

OODER架构:用自然语言驱动企业业务组件重生的AI工程实践

OODER架构:用自然语言驱动企业业务组件重生的AI工程实践

1. 项目概述:当企业软件遇上AI,我们到底在解决什么?如果你在企业里负责过软件系统,无论是作为开发者、产品经理还是业务负责人,大概率都经历过这样的场景:业务部门提了一个看似简单的需求,比如“…

2026/8/7 4:22:30 阅读更多 →
LSSVM-ABKDE混合模型:工业预测中的概率建模实战

LSSVM-ABKDE混合模型:工业预测中的概率建模实战

1. 项目概述:当预测遇上概率——LSSVM-ABKDE混合模型实战在工业预测领域,我们常常面临这样的困境:传统点预测模型(如SVM、随机森林)只能给出单一数值结果,而实际业务中决策者更需要知道"预测值落在某个…

2026/8/7 4:22:30 阅读更多 →
AI服务基础设施化:构建高可用、抗风险的智能应用架构实践

AI服务基础设施化:构建高可用、抗风险的智能应用架构实践

最近,AI安全领域发生了一件值得所有开发者关注的事件。如果你正在使用或计划集成类似ChatGPT、GPT-4这样的AI能力到你的应用中,那么这件事与你息息相关。它并非一次简单的功能更新,而是揭示了当AI能力成为基础设施时,开发者、企业…

2026/8/7 4:22:30 阅读更多 →
电视盒子秒变大屏阅读器:TVBoxOSC文档功能全攻略

电视盒子秒变大屏阅读器:TVBoxOSC文档功能全攻略

电视盒子秒变大屏阅读器:TVBoxOSC文档功能全攻略 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC 还在为手机看文档眼睛累而烦恼吗&am…

2026/8/7 4:22:30 阅读更多 →
OpenClaw AI网关实战:统一管理多模型API,实现智能路由与成本控制

OpenClaw AI网关实战:统一管理多模型API,实现智能路由与成本控制

1. 从“AI网关”说起:为什么你需要OpenClaw?如果你正在尝试将不同的AI模型(比如ChatGPT、Claude、文心一言、通义千问,甚至是本地部署的Llama、Qwen)整合到你的应用里,那你大概率已经遇到了一个头疼的问题&…

2026/8/7 4:22:30 阅读更多 →
AI智能体Skill开发实战:从零构建可复用技能模块的七步法

AI智能体Skill开发实战:从零构建可复用技能模块的七步法

1. 项目概述:从“写Skill”到“构建智能体”最近在折腾AI智能体开发的朋友,估计没少被“Skill”这个词刷屏。无论是OpenClaw、Workbuddy,还是各种基于Claude、Hermes的Agent框架,核心玩法都绕不开“Skill”——你可以把它理解为智…

2026/8/7 4:21:30 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →