dsh
7d08109583
fix(harmony): ★★ 顶部文案用 windowDecor 判 2in1 ⇒ 平板上浮在系统状态栏上(真机实测)
用户:「不是没显示,而是顶部与三键和状态栏重合,我觉得只应该在 2in1」。
## 根因:一个**假信号**
顶部那行文案(一言 + 签名,`TopbarStore`)的渲染条件写的是
if (this.topbarTexts().length > 0 && this.windowInsets.windowDecor > 0)
本意"有装饰带才显示",在模拟器(真 2in1)上一直成立。**真机平板把它证伪了**:
实测 insets: statusBar=38.588235 navIndicator=27.764706 windowDecor=37
param get const.product.devicetype = tablet
`getWindowDecorHeight()` 在平板上**照样返回 37vp** —— 官方给的是"全屏悬浮态
固定 37vp"这个下限值,它衡量的是"系统浮层厚度",**不是"有没有三键区"**。
平板没有三键区,但 windowDecor 恒为 37 ⇒ 条件成立 ⇒ 文案渲染出来,
位置又按"三键在右边"算(`.height(this.windowInsets.windowDecor)`),
于是整行浮在**系统状态栏**上,与时钟/电量重叠。
## 改法
条件换成形态真值:
if (this.topbarTexts().length > 0 && deviceInfo.deviceType === '2in1')
`deviceInfo` 取自 `@kit.BasicServicesKit`,与 `EntryAbility.ets:310` 判 2in1
用的是同一个来源 —— 形态判据全仓只此一处口径,不让两处各判一套。
`.height(this.windowInsets.windowDecor)` 保留不动:2in1 上它是对的,
非 2in1 上整块不渲染、根本走不到(`harmony-2in1` 那条仍钉着它)。
## 判据
`harmony-2in1.test.mjs` 新增一条:顶部文案必须挂在 `deviceType === '2in1'` 上,
且**不许再出现 `windowInsets.windowDecor` 与 0 的比较**(那是假信号)。
红绿已验:退回 `windowDecor > 0` ⇒ 红;恢复 ⇒ 绿。
★ 这条判据第一版也犯了同类错:用 `prose`(含注释)会把**我自己写进注释里的**
旧写法 `windowDecor > 0` 判红。改用 `lib/read.mjs` 的 `code()`(读时剥注释)。
与上一条(`harmony-window` 判据 10)同形——同一天犯两次,已成惯例性陷阱。
## 环境
`devecocli` 的 npm 包在本会话中途被卸载(`/usr/bin/devecocli` 成断链),
hvigor 直跑缺它注入的 SDK 环境 ⇒ 三个 SDK 路径都报 "SDK component missing"。
已 `npm i -g @deveco/deveco-cli` 装回(6s,252 包),`devecocli build` 恢复可用。
## 真机验证
装 `entry-default-signed.hap`(26.0.0 Beta2,debug 签名)后截图:
顶部只剩系统状态栏(18:34 / 浏览器 / 信号 / 电量),其下是干净的壁纸带,
再下方才是页签条「收件箱 20 / 发件箱 / 授权1」—— 重叠消失。
## 回归
`run-all.mjs`:files=35 checks=584 pass=580 fail=2 skip=2 red=4。
与本改动前的基线(checks=583 fail=2 red=3)比,**fail/red 未增加**:
那 2 个 fail 是设备判据并行争用(单独跑全绿),3 个 red 是「静态判据到期」
的既有债务(5 个文件在真机出现后被判到期,本轮未处理)。
2026-10-01 20:37:19 +08:00
..
2026-09-14 15:41:52 +08:00
2026-09-15 12:09:37 +08:00
2026-09-28 08:46:01 +08:00
2026-09-15 07:46:54 +08:00
2026-09-28 08:46:02 +08:00
2026-09-28 08:46:01 +08:00
2026-09-15 11:17:23 +08:00
2026-09-24 13:56:52 +08:00
2026-09-19 15:03:40 +08:00
2026-09-24 10:10:32 +08:00
2026-09-14 17:33:05 +08:00
2026-09-24 16:44:03 +08:00
2026-09-28 08:46:02 +08:00
2026-09-20 05:45:42 +08:00
2026-09-28 10:17:09 +08:00
2026-09-20 10:51:28 +08:00
2026-09-24 10:10:32 +08:00
2026-09-28 08:46:01 +08:00
2026-09-19 19:29:49 +08:00
2026-10-01 20:37:19 +08:00
2026-09-24 10:10:32 +08:00
2026-09-21 17:36:40 +08:00
2026-09-24 13:13:46 +08:00
2026-09-24 10:10:32 +08:00
2026-09-20 22:35:35 +08:00
2026-09-24 10:10:32 +08:00
2026-09-18 08:39:21 +08:00
2026-09-28 08:46:01 +08:00
2026-09-24 16:34:44 +08:00
2026-09-24 10:10:32 +08:00
2026-09-15 12:06:15 +08:00
2026-09-16 08:29:24 +08:00
2026-09-17 19:38:15 +08:00
2026-09-17 18:43:00 +08:00
2026-09-14 16:21:27 +08:00
2026-09-25 12:21:00 +08:00
2026-10-01 18:49:06 +08:00
2026-09-14 15:11:47 +08:00
2026-09-15 08:45:54 +08:00
2026-09-15 07:46:54 +08:00
2026-09-14 17:33:05 +08:00
2026-09-28 10:17:09 +08:00
2026-09-18 01:08:04 +08:00