Android中如何完全隐藏导航栏(含背景,而非仅按钮)
你的代码仅隐藏了导航栏的交互按钮,但未让布局延伸覆盖导航栏区域,也未清除导航栏的背景色,因此白色背景仍会显示。以下是完整解决方案:
1. 补充UI标志并设置导航栏透明
修改代码,添加SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION允许布局覆盖导航栏区域,同时将导航栏颜色设为透明以消除白色背景:
View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // 让布局延伸至导航栏区域 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // 隐藏导航栏按钮 | View.SYSTEM_UI_FLAG_FULLSCREEN; // 隐藏状态栏(按需保留) decorView.setSystemUiVisibility(uiOptions); // 将导航栏背景设为透明 getWindow().setNavigationBarColor(Color.TRANSPARENT);
2. 调整布局的系统窗口适配
Navigation Drawer Activity模板默认根布局(DrawerLayout)会设置android:fitsSystemWindows="true",导致布局为系统栏预留空间。需将其改为false,让布局完全填充屏幕:
打开activity_main.xml,修改根DrawerLayout的属性:
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" ... android:fitsSystemWindows="false"> <!-- 其他布局内容 --> </androidx.drawerlayout.widget.DrawerLayout>
3. 处理导航栏重新显示的问题
SYSTEM_UI_FLAG_HIDE_NAVIGATION是临时隐藏,用户触摸屏幕会重新唤起导航栏。若需保持隐藏状态,重写onWindowFocusChanged方法,在页面获取焦点时重新应用UI标志:
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); } }
内容的提问来源于stack exchange,提问作者user787878
相关产品推荐
相关产品推荐

