安卓开发——如何完美隐藏底部虚拟导航栏

本文提供了两种隐藏Android设备底部虚拟导航栏的方法。一种是简单的官方推荐方案,但存在导航栏重新显示并拦截点击事件的问题;另一种是改进版方案,能够完美隐藏虚拟导航栏,适用于不同Android版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于如何隐藏底部虚拟按键,google官方给的解决办法:

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
Google官方文档
这样设置后,底部虚拟导航栏的确隐藏掉了,But,一旦你点击屏幕,导航栏就会再次出现,并且会拦截点击事件。

想要完美隐藏底部虚拟导航栏,解决方法如下:

/**
     * 隐藏虚拟按键,并且全屏
     */
    protected void hideBottomUIMenu() {
        //隐藏虚拟按键,并且全屏
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
            View v = this.getWindow().getDecorView();
            v.setSystemUiVisibility(View.GONE);
        } else if (Build.VERSION.SDK_INT >= 19) {
            //for new api versions.
            View decorView = getWindow().getDecorView();
            int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }


### RK3566 平台隐藏导航栏方法 对于RK3566平台上的设备,要实现隐藏导航栏的功能,通常涉及修改系统属性或通过特定API调用来控制窗口管理器的行为。具体操作如下: #### 方法一:通过设置开发者选项中的手势导航模式 用户可以在安卓系统的开发者选项里开启全屏手势导航模式来替代传统的三键导航栏。此方式不需要任何编程改动即可达到隐藏效果。 #### 方法二:利用 `PhoneWindowManager` 类调整显示参数 如果希望程序化地处理这一需求,则可以考虑继承并重载 Android框架下的 `com.android.server.policy.PhoneWindowManager.java` 文件,在其中定义逻辑以响应屏幕旋转或其他事件时自动收起底部虚拟按键条[^1]。 ```java @Override public void layoutAndDraw(WindowState[] windows, SurfaceControl.Transaction transaction) { super.layoutAndDraw(windows, transaction); // 自定义逻辑判断是否应该隐藏导航栏 } ``` 上述代码片段展示了如何覆盖默认行为,并允许开发人员插入自定义条件用于决定何时以及怎样触发导航栏的可见性变化。 #### 方法三:应用级解决方案——使用沉浸式模式 应用程序也可以单独请求进入所谓的“Immersive Mode”,即沉浸模式。这可以通过在Activity中调用相应的方法完成: ```java // Java 实现沉浸模式 View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); ``` 这种方法仅影响当前活动的应用界面而不改变整个系统的状态,适合那些想要提供更专注用户体验而暂时移除干扰元素的情况。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值