MultipurposeMachine 标题栏统一封装改造方案

记录时间:2026-06-11
源码项目:/Users/liang/AndroidStudioProjects/MultipurposeMachine
提示词仓库:/Users/liang/AndroidStudioProjects/zhct/zhctprompt
记录位置:work_android/MultipurposeMachine/title_bar_base_activity_refactor_plan_2026-06-11.html

结论:建议把当前散落在各页面的 NetWorkStatusView、网络状态刷新、标题栏返回逻辑,逐步收敛到 BaseActivity。方向参考 ZhctWeightingTableYoukate 的 addTitleView,但不要原样照搬,应按 MultipurposeMachine 当前页面结构和标题栏尺寸做适配。

现状判断

改造目标

  1. 页面 XML 不再重复写同一套标题栏控件。
  2. 网络状态图标的初始化、事件订阅和状态刷新统一由 BaseActivity 处理。
  3. 普通页面的返回按钮默认 finish(),特殊页面可以覆盖返回策略。
  4. 首页、设置页等特殊视觉比例不被统一封装破坏。
  5. 迁移过程中保持可回退,每次只改一组页面并构建验证。

推荐架构

1. 标题栏仍保留为独立 View

继续复用现有 NetWorkStatusView,不要急着拆成多个小控件。它已经承载 logo、网络图标、时间、日期、返回按钮和长按设置入口,短期内作为统一标题栏组件更稳。

2. BaseActivity 负责装配和状态

在 BaseActivity 中新增标题栏配置能力,例如:

3. 提供特殊返回钩子

SettingActivity 当前返回前需要执行初始化配置校验,不能简单 finish()。建议在 BaseActivity 提供 protected void onTitleBackClick(),默认 finish();设置页覆盖该方法调用现有 backChecker()。

4. 网络状态只保留一个 UI 订阅入口

页面不再各自写 @Subscribe NETWORK_STATUS_CHANGE 只为了刷新标题栏。BaseActivity 统一订阅网络事件并调用标题栏 setConnectStatus()。页面如有业务级网络逻辑,再单独订阅业务事件。

分阶段实施方案

阶段 动作 重点风险 验证方式
阶段 1 在 BaseActivity 增加标题栏注入、样式配置、网络状态刷新和返回钩子;先不迁移页面。 避免影响已继承 BaseActivity 但不需要标题栏的页面。 构建通过;确认未调用标题栏配置时行为不变。
阶段 2 迁移普通二级页面:AddPersonActivity、FaceManagerActivity、NutritionReportActivity、MenuPrintActivity。 移除 XML 标题栏后内容区域高度是否变化;返回按钮是否仍符合预期。 逐页启动,检查标题栏、返回、网络图标变化。
阶段 3 迁移 SettingActivity,覆盖标题栏返回钩子,复用现有 backChecker()。 初始化未完成时不能绕过配置校验直接返回首页。 验证配置未完成、模型未激活、配置完成三种返回路径。
阶段 4 最后评估首页 MainActivity 和启动页 StartActivity 是否接入统一标题栏。 首页当前使用 ConstraintLayout 百分比定位,直接外包标题栏可能改变视觉比例。 用截图对比首页布局,确认标题块、欢迎语、功能卡片没有被压缩或错位。
阶段 5 清理各页面重复的网络状态字段、导入、@Subscribe 和 XML 标题栏声明。 不要删除仍被弹窗或业务流程引用的 NetWorkStatusView API。 rg "NetWorkStatusView|setConnectStatus|NETWORK_STATUS_CHANGE" 复核剩余引用。

不建议的做法

建议修改清单

验收标准

记录机制说明

当前项目已在提示词仓库建立改动记录机制:

后续进入代码实施阶段时,提交前会自动追加 staged 改动记录;非提交型方案文档则直接落在提示词仓库对应项目目录。