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

使用setOnApplyWindowInsetsListener后状态栏颜色消失如何解决?

问题原因
  • 调用ViewCompat.setOnApplyWindowInsetsListener会直接替换目标View原有的窗口边距回调处理逻辑,原有逻辑默认包含状态栏颜色适配、系统边距适配的相关处理步骤
  • 你当前的实现仅完成了软键盘可见性判断,直接返回原始windowInsets对象,没有触发View原有的insets处理流程,导致原本的状态栏着色逻辑未执行,状态栏颜色就会恢复为默认值,看起来像是消失了。
修复方案

将代码中的返回值替换为ViewCompat.onApplyWindowInsets(view, windowInsets),触发View原有处理逻辑即可,修改后的代码如下:

fun isKeyboardVisible(view: View) {
    ViewCompat.setOnApplyWindowInsetsListener(view) { view, windowInsets ->
        val isKeyboardVisible = windowInsets.isVisible(WindowInsetsCompat.Type.ime())
        if (isKeyboardVisible) Toast.makeText(applicationContext, "opened", Toast.LENGTH_SHORT).show()
        else Toast.makeText(applicationContext, "closed", Toast.LENGTH_SHORT).show()
        // 执行View默认的insets处理逻辑,保留原有状态栏、导航栏适配效果
        ViewCompat.onApplyWindowInsets(view, windowInsets)
    }
}

如果你使用的androidx core版本在1.5.0及以上,也可以改用ViewCompat.addOnApplyWindowInsetsListener,它不会覆盖View原有的监听逻辑,仅追加你的自定义处理,也能避免该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:27:02