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
相关产品推荐
相关产品推荐

