导航栏显示隐藏

控制导航栏状态可用如下方法:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);

其中View.SYSTEM_UI_FLAG_FULLSCREEN为属性标志,属性标志共有如下几种:

  1. SYSTEM_UI_FLAG_LOW_PROFILE

    用于弱化导航栏存在,一般会隐藏导航栏和状态栏中的图标或颜色变暗,具体效果分机型

  2. SYSTEM_UI_FLAG_HIDE_NAVIGATION

    隐藏导航栏一次,点击屏幕会再次出现(消耗点击事件),且出现后不会自动消失

  3. SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

    布局内容会延伸到导航栏的后面。(导航栏会在布局前半透明显示)

  4. SYSTEM_UI_FLAG_FULLSCREEN

    隐藏导航栏状态栏,且点击屏幕不会出现(不消耗点击事件),需手动下拉才会出现,出现后几秒会自动消失(其余出现后消失情况(比如软键盘弹出后)分机型)

  5. SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

    布局内容会延伸到状态栏导航栏后面(全屏显示),状态栏导航栏会透明显示在布局的上面。

  6. SYSTEM_UI_FLAG_LAYOUT_STABLE

    • 稳定布局,主要用于全屏非全屏切换时使布局保持不变(搭配View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION使用)

    • 可在xml文件中直接设置android:fitsSystemWindows="true"属性

    • 设置后一般在全屏布局上也会留出导航栏的位置

  7. SYSTEM_UI_FLAG_IMMERSIVE

    • 实现沉浸式全屏,点击屏幕任意位置并不会使导航栏状态栏出现(未设置此属性时,FLAG_HIDE_NAVIGATION模式点击屏幕会使得状态栏恢复回来,消耗一个点击事件)

    • 一般搭配View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION同时使用

    • 用户上下拉状态栏时,状态栏会显示出来并固定在下面

  8. SYSTEM_UI_FLAG_IMMERSIVE_STICKY

    • 效果同上,但全屏模式下,用户上下拉状态栏时,状态栏会以透明的形式显示出来,并一定时间后会自动消失。

    • 同搭配View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION等同时使用

根据上面总结,通常隐藏导航栏且有效的写法为:

 public void hideNavigationBar() {
        int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                | View.SYSTEM_UI_FLAG_FULLSCREEN;
        if (getWindow() != null) {
            getWindow().getDecorView().setSystemUiVisibility(uiOptions);
        }
    }

参考链接:Android setSystemUiVisibility详解_QQxiaoqiang1573的博客-CSDN博客_android setsystemuivisibility

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值