Files
MailUI4Agents/client
JianFeeeee 9d50352e7e 跨端: 鸿蒙顶栏文案(摘要/一言/签名轮播)在三键左边 —— 位置与字号按实测校准
用户四条需求,逐条落地:
  · 「可以在服务器集成一言与签名,同时 app 本地缓存一部分」
  · 「摘要也应该放在顶部,显示摘要不显示一言,显示一言不显示摘要」
  · 「自动轮播,要有消失出现动画。同时注意,是纯文字不要加底」
  · 「我要的效果是在退出,最大化,最小化三个按键的左边」

客户端(服务端那半见 31939f2)
  · 新增 `common/TopbarStore.ets`:一言 + 签名的取数与**账号级**缓存
    (键 = 前缀 + accountId,本仓纪律;共用一份会让多账号串台)。
    本地缓存先出(秒开、离线可用),再后台拉一次更新;
    拉失败**保留缓存**、不抛异常 —— 装饰性内容不该成为失败点。
  · 轮播:摘要 / 一言 / 签名三选一轮着显示,5.5s 一条、
    淡出淡入各 260ms(停顿明显长于动画,否则观感是"一直在闪")。
  · 纯文字:不设 background、不加玻璃(用户点名「不要加底」),
    `hitTestBehavior(None)` 不吃事件。

★ 位置:为什么自绘而不 `setWindowTitle`
  官方 `setWindowTitle` **实测确实**能在那一行显示文字(截图验过),
  但它三条硬伤:① 必须保持窗口装饰可见 ⇒ 标题栏横带回来,与刚修好的
  「顶栏沉浸」冲突;② 瞬时替换,做不了用户要的消失出现动画;
  ③ 字号颜色跟随系统。⇒ 装饰仍隐藏,文字自绘在装饰带原位。

★★ 两个"按实测校准"的修正(都是用户看出来的)
  1. **位置**:我先做成"右对齐、贴住三键左缘"——用户纠正
     「我要求的是与三键同行,但是在左边啊」。改成靠左(FlexAlign.Start)。
  2. **对齐与字号**(用户:「行没有对齐,大小也偏小」):
     实测(1px ≈ 1.91vp):
       三键 y 290..343 高 53px、中心 316.5
       我原来 y 296..323 高 27px、中心 309.5  ⇒ **中心差 7px、字号小一档**
     改法:字号 12 → 14vp;垂直对齐从写死的 `y: 8` 改成
     `height(windowInsets.windowDecor)` + `VerticalAlign.Center`。
     改后实测:**中心差 0.0px**、文案高 31px(与三键图标同量级)。

★ 顺带修掉一个逻辑漏洞
  摘要三项计数都是 0 时我返回了空串 ⇒ 整块**不渲染**,顶栏右上什么都没有。
  而"没有未读"恰恰是常态(收件箱清干净了)。加兜底文案「暂无待办」。
  那句"三项都是 0 就不显示"是我按"有信息才显示"想当然写的,
  没考虑"零"本身也是信息。

判据(harmony-2in1 新增 4 条 → 19→23,全部变异验证过)
  · 在三键左边且不破坏沉浸 —— 钉的是**两个约束同时成立**
    (只看一件会放过错误的那版:为了三键左边而恢复标题栏)
  · 纯文字:不许 backgroundColor / backgroundBlurStyle,且不吃事件
  · 摘要为零也要有文案(把兜底改回空串即判红)
  · 一言/签名缓存要账号级、失败要吞掉

★ 判据自己的两个坑(都在注释里记了)
  ① 切片锚点不能用常量的**名字**:`TOPBAR_STRIP_VPAD` 先在文件顶部常量区
     出现一次,从那里往后切会一路包进 `InboxTab`(那里有 backgroundColor),
     于是报"文案加了底色"——报的其实是**别人的代码**。改成锚**使用点**。
  ② 位置断言跟着事实改过一轮:第一版给"贴三键"那个错版背书,
     用户纠正后改成断言靠左。

实测凭据(2in1 模拟器 3120×2080)
  · 文案 x 545..652、y 301..332;三键 x 2362..2567、y 290..343
  · 垂直中心差 0.0px
  · 沉浸保留(装饰仍隐藏)
2026-09-25 18:24:08 +08:00
..