2026-06-23 排菜页布局 XML 化变更记录
背景
排菜页 ArrangeActivity 中设备列表、称位格子、抽屉候选菜行原先主要通过 Java 代码动态创建。这样能快速实现逻辑,但后续排查 UI 问题时存在几个成本:
- View 层级只能从 Java 方法里反推,不方便直接在布局文件中预览。
- 控件 ID 不稳定,问题定位时不利于用 Layout Inspector 或日志精确查找。
- 样式、结构、数据绑定混在一个 Activity 方法里,后续改间距、字号、显隐状态容易牵动业务逻辑。
本次按“先迁移最影响排查的重复 item 布局”的原则处理,没有一次性重构整个排菜页,避免扩大风险。
变更范围
Android 布局文件
新增 3 个可预览、可查找的 item 布局:
app/src/main/res/layout/item_arrange_equipment_card.xml:设备卡片根布局,包含设备名称、在线状态、称位容器equipment_slot_row。app/src/main/res/layout/item_arrange_equipment_slot.xml:单个称位格子布局,包含称位名称、菜品图片、菜品名称、空称位提示、右上角移除按钮tv_slot_remove。app/src/main/res/layout/item_arrange_drawer_dish.xml:右侧抽屉候选菜行布局,包含菜品图片、菜品名称、价格、选中标记。
Java 代码
调整 app/src/main/java/com/cpt/managedishteminal/activity/ArrangeActivity.java:
createDrawerDishItemView(DishItem item)改为加载item_arrange_drawer_dish,Java 只绑定图片、名称、价格、选中态和点击事件。createEquipmentItemView(EquipmentItem item)改为加载item_arrange_equipment_card,Java 只绑定设备名称、在线状态、动态添加称位。createEquipmentSlotView(EquipmentItem item, EquipmentSlot slot)改为加载item_arrange_equipment_slot,Java 只绑定称位名、菜品图片、菜品名称、空状态、右上角移除按钮显隐。- 删除不再需要的
createEquipmentHeaderView()和createRemoveButton()动态构建方法。 - 移除不再使用的
FrameLayoutimport。
保留逻辑
- 设备列表接口解析、筛选、四列网格排列逻辑。
- 设备在线/离线状态文案和颜色。
- 单称/双称的称位展示逻辑。
- 称位选中态背景。
- 已排菜时右上角
×的显示逻辑。 - 菜品图片继续通过 Glide 加载。
- 抽屉候选菜点击仍沿用当前占位提示。
未在本次处理的动态布局
以下区域仍保留 Java 动态生成,原因是它们和数据层级或主题状态强绑定,适合后续单独迁移:
- 档口选择弹窗的多列树形列表。
- 顶部筛选按钮的状态刷新。
- 抽屉分类按钮。
- 分段切换按钮的选中背景。
- 空数据提示 TextView 的动态创建。
后续如果继续推进,建议下一步迁移“档口选择弹窗列表项”和“分类按钮 item”,不要一次性改完整个 Activity。
验证记录
在 /Users/liang/AndroidStudioProjects/ManageDishTeminal 执行:
sh ./gradlew assembleDebug
结果:BUILD SUCCESSFUL in 729ms。
sh ./gradlew lintDebug
结果:BUILD SUCCESSFUL in 1s,报告输出到 app/build/reports/lint-results-debug.html。
排查指引
- 设备卡片整体结构:
item_arrange_equipment_card.xml - 称位格子和右上角关闭按钮:
item_arrange_equipment_slot.xml - 抽屉菜品行:
item_arrange_drawer_dish.xml - 数据绑定和状态显隐:
ArrangeActivity#createEquipmentItemView、createEquipmentSlotView、createDrawerDishItemView