Android 隐藏虚拟导航栏,禁止下拉通知栏,禁止上滑出虚拟导航栏

本文介绍了如何在Android应用中隐藏虚拟导航栏并禁止下拉通知栏,包括使用`SYSTEM_UI_FLAG`标志和修改DisplayPolicy类的方法。重点讲解了`View.SYSTEM_UI_FLAG_HIDE_NAVIGATION`和`IMMERSIVE_STICKY`的作用。
摘要由CSDN通过智能技术生成

Android 隐藏虚拟导航栏

        View decorView = getWindow().getDecorView();
        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);

禁止下拉通知栏

        if (disable) {
            mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);
        } else {
            mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
        }

隐藏导航栏时 禁止上滑出导航栏

frameworks / base/services/core/java/com/android/server/wm/DisplayPolicy.java

                    @Override
                    public void onSwipeFromBottom() {
                        synchronized (mLock) {
                            if (mNavigationBar != null
                                    && mNavigationBarPosition == NAV_BAR_BOTTOM) {
                                /* add for factorymode test begin */
                                if (getTestStatus()) { 判断条件
                                    Slog.i(TAG, "onSwipeFromBottom Test, not requestTransientBars");
                                    return;
                                }
                                /* add for factorymode test end */
                                requestTransientBars(mNavigationBar);
                            }
                        }
                    }

禁止下拉栏也可以这样改
 

                    @Override
                    public void onSwipeFromTop() {
                        synchronized (mLock) {
                            if (mStatusBar != null) {
                                /* add for factorymode test begin */
                                if (getTestStatus()) {判断条件
                                    Slog.i(TAG, "onSwipeFromTop Test, not requestTransientBars");
                                    return;
                                }
                                /* add for factorymode test end */

                                requestTransientBars(mStatusBar);
                            }
                        }
                    }

SystemUI setSystemUiVisibility参数属性

[ANSWER]

View.SYSTEM_UI_FLAG_FULLSCREEN

全屏模式,占据整个屏幕,隐藏状态栏等界面,但是导航栏不会隐藏。如果用户进行操作,隐藏的系统界面会立马出现并清除该flag

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

隐藏导航栏,布局会往下移。如果用户进行操作,导航栏会立马出现并清除该flag。

View.SYSTEM_UI_FLAG_IMMERSIVE

沉浸模式。修饰SYSTEM_UI_FLAG_HIDE_NAVIGATION,使用户操作不再显示导航栏(但是仍能通过从底部往上滑调出导航栏并清除flag)。单独使用无效。

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

粘性沉浸模式。修饰SYSTEM_UI_FLAG_FULLSCREENSYSTEM_UI_FLAG_HIDE_NAVIGATION。用户操作不再清除flag,从边缘滑入可以调出状态栏和导航栏,并且过几秒之后自动隐藏。单独使用无效。

View. SYSTEM_UI_FLAG_LOW_PROFILE

低配模式,设置后,系统状态栏的信号等图标消失,重要图标颜色变浅(如电量图标)。

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

加入SYSTEM_UI_FLAG_LAYOUT_STABLE后,SystemUI发生变化也不会影响用户布局,单独使用该FLAG界面不会有任何变化。

View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

状态栏的图标以深色绘制。设置了这个属性,状态栏会以与状态栏背景颜色兼容的模式绘制。

View.SYSTEM_UI_FLAG_VISIBLE

用户表示状态栏可见,默认flag

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值