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

Android 11实现应用真全屏 隐藏状态栏及底部手势栏方法

Android 11 MIUI设备真全屏实现方案

上下残留黑白占位的核心原因是两点:一是没有开启边到边(edge-to-edge)布局让应用内容延伸到系统栏区域,二是MIUI对全屏逻辑做了私有修改,仅调用Android原生API无法突破手势区域的强制占位限制。

基础原生API配置

首先在Activity的onCreate回调中,setContentView调用之前添加以下代码,配置沉浸式粘性全屏:

// 原生API实现基础全屏+滑动唤出系统栏交互
window.decorView.systemUiVisibility = (
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_FULLSCREEN
    or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
)

这里的SYSTEM_UI_FLAG_IMMERSIVE_STICKY就是需要的交互模式:用户从屏幕顶部/底部边缘滑动时,状态栏、手势导航栏会临时半透明显示,数秒后自动隐藏,不会强制重绘布局留下占位,也不会打断应用内正在进行的操作。

如果项目接入了AndroidX Jetpack组件,可以用兼容版API实现,适配更低版本系统:

WindowCompat.setDecorFitsSystemWindows(window, false)
val insetsController = WindowInsetsControllerCompat(window, window.decorView)
insetsController.hide(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars())
insetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE

MIUI专属适配(解决黑白占位的核心步骤)

小米MIUI对全屏模式加了私有flag控制,仅调用原生API时,系统会强制给底部手势导航区域留白色占位、顶部状态栏区域留黑色占位,必须反射调用MIUI内部API开启真全屏:

private fun enableMiuiTrueFullScreen() {
    try {
        val miuiLayoutParams = Class.forName("android.view.MiuiWindowManager\$LayoutParams")
        val fullScreenFlag = miuiLayoutParams.getField("EXTRA_FLAG_FULLSCREEN_MODE").getInt(miuiLayoutParams)
        val setExtraFlagsMethod = window.javaClass.getMethod(
            "setExtraFlags",
            Int::class.javaPrimitiveType,
            Int::class.javaPrimitiveType
        )
        setExtraFlagsMethod.invoke(window, fullScreenFlag, fullScreenFlag)
    } catch (e: Exception) {
        // 非MIUI设备反射失败直接忽略,走原生全屏逻辑即可
    }
}

在onCreate里和原生配置代码一起调用这个方法即可。

布局校验

检查你的主题配置、布局根节点,把所有android:fitsSystemWindows="true"属性删除或者设置为false,这个属性会强制让布局给系统栏预留位置,直接导致上下方出现空白占位。
如果你的页面顶部有标题栏、底部有操作按钮,避免内容被系统栏遮挡的正确做法是监听WindowInsets拿到状态栏、导航栏的实际高度,手动给对应控件设置padding,不要依赖系统的fitsSystemWindows机制。

最终效果

配置完成后重启应用,应用内容会完全铺满整块屏幕,顶部无黑色状态栏占位、底部无白色手势栏占位;从顶部下滑可正常唤出通知状态栏,从底部上滑可正常唤出手势导航栏,系统栏临时显示消失后不会残留任何占位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:48:31