为什么用沉浸式状态栏?
也不知道从什么时候开始大部分的App已经全部向沉浸式状态栏靠拢,这种效果应该是想让最顶部的状态栏和项目的标题栏过渡比较融和吧。
不过沉浸式状态栏这种叫法可能不太妥当。
第一种实现方式
其实主要实现的就是顶部状态栏和toolbar的颜色一致达到效果。
Paste_Image.png
@color/colorPrimary
@color/colorPrimaryDark
@color/colorAccent
其中 colorPrimaryDark这个参数就是设置状态栏的颜色,设置状态栏和toolbar或者自定义的标题栏颜色一致的话会显示
状态效果
第二种实现方式
第二种实现方式是把主题布局往上移动,把布局从屏幕的左上角开始计算。所以这种方式需要注意,把顶部状态栏的高度要计算在出来。
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
//隐藏标题栏
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
布局往上移动的方式
第三种实现方式
第三种表面看来是全屏的方式,然后可以通过滑动顶部来实现状态栏的弹出,然后会自动隐藏掉。这种模式也是真正意义的沉浸式状态栏。
自动隐藏顶部状态栏
实现方式:在Activity中实现如下方法
@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);
}
}