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

Android仅主Activity设全屏及返回后导航栏残留问题解决

解决方案

一、解决返回主Activity时导航栏残留的问题

这个问题的核心原因是:从非全屏Activity返回主Activity时,主Activity的onCreate()方法不会重新执行,而你原本的全屏配置只在onCreate()里设置过一次,导致系统UI状态没有被重新触发更新。

最简单的解决办法是把全屏设置的逻辑封装成独立方法,然后在onCreate()和onResume()中都调用它——因为onResume()会在Activity回到前台时执行,这样就能保证每次主Activity显示时,都会强制重新应用全屏规则。

代码示例:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 初始化时设置全屏
    setupFullScreenMode();
}

@Override
protected void onResume() {
    super.onResume();
    // 回到前台时重新触发全屏设置,解决导航栏残留问题
    setupFullScreenMode();
}

private void setupFullScreenMode() {
    View decorView = getWindow().getDecorView();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_FULLSCREEN |
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

这样调整后,不管是首次打开主Activity,还是从其他页面返回,都会重新隐藏导航栏和状态栏,不会再出现残留遮挡的情况。

二、保留ActionBar的前提下实现全屏

如果你想保留ActionBar,同时让主Activity实现“全屏”(即隐藏状态栏和导航栏,但ActionBar依然可见),需要修改SystemUiVisibility的参数——原来的SYSTEM_UI_FLAG_FULLSCREEN会直接隐藏ActionBar,所以要把这个标志移除。

实现步骤与代码示例:

private void setupFullScreenWithActionBar() {
    View decorView = getWindow().getDecorView();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }

    // 可选优化:让ActionBar和状态栏背景透明,视觉上更统一
    if (getSupportActionBar() != null) {
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
    }
}

同样把这个方法放到onCreate()和onResume()中调用即可。另外需要注意:

  • 如果你用的是AppCompatActivity,记得用getSupportActionBar()而非getActionBar();
  • 布局文件中,主Activity的根布局可以添加android:paddingTop="?attr/actionBarSize",避免页面内容被ActionBar遮挡。

总结

  • 导航栏残留问题:通过在onResume()中重新执行全屏配置解决;
  • 保留ActionBar的全屏:移除SYSTEM_UI_FLAG_FULLSCREEN标志,配合透明化设置优化视觉效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:27:47