鸿蒙综合讨论/菜单树 JSON 导出与回注

菜单树 JSON 导出与回注

桌面应用的菜单是移植工程的一大工作量:菜单项成百上千,还要快捷键、子菜单、勾选态。Air 系列的标准做法是菜单 ArkTS 化:把框架菜单树导出成 JSON,由原生壳渲染与回注。这篇讲这条流水线。

▍为什么菜单要 ArkTS 化
框架自绘菜单在触摸环境的问题:目标小(鼠标精度设计)、层级深、滚动与手势不友好、无法与系统风格一致。原生化后:菜单走系统组件,触摸目标、动效、暗黑模式全部系统级;还能混入系统级菜单项(分享、打开方式)与全局搜索。这是移植标准的第一项,不是可选项。

▍导出:菜单树 JSON
在框架侧遍历应用的菜单结构(菜单栏、上下文菜单、动态菜单),序列化成 JSON:节点含标识、标签、类型(项、分隔、子菜单、勾选、单选组)、快捷键、可用态。静态部分可在构建期导出,动态部分(随文档状态变化的可用性)运行时增量同步。标签字段此时还是原文,留给汉化流水线处理。

▍回注:事件到框架
原生壳渲染菜单树,用户点击后把标识回注框架,框架触发对应动作。回注通道就是 NAPI 桥的普通一员。动态可用性用两种策略:全量刷新(状态变化时重发整树,简单但重)或差分更新(精准但复杂),中小菜单全量即可。勾选与单选态要双向同步:框架变、菜单跟着变;用户点、框架跟着变。

▍工程要点
一,标识稳定性:菜单项标识用框架侧的稳定 ID(动作名),别用序号(上游加一项全乱)。二,快捷键展示:桌面快捷键文案(Ctrl 加 S)在移动端展示要有取舍——连接键盘时有用,纯触摸时可以隐藏或弱化。三,菜单搜索:大菜单(几百项)加搜索过滤,是平板效率场景的刚需。四,上下文菜单:长按唤出,同样走 JSON 通道。

▍验收
逐菜单对拍:每个菜单项的点击效果与桌面版一致;快捷键在有键盘时可用;动态项状态正确;暗黑模式下样式正常。

▍一句话
菜单不是画出来的,是导出、渲染、回注的流水线,一次建成处处受益。

更多真实移植案例,欢迎到 apps 板块翻看 56 篇《鸿蒙PC适配全记录》系列实录。
楼主 7 天前
想参与讨论?登录 或 30 秒注册。