来源
首先沉浸式状态栏这名字最早不是什么MIUI、Flyme论坛提出来的,最先是在Xposed框架汉化版中出现的,当时MIUI和Flyme都还普遍处于Android 4.1、4.1.2。当时国内汉化作者一开始命名为“变色龙状态栏”,后来的汉化版中就莫名其妙地改为了“自动沉浸式状态栏”。
作者:匿名用户
链接:https://www.zhihu.com/question/27040217/answer/34999684
来源:知乎
android中真正的沉浸式是指在游戏中,和播放视屏中隐藏状态栏。
状态栏的相关API
1 状态栏的颜色
你指定的app主题中
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
代码设置
getWindow().setStatusBarColor(Color.YELLOW);


2 状态栏的相关设置
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
getSupportActionBar().hide();

decorView
: 是Activity 的根视图 它包含statusbar ActionBar 和contentView(就是activity的视图)
通过decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN)
设置转态栏
1 View.SYSTEM_UI_FLAG_VISIBLE
:状态栏和Activity共存,Activity不全屏显示
2 View.SYSTEM_UI_FLAG_FULLSCREEN
:Activity全屏显示,且状态栏被覆盖掉
3 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
:Activity全屏显示,但会被状态栏遮挡
4 View.INVISIBLE
: Activity全屏显示,隐藏状态栏
5 View.SYSTEM_UI_FLAG_LOW_PROFILE
:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN );
getWindow().setStatusBarColor(Color.TRANSPARENT);
将ui设置成让Activity的内容扩展至全屏,且显示状态栏,并将状态栏背景色设置为透明
但是这只是将状态栏悬浮在了activity视图上。如果activity顶部有内容将会发生遮挡

在根视图中添加属性 android:fitsSystemWindows="true"
将会使留出一部分区域给状态栏

那么如何达到平时隐藏状态栏 ,下拉时显示状态栏
@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);
}
}

网友评论