爱奇艺将整个屏幕作为影视的展示区,用户在看电影的时候眼中就只会有电影的内容,这样就不会被其他一些无关的东西所分心。
这才是沉浸式模式的真正含义,而所谓的什么沉浸式状态栏纯粹就是在瞎叫,完全都没搞懂“沉浸式” 这三个字是什么意思
过于老的系统根本就没有提供沉浸式体验的支持,安卓4.1之后才支持沉浸式的效果!!!
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mScrollView.setScrollViewListener(this); initListeners(); //透明导航栏 if (Build.VERSION.SDK_INT >= 21) { View decorView = getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); getWindow().setNavigationBarColor(Color.TRANSPARENT); getWindow().setStatusBarColor(Color.TRANSPARENT); }
ActionBar actionBar = getSupportActionBar(); actionBar.hide();
}
这里使用了SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION,
表示会让应用的主体内容占用系统导航栏的空间,然后又调用了setNavigationBarColor()方法将导航栏设置成透明色
效果是这样的
然而真正的沉浸式是这样的
当你确定要使用沉浸式模式,那么只需要重写Activity的onWindowFocusChanged()方法,
然后加入如下逻辑即可:
@Override 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); } }
界面默认情况下是全屏的,状态栏和导航栏都不会显示。
而当我们需要用到状态栏或导航栏时,只需要在屏幕顶部向下拉,
或者在屏幕右侧向左拉,
状态栏和导航栏就会显示出来,此时界面上任何元素的显示或大小都不会受影响。
过一段时间后如果没有任何操作,状态栏和导航栏又会自动隐藏起来,
重新回到全屏状态。