Repository navigation
WeKite 3.80:面板收起兜底 v6(@选人不再被误判成点聊天区)
WeKite 3.80
只改一件事:修「@某个人之后,输入框弹起来又马上收回」 —— 面板收起兜底第 6 版。
3.79 那版为什么会误收
你 10-15 那份日志(8.0.79)把真凶钉死了 —— 真正执行收起的 10 次全部来自同一个钩子:
panel collapse fired: action=0 ty=-1202.0 ime=false src=com.tencent.mm.ui.base.MMPullDownView.dispatchTouchEvent
| 钩子 | 执行收起的次数 |
|---|---|
外层容器 MMPullDownView.dispatchTouchEvent |
10 / 10 |
挂在内层列表上的原生监听器钩(native-listener:w8) |
0 |
内层 ScrollControlRecyclerView.onTouchEvent |
0 |
原因:ViewGroup.dispatchTouchEvent 对落在它范围内的所有触摸都会触发 —— 哪怕这一下随后被后代消费掉。微信自己的收面板监听器挂在内层列表上,所以点 @成员列表 / 点表情面板不会触发它;而 v3.78 为了修 8.0.79 额外挂的外层钩子会。⇒「钩子被叫到」不等于「点在聊天区」。
其中 2 次正好发生在面板展开态(ty=-1202.0 ime=false),就是 @ 那一下。
这次(v6)怎么改
加一条坐标判据:「点聊天区」必须满足 触摸点在 footer 上沿之上。
依据是微信自己的布局:面板被 bottomMargin = -面板高 挤到 footer 底边之外,再用 translationY 整体上移把它露出来 ⇒ 展开时屏幕上从 footer 上沿往下依次是【输入行】【面板(表情面板 / @成员列表 / 「+」面板)】,也就是面板位于 footer 自己的边界下方。所以落在 footer 带内的一律原样交给微信处理(@选人、点表情、点输入框都靠它自己)。
对既有行为的影响:只有真正点在消息区(footer 上沿之上)才会收面板 —— 与「点聊天区收起」的定义一致;8.0.79 / 8.0.77 的收起路径一字未动。
请你这样测
- 覆盖安装(versionCode 1180 > 已装版本,直接覆盖)→ 重启微信。
- 群聊里 @某个人 → 选人 → 输入框应保持不收回,可以直接接着打字。
- 顺带回归:面板/键盘展开时点聊天区(消息之间、列表下方空白)→ 仍应收起。
- 日志(这次无论对错都能定案):
panel collapse skipped (touch on footer band): action=… rawY=… footerTop=…⇒ @ 那一下被正确放过;panel collapse touch [源]: … rawY=… footerTop=…⇒ 记账行现在带坐标,可逐条核对;- 若出现
panel collapse fired: … rawY=… footerTop=…且rawY < footerTop⇒ 判据没挡住,我换方向查(不再调阈值)。
装机注意
- 没动任何 DEX 锚点,不会弹「DEX 缓存更新」。
- 坐标判据成立的前提是「@成员列表确实落在 footer 那条带里」(按微信的布局推导应当成立),这次日志里的
rawY/footerTop就是它的真机证据。
构建:run 254(id 38688939843)/ commit 5719d5de / 门禁 v3.80 新增 3 条标记(先在 v3.79 的包上实测全 MISS,反向恰好 3 条 FAIL)。