参考了一些文章做了一些修改,变成了自己的工具类。其中有很多地方欠考虑,有待改进,欢迎路过的大佬给点建议。
经过前两篇的介绍我们对如何修改状态栏的效果有了大致的了解,本篇介绍一种使用更加简单的方式,可以先拉到最后查看效果图。
设置主题效果
注意: 要设置fitsSystemWindows为true
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:fitsSystemWindows">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
参考SystemBarTint对状态栏的改变方式,添加下面这个类方法,用来设置 API 19 以上的状态栏效果
我们的界面绘制时在DecorView中的,这个类的核心思想就是:
1.获取DecorView
2.绘制状态栏高度的View
3.将view添加到DecorView中
所以我们对状态栏的操作,其实就是对view的操作。在这个类中默认view不显示,改变状态栏的效果时,要调用
setStatusBarTintEnabled(true)
注意:使用这个方法的前提是 状态栏是透明的,因为进行了相关的判断(可以自行修改)
public class SystemBarTintManager {
public static final int DEFAULT_TINT_COLOR = 0x99000000;
private boolean mStatusBarAvailable;
private boolean mStatusBarTintEnabled;
private View mStatusBarTintView;
@TargetApi(19)
public SystemBarTintManager(Activity activity) {
Window win = activity.getWindow();
//获取DecorView
ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 检查主题中是否有透明的状态栏
int[] attrs = {android.R.attr.windowTranslucentStatus};
TypedArray a = activity.obtainStyledAttributes(attrs);
try {
mStatusBarAvailable = a.getBoolean(0, false);
}