沉浸式模式和沉浸式状态栏

今天看郭大神的博客,把沉浸式状态栏的说法批评的一塌糊涂,所以特地记录一下,用来警示。

android系统自己定义的标准的沉浸式模式很简单,只有一个屏幕,actionbar,statusbar,navigationbar全都隐藏起来,界面默认情况下是全屏的,状态栏和导航栏都不会显示。

而当我们需要用到状态栏或导航栏时,只需要在屏幕顶部向下拉,或者在屏幕右侧向左拉,状态栏和导航栏 就会显示出来,此时界面上任何元素的显示或大小都不会受影响。

过一段时间后如果没有任何操作,状态栏和导航栏又会自动隐藏起来,重新回到全屏状态。  比较适合游戏和视频播放界面使用     重写  onWindowFocusChanged()  这个方法就可以了,不需要调用。

public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && Build.VERSION.SDK_INT >= 19){
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
);
}
}

正常App使用到沉浸式,是透明statusBar,透明navigationBar,隐藏ActionBar这种模式。实现方法:

先在onCreate()方法中得到decorView,隐藏ActionBar:

 

        View decorView = getWindow().getDecorView();          //得到decorview,他是所有布局的父布局
        int option = View.SYSTEM_UI_FLAG_FULLSCREEN        //设置全屏的意思
      | View.SYSTEM_UI_FLAG_LAYOUT_STABLE        //此flag需要配合 上一个flag一起使用 ,表示会让应用的主体内容占用系统状态栏的空间,最后再调用Window的setStatusBarColor()方法将状态栏设置成透明色就可以了,21以上的sdk才有此效果,实现透明状态栏
      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;     //隐藏导航栏,不能单独使用 如果只隐藏导航栏也需要配合 View.SYSTEM_UI_FLAG_LAYOUT_STABLE 此flag一起使用, getWindow().setNavigationBarColor(Color.TRANSPARENT);这是透明的导航栏。 decorView.setSystemUiVisibility(option); ActionBar actionBar = getSupportActionBar();
  getWindow().setNavigationBarColor(Color.TRANSPARENT);          
  getWindow().setStatusBarColor(Color.TRANSPARENT);
actionBar.hide();

  以上代码就可以实现我们正常需要的透明状态栏,透明导航栏的效果。



 

posted @ 2017-06-20 18:37  wlwqnj  阅读(421)  评论(0编辑  收藏  举报