You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android聊天页隐藏键盘时异常向下滚动问题如何解决?

问题根因
  • 当前逻辑仅适配了键盘弹出(差值为正)的滚动场景,键盘收起时(差值为负,屏幕可用高度增加,布局向下延展)的滚动逻辑没有匹配聊天页面需要锚定最新消息的特性
  • 原有else分支直接滚动verticalScrollOffset.get()的逻辑会错误地将页面向顶部方向偏移,偏移距离刚好等于键盘高度
  • adjustResize模式下键盘收起触发布局重绘后,需要主动将滚动位置对齐到最后一条消息底部,不能直接用通用滚动差值计算
修复方案

以下是适配聊天场景的修正代码:

addOnLayoutChangeListener { _, _, _, _, bottom, _, _, _, oldBottom ->
    val keyboardHeightDelta = oldBottom - bottom
    // 增加100px阈值过滤导航栏、状态栏等小幅度布局变化的干扰
    if (keyboardHeightDelta.absoluteValue > 100) {
        post {
            if (keyboardHeightDelta > 0) {
                // 键盘弹出,保留原有滚动逻辑,偏移对应距离露出输入框和最新消息
                scrollBy(0, keyboardHeightDelta)
            } else {
                // 键盘收起,直接滚动到底部对齐最新消息
                val maxScrollOffset = getChildAt(0).bottom - height
                scrollTo(0, maxScrollOffset.coerceAtLeast(0))
            }
        }
    }
}
  • 如果你的聊天列表使用RecyclerView实现,可将键盘收起时的滚动逻辑替换为smoothScrollToPosition(adapter.itemCount - 1),体验更流畅
  • 原有Manifest中配置的adjustResize|stateHidden属性无需修改,符合布局适配要求

内容的提问来源于stack exchange,提问作者Piyush Maheswari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:36:04