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。方向参考 ZhctWeightingTableYoukateaddTitleView,但不要原样照搬,应按 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 迁移普通二级页面:AddPersonActivityFaceManagerActivityNutritionReportActivityMenuPrintActivity 移除 XML 标题栏后内容区域高度是否变化;返回按钮是否仍符合预期。 逐页启动,检查标题栏、返回、网络图标变化。
阶段 3 迁移 SettingActivity,覆盖标题栏返回钩子,复用现有 backChecker() 初始化未完成时不能绕过配置校验直接返回首页。 验证配置未完成、模型未激活、配置完成三种返回路径。
阶段 4 最后评估首页 MainActivity 和启动页 StartActivity 是否接入统一标题栏。 首页当前使用 ConstraintLayout 百分比定位,直接外包标题栏可能改变视觉比例。 用截图对比首页布局,确认标题块、欢迎语、功能卡片没有被压缩或错位。
阶段 5 清理各页面重复的网络状态字段、导入、@Subscribe 和 XML 标题栏声明。 不要删除仍被弹窗或业务流程引用的 NetWorkStatusView API。 rg "NetWorkStatusView|setConnectStatus|NETWORK_STATUS_CHANGE" 复核剩余引用。

不建议的做法

建议修改清单

验收标准

记录机制说明

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

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