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

Android中如何完全隐藏导航栏(含背景,而非仅按钮)

解决Navigation Drawer Activity中完全隐藏导航栏的问题

你的代码仅隐藏了导航栏的交互按钮,但未让布局延伸覆盖导航栏区域,也未清除导航栏的背景色,因此白色背景仍会显示。以下是完整解决方案:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:48:35