Android 12 隐藏手势提示线(底部小白条)

代码位置:

frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // Draw that bar
        int navHeight = getHeight();
        int height = mRadius * 2;
        int width = getWidth();
        int y = (navHeight - mBottom - height);
        // Patch Begin
        /* Hide the bar */
        int navHeight = 0;//getHeight();
        int height = 0;//mRadius * 2;
        int width = 0;//getWidth();
        int y = 0;//(navHeight - mBottom - height);
        //Patch End

        canvas.drawRoundRect(0, y, width, y + height, mRadius, mRadius, mPaint);
    }

### 隐藏 Android 手势导航白条的方法 在 Android 10(API 级别 29)及以上版本中,系统引入了基于手势的导航功能。然而,这种导航方式可能会导致屏幕底部出现一条白色或浅色的提示区域(即手势导航白条),这会影响全屏应用的用户体验。为了解决这一问题,可以通过以下方法隐藏手势导航白条。 #### 方法一:使用 `SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION` 和 `SYSTEM_UI_FLAG_LAYOUT_STABLE` 通过设置视图的系统 UI 可见性标志位,可以让应用内容扩展到屏幕边缘,从而覆盖手势导航白条。 ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE ); } ``` 此代码片段设置了两个标志位: - `SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION`:使视图延伸至导航栏区域,导航栏会浮在视图之上[^3]。 - `SYSTEM_UI_FLAG_LAYOUT_STABLE`:保持整个视图稳定,避免因系统 UI 的变化而重新布局[^3]。 #### 方法二:设置导航栏颜色为透明 通过将导航栏的颜色设置为透明,可以进一步优化全屏效果。 ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setNavigationBarColor(Color.TRANSPARENT); } ``` 结合上述两种方法,可以有效隐藏手势导航白条并实现真正的全屏效果。 #### 方法三:启用 Edge-to-Edge 设计 从 Android 10 开始,推荐开发者采用 Edge-to-Edge(边到边)设计以适配手势导航。可以通过以下代码启用该设计: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { WindowInsetsController controller = getWindow().getInsetsController(); if (controller != null) { controller.hide(WindowInsets.Type.navigationBars()); } } ``` 此代码片段通过 `WindowInsetsController` 隐藏导航栏,同时保留手势导航功能[^3]。 #### 注意事项 - 隐藏手势导航白条时,应确保不破坏用户交互体验。例如,不要完全禁用手势导航功能[^2]。 - 上述方法适用于大多数设备,但在某些定制 ROM 或特定品牌手机上可能需要额外调整。 ```java // 综合示例代码 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE ); getWindow().setNavigationBarColor(Color.TRANSPARENT); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值