WeightDouble116 页面风格改造方案
目标:WeightDouble116 需要按 WeightSingle116 的页面风格改造。
核心方向:保留 WeightDouble116 的双秤业务能力和左右餐台数据流,将页面视觉、交互骨架、终端大屏风格向 WeightSingle116 靠齐。
对比结论
WeightDouble116 当前风格
WeightDouble116 当前是新双秤全屏卡片风格:
- 首页
activity_home.xml结构简单,主要是全屏home_frame_layout。 - 打餐前页面
fragment_pick_meal_before_new.xml直接左右均分两个菜品信息组件。 - 打餐中页面
fragment_pick_meal_ongoing_ring.xml是左右餐台 + 中间用户 + 底部营养/推荐环。 - 设置页整体偏新版紧凑样式。
核心页面:
/Users/liang/AndroidStudioProjects/WeightDouble116/app/src/main/res/layout/activity_home.xml/Users/liang/AndroidStudioProjects/WeightDouble116/app/src/main/res/layout/fragment_pick_meal_before_new.xml/Users/liang/AndroidStudioProjects/WeightDouble116/app/src/main/res/layout/fragment_pick_meal_ongoing_ring.xml/Users/liang/AndroidStudioProjects/WeightDouble116/app/src/main/java/com/cpt/zhct/weighting/activity/HomeActivity.java
WeightSingle116 参考风格
WeightSingle116 是旧版大屏业务引导风格:
- 首页有背景图
home_bac。 - 有顶部网络/状态展示。
- 有左侧流程导航或步骤感。
- 称重页有标题栏、主内容框架、隐藏排菜入口、实时重量浮层。
- 打餐前/打餐中页面更强调大字菜名、大价格、大营养面板。
核心参考页面:
/Users/liang/AndroidStudioProjects/WeightSingle116/app/src/main/res/layout/activity_home.xml/Users/liang/AndroidStudioProjects/WeightSingle116/app/src/main/res/layout/activity_weight_main.xml/Users/liang/AndroidStudioProjects/WeightSingle116/app/src/main/res/layout/fragment_pick_before_layout.xml/Users/liang/AndroidStudioProjects/WeightSingle116/app/src/main/res/layout/fragment_pick_ongoing_with_balance_layout.xml
改造原则
- 保留
WeightDouble116双秤业务逻辑。 - 不直接迁移
WeightSingle116的单秤WeightMainActivity状态机。 - 页面风格参考
WeightSingle116,但数据绑定仍使用左右餐台两套字段。 - 不贸然引入人脸识别、摄像头预览等单秤工程能力,除非产品明确需要。
- 长按入口需要结合本设备限制改为点击或多击触发,避免后续页面改造时继续保留长按。
主要差异与改造方向
1. 首页骨架
WeightDouble116:首页只有一个全屏内容容器、左下角隐藏排菜入口、中部溢出提示、底部实时重量浮层。
WeightSingle116:使用 home_bac 背景,顶部有网络状态/标题区域,左侧有流程导航,内容区有明确框架和大屏终端感。
改造方向:将 WeightDouble116 首页改造成 WeightSingle116 的大屏骨架,但主内容区仍承载双秤 fragment。
2. 打餐前页面
WeightDouble116:左右两个 PickBeforeShowDishInfoNewView 均分展示,每侧是新版紧凑卡片。
WeightSingle116:单屏大菜名、大价格、大营养信息,右侧营养面板视觉更重。
改造方向:做双餐台旧风格版本:左餐台一套大菜名/价格/营养面板,右餐台一套大菜名/价格/营养面板。视觉语言参考 fragment_pick_before_layout.xml,但布局需适配双栏。
3. 打餐中页面
WeightDouble116:左右餐台展示当前菜品,中间展示用户头像和姓名,底部展示营养/推荐环,支持营养+价格、纯营养、细分余额等显示模式。
WeightSingle116:单菜品大屏展示当前菜品,显示已取重量、费用、余额和营养。
改造方向:做双餐台旧风格版打餐中页面。左右餐台分别展示菜名、单价、当前取餐重量、当前费用;用户/余额信息放在中间或顶部状态区;营养推荐区域参考旧版大面板风格。
4. 设置页
WeightDouble116:设置项高度、字号较紧凑,有显示模式配置。
WeightSingle116:字号更大,设置导航和分组更像大屏终端。
改造方向:同步 WeightSingle116 的字号、行高、分组面板样式;保留 WeightDouble116 的双秤特有配置;保留显示模式配置:营养+价格、纯营养、细分余额。
建议迁移资源
从 WeightSingle116 参考迁移或对齐:
home_bachome_frg_right_bachome_frg_right_light_bactitle_layouthome_nav_layout- 大屏设置页相关 drawable
- 大屏设置页相关 dimen
- 首页导航相关 view/drawable
注意:资源迁移时需要避免覆盖 WeightDouble116 已有同名但语义不同的资源。建议先做资源清单和命名冲突表。
推荐实施步骤
- 资源与主题对齐:对比
colors.xml、dimens.xml、styles.xml,迁移大屏终端视觉变量,处理资源命名冲突。 - 首页骨架改造:改造
activity_home.xml,加入旧版背景、标题/状态区域、流程导航区域,保留home_frame_layout。 - 打餐前双栏旧风格页面:新建或改造双栏打餐前 layout,每个餐台使用旧版大屏菜品/营养视觉。
- 打餐中双栏旧风格页面:保留
HomeActivity的左右秤回调与状态机,将左右当前取餐重量、费用、余额显示到旧版视觉组件中。 - 设置页与弹窗统一:设置页同步旧版字号、间距、标题栏;弹窗对齐旧版大屏样式;排菜页保留双餐台 tab。
- 交互限制处理:结合
long_click_events.md的统计结果处理长按入口。
风险点
WeightSingle116是单秤逻辑,不能直接复制其 Activity 状态机。WeightDouble116的双秤上传、左右菜品详情、左右起始重量必须保留。- 旧版大屏视觉占用空间大,双栏后可能字号需要重新调优。
- 首页隐藏入口改点击后会增加误触风险。
- 资源同名覆盖可能导致其他页面样式异常。
验证建议
- 编译验证:使用 Java 8 运行 Gradle。
- 页面验证:检查首页、打餐前、打餐中、未排菜、排菜、设置页。
- 交互验证:扫码、左右餐台称重、取餐开始/结束、上传记录、网络异常、菜品变更 MQTT。
- 设备验证:重点确认无长按依赖。
构建环境提醒
当前项目使用 Gradle 5.1.1 和 Android Gradle Plugin 3.4.1。使用 Java 17 构建会遇到 Groovy 初始化错误,建议使用 Java 8,例如本机 Corretto 8。
已实施记录
实施分支:codex/weightdouble116-single-style-clicks
实施时间:2026-05-18
分支变更范围
- 相对
main只有 1 个业务提交:9388453 #VWCG-985 第一版代码提交。 - 共涉及 61 个文件,约 1941 行新增、698 行删除。
- 变更内容覆盖源码、布局、图片资源、版本号和
apk/app-debug.apk构建产物。
页面适配
- 标题栏按
WeightSingle116大屏风格调整:title_bar_height从 62dp 调整为 100dp;logo 从 56dp x 28dp 调整为 120dp x 60dp;网络状态图标从 20dp x 16dp 调整为 35dp x 28dp;时间字号从 18sp 调整为 28sp;返回/刷新按钮从 80dp x 28dp 调整为 100dp x 50dp,文字字号从 16sp 调整为 24sp;增加title_layout_show_name_view,用于对齐WeightSingle116标题栏结构。 - 首页骨架按
WeightSingle116的大屏容器风格调整:activity_home.xml根布局增加@drawable/home_bac背景;主内容区域改为带 30dp 外边距、16dp 内边距的深色描边面板;保留原home_frame_layout作为双秤业务 fragment 容器,不迁移单秤WeightMainActivity状态机;首页左下角排菜入口保持原位置,但从长按改为点击,并设置android:clickable="true"。 - 增加与
WeightSingle116对齐的面板背景资源:app/src/main/res/drawable/home_frg_right_light_bac.xml、app/src/main/res/drawable/home_frg_right_bac.xml。 - 已按要求将
WeightDouble116的R.drawable.home_bac直接替换为WeightSingle116的home_bac.png。来源:/Users/liang/AndroidStudioProjects/WeightSingle116/app/src/main/res/drawable/home_bac.png;目标:/Users/liang/AndroidStudioProjects/WeightDouble116/app/src/main/res/drawable/home_bac.png;替换后两个文件 SHA-256 一致:e492928f5161610b10ac518d8c7bc28b3c8df300e88d667b9c9cd93fc6270828。 - 首页取餐流程固定到新宽屏适配页面:打餐前固定使用
NewHomePickBeforeFragment;打餐中固定使用HomePickOngoingRingBalanceSplitFragment;原多 Fragment 样式切换逻辑保留为注释,具体显示差异由HomePickOngoingRingBalanceSplitFragment内部按STYLE_HOME_DISPLAY控制。 - 取餐中页面按新款宽屏双秤重排:
fragment_pick_meal_ongoing_ring_balance_split.xml改为上方左右双餐台信息、下方能量建议/推荐环/用户余额信息的宽屏布局;左右餐台信息卡支持显示菜名、单价、菜品标签、当前取餐重量和当前费用;能量建议改为低/合适/高三套背景图和颜色;支持三种首页展示模式:1营养+价格+余额汇总,2纯营养,3营养+价格+现金/补贴余额拆分。 - 打餐前菜品详情升级为宽屏营养展示:
new_pick_bafore_show_info_layout.xml改为大字号菜名、价格、标签、能量圆形展示、三大营养素供能比进度条、膳食纤维/VB1/VC/VB2 信息块;新增PickBeforeShowNutrientItemView、RoundedProgressBar、ShowNutrientSupplyPercentView三个自定义 View。 - 菜品营养数据模型扩展:
GetDishDetailResponse新增va、vb1、vb2、vc、calcium、iron、zinc字段;新增三大营养素供能比字段carbohydrate_ratio、protein_ratio、fat_ratio;Constants和DishInfoUtils增加左右餐台对应字段的缓存、清空和写入逻辑。 - 取餐中菜品卡片增强:
PickOngoingShowDishInfoWithPriceView增加菜品功能标签展示;增加单价显示和本次消费显示的开关能力,用于适配纯营养、余额汇总、余额拆分等模式;价格格式统一为"( ¥%.2f元/100g )"。 - 排菜页面适配宽屏:菜品列表从 3 列改为 6 列;每页数量从 12 改为 24;搜索栏、分类栏、顶部切换按钮和字体整体放大;加载更多改为自动加载,并处理宽屏第一页内容不足一屏时继续加载的问题;已选菜品再次点击改为弹删除确认,不再依赖长按删除。
- 设置页和通用 UI 放大:设置页从顶部横向 Tab 调整为左侧竖向 Tab + 右侧内容区;设置项、管理员密码弹窗、箭头、按钮、字号和间距按宽屏终端尺寸放大;管理入口从标题 Logo 长按改为单击。
- 版本升级与在线更新:
versionCode从 1 升到 2;versionName从1.2.0升到1.3.0;设置页新增获取最新版本接口/p/api/getNewVersion,设备类型按 450 双秤写死为4;获取到下载地址后通过浏览器打开 APK 下载链接。 - 资源与样式补充:新增取餐能量背景图、能量图标、营养项背景、首页右侧浅色背景等资源;新增/调整
colors.xml、dimens.xml、attrs.xml、strings.xml中的宽屏尺寸、颜色、文案和自定义属性。 - 其他仓库变更:
apk/app-debug.apk已更新为新构建产物;README.md新增本地提示词工程目录说明,此项不是双秤宽屏业务逻辑。
交互适配
所有长按入口已改为点击,详见 long_click_events.md。
验证
已重新搜索长按相关关键字,无残留;已使用 Java 8 执行 sh gradlew :app:assembleDebug,构建成功。