Android沉浸式状态栏方法总结
2017-01-17 本文已影响350人
开飞机的老舒克
为什么用沉浸式状态栏?
也不知道从什么时候开始大部分的App已经全部向沉浸式状态栏靠拢,这种效果应该是想让最顶部的状态栏和项目的标题栏过渡比较融和吧。
不过沉浸式状态栏这种叫法可能不太妥当。
本篇文章参考郭霖的博客。
郭霖博客地址:Android状态栏微技巧,带你真正理解沉浸式模式
第一种实现方式
其实主要实现的就是顶部状态栏和toolbar的颜色一致达到效果。
Paste_Image.png
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
其中 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();
布局往上移动的方式
第三种实现方式
第三种表面看来是全屏的方式,然后可以通过滑动顶部来实现状态栏的弹出,然后会自动隐藏掉。这种模式也是真正意义的沉浸式状态栏。
git效果:http://note.youdao.com/share/?id=fdc645c84ad9cd4e4ba0841b116a703c&type=note#/
自动隐藏顶部状态栏实现方式:在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);
}
}