android最佳实践4:4.4以下沉浸式体验框架SystemBarTint

前言

android也实现了类似于ios的状态栏透明,变色效果,称为沉浸式体验。但是,4.4及以上才能用!!所以强烈推荐这个SystemBarTint框架,能实现同样的效果,而且最低兼容API10.

注意

当不采用MD设计规范时,采用本方案最合适。若使用MD方案了,请最好使用toolbar取代actionbar.具体本方案的兼容性,还需要继续测试。

4.4 以下版本的方案

引入依赖

1
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'

如何使用

1 Activity的onCreate方法添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//当api》=19时
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}

// 创建状态栏的管理实例
SystemBarTintManager tintManager = new SystemBarTintManager(this);
// 激活状态栏设置
tintManager.setStatusBarTintEnabled(true);
// 激活导航栏设置,当使用actionbar的时候开启
tintManager.setNavigationBarTintEnabled(true);
// 设置一个颜色给系统栏
tintManager.setTintColor(Color.parseColor("#99000FF"));
// 设置状态栏需颜色或背景图
tintManager.setStatusBarTintResource(R.color.statusbar_bg);
// 设置一个样式背景给导航栏,当使用actionbar的时候使用
tintManager.setNavigationBarTintResource(R.drawable.my_tint);

}

@TargetApi(19)
private void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
}

2 activity的xml配置文件

记得新增属性

1
2


3 Theme的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- 我的activity主题,应用于所有的 activity-->
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- activity切换动画-->
<item name="android:windowAnimationStyle">@style/activityAnimation</item>
<!-- 不显示Title Bar -->
<item name="android:windowNoTitle">true</item>
<!-- 避免控件都会顶到状态栏上 -->
<item name="android:fitsSystemWindows">true</item>
<!-- API 14 theme 的自定义 can go here. -->
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
</style>

<!--activity统一的切换动画 -->
<style name="activityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/push_left_in</item>
<item name="android:activityOpenExitAnimation">@anim/push_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/back_right_in</item>
<item name="android:activityCloseExitAnimation">@anim/back_right_out</item>
</style>

<!--API 14主题的自定义 -->
<style name="ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/orange</item>
</style>

4.4以上版本的方案(不适用第三方框架)

如何实现,请参考blog 安卓4.4以上修改状态栏颜色