动态状态栏

上一篇写了状态栏的基本操作,全屏显示(状态栏透明),使用上一篇的方法后会发现状态栏变得透明,但是状态栏的图标还是存在的,但是在有的应用场景是需要动态的改变状态栏的,这里继续上一篇没有写完的状态栏策略。

setSystemUiVisibility

这里先说一下setSystemUiVisibility方法的几个参数,以及用法

参数说明
  1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态栏的正常情况)。

  2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。

  3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。

  4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。

  5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

  6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

  7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。

  8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。
使用setSystemUiVisibility
//layoutContext指窗体的父布局id
layoutContext.setSystemUiVisibility(View.INVISIBLE);

像这样直接调用同样可以达到状态栏透明或隐藏的效果,但是单独使用的时候会发现,直接使用setSystemUiVisibility这里的参数动态显示和隐藏的时候布局会伸展全屏显示和正常显示的,就是会发现布局动态的改变了位置,这样的效果体验就不是很好了,所以需要上一篇的状态栏透明的方法一起使用,初始化布局的时候使用上一篇的方法使界面全屏显示,然后使用上面这句代码将状态栏隐藏,到需要显示的时候再使用 第一个参数即可:

//显示状态栏(恢复到有状态栏的正常情况)。
layoutContext.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

其他的参数同样的使用,在网上还看到一种使用方法,不过只是正对单一已经使用的参数而言,我并没有去尝试过。

//addFlags使用参数  clearFlags消除该参数的效果
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //隐藏状态栏 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //显示状态栏

全屏显示并且有状态栏还可用代码设置

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
            WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
            localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
        }

一些基本的效果使用这些参数即可实现,当然,随着Android版本的更新,很多方法并不通用,都是根据自己的需求来使用最适合的方法。状态栏策略二就到这里了,下一篇继续状态栏策略三之滑动时动态显示的状态栏。