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

Android系统栏显示时如何调整UI避免内容遮挡

解决系统栏显示时遮挡应用内容的方案

一、基础配置:让布局自动适配系统栏

先给布局根节点添加属性,让系统自动处理内边距,避免系统栏直接覆盖内容:

android:fitsSystemWindows="true"

或者在代码中设置布局延伸标记,确保布局能延伸到系统栏区域,同时系统会自动给根布局补内边距:

window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

二、监听系统栏变化,动态调整视图内边距

如果需要精细控制特定视图的位置,可通过OnApplyWindowInsetsListener监听系统栏的显示/隐藏,实时获取系统栏高度并调整视图内边距:

ViewCompat.setOnApplyWindowInsetsListener(rootView) { view, insets ->
    // 获取状态栏、导航栏的实际高度
    val statusBarHeight = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top
    val navBarHeight = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom

    // 给顶部视图设置顶部内边距,避开状态栏
    topView.setPadding(topView.paddingLeft, statusBarHeight, topView.paddingRight, topView.paddingBottom)
    // 给底部视图设置底部内边距,避开导航栏
    bottomView.setPadding(bottomView.paddingLeft, bottomView.paddingTop, bottomView.paddingRight, navBarHeight)

    return@setOnApplyWindowInsetsListener insets
}

三、添加动画过渡,让视图随系统栏平滑移动

要实现系统栏显示/隐藏时的视图动画,可结合Insets监听触发动画:

// Android 12+推荐的新API方式
WindowCompat.addWindowInsetsListener(window.decorView) { _, insets ->
    val isStatusBarVisible = insets.isVisible(WindowInsetsCompat.Type.statusBars())
    val statusBarHeight = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top
    
    // 顶部视图随状态栏显示/隐藏平滑平移
    topView.animate()
        .translationY(if (isStatusBarVisible) statusBarHeight.toFloat() else 0f)
        .setDuration(200)
        .start()
    
    return@addWindowInsetsListener insets
}

四、主动查询系统栏可见性状态

如果需要主动判断系统栏是否显示,可直接调用InsetsController的方法:

// 查询状态栏可见性
val isStatusBarVisible = WindowCompat.getInsetsController(window, window.decorView)
    .isVisible(WindowInsetsCompat.Type.statusBars())

// 查询导航栏可见性
val isNavBarVisible = WindowCompat.getInsetsController(window, window.decorView)
    .isVisible(WindowInsetsCompat.Type.navigationBars())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:08