项目进展2026-09-18

MD 阅读 · 竖屏留白修复(真机验收)

修复鸿蒙版竖屏顶部双倍留白,Mate 70 Pro 真机逐像素验收通过

  • 日期:2026-09-18
  • 设备:HUAWEI Mate 70 Pro 优享版 PLR-AL50 / HarmonyOS *****(SP10C00E105R16P3) / 屏 1316×2832
  • 被测包:com.bzm.mdreader(lite 1.0.4 / 1000004,product=device + debug 签名)

1. 现象

竖屏时状态栏与标题栏之间多出一条空白;横屏正常。

2. 根因

Index.ets 的 refreshAvoidArea() 把 max(TYPE_SYSTEM.topRect, TYPE_CUTOUT.topRect) 整体当作顶部内边距。 但默认(非沉浸式)布局下窗口内容区本身已经避让了状态栏,于是状态栏高度被补了两次 → 竖屏顶部出现双倍留白。 横屏时系统状态栏隐藏(topRect = 0),故看不出问题。

3. 修法

// 非沉浸态:只补「挖孔伸出系统栏的溢出高度」(竖屏通常在状态栏带内,为 0)
this.insetTop = px2vp(Math.max(0, cutTop - sysTop));
this.insetBottom = 0;                       // 底部同理,系统已避让导航条
// 左右仍取 max(sys, cut):横屏挖孔在屏幕侧边中部,系统不避让,不补会被遮挡(华为上架检测项)

沉浸态(应用内全屏)系统不再避让任何系统栏,仍按 max(sys, cut) 自行补齐 top/bottom。

4. 实测数据(截图逐行像素测量)

指标修复前(旧逻辑)修复后(新逻辑)
状态栏文字y 55 ~ 103y 55 ~ 103
标题栏文字顶(绝对 y)338 px202 px
状态栏底 → 标题栏顶235 px99 px
标题栏文字 上 / 下 留白208 / 73 px(严重不对称)72 / 73 px(居中)

顶部多出的 136 px(≈48 vp,正好一个状态栏高度) 完全消失,与根因判断一致。

5. 横屏复核

用 product=device + 临时把 module.json5 的 orientation 改为 landscape 强制横屏构建(只在临时副本改,未动源码):

  • 截图 2832×1316,标题栏紧贴顶部,系统栏隐藏 = 预期行为
  • 挖孔侧留白生效,正文与标题栏均未被挖孔遮挡
  • 底部内容未被导航条遮挡

6. 复现步骤(hdc)

# 1. debug 包(release 证书包无法直装真机,报 9568448 verify app signature failed)
#    在工程副本里编译:hvigorw assembleHap -p product=device -p buildMode=debug
# 2. 若机器上是市场版(appDistributionType=app_gallery)需先卸载
hdc uninstall com.bzm.mdreader
hdc install entry-default-signed.hap          # 先 cd 到 hap 所在目录再传文件名
hdc shell "aa start -b com.bzm.mdreader -a EntryAbility"
hdc shell "snapshot_display -f /data/local/tmp/p.jpeg"
hdc file recv /data/local/tmp/p.jpeg p.jpeg    # 同样先 cd 到本地目标目录

7. 截图索引

文件说明
验收_竖屏留白修复_前后对比_20260918.png左=修复前 / 右=修复后,红线为标题栏文字顶基准
验收_竖屏_修复后_20260918.jpeg修复后竖屏实况(1316×2832)
验收_横屏_挖孔避让_20260918.jpeg强制横屏复核(2832×1316)

8. 注意

  • 真机验证必须用 debug 签名包;发布证书包只能经应用市场分发安装。
  • 验收后设备上装的是 debug 版(含修复逻辑)。原市场版 1.0.3 已被卸载,恢复途径:等 1.0.4 过审后从应用市场更新,或在应用市场重新下载。
  • 鸿蒙无 wm 命令,也无法通过 param / uinput 旋屏;横竖屏验证靠真机握持姿态或强制方向构建。
← 返回文章列表