之前项目开发的过程中,使用到了这个,一直没有时间做个总结,趁有时间再次做个总结。
需求:
沉浸式4.4以上都支持沉浸式状态栏
先来个效果图
实现:
①:在style中创建app的Theme
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<!-- toolbar(actionbar)颜色 -->
<item name="colorPrimary">自定义颜色</item>
<!-- 状态栏颜色 -->
<item name="colorPrimaryDark">自定义颜色</item>
</style>
设置toolbar的颜色和状态栏的颜色 为自己定义的颜色
需要创建一个layout-v19 存放style 适配4.4版本
style-v19中的代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">自定义颜色</item>
<item name="colorPrimaryDark">自定义颜色</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
//一定需要设置这个,否则4.4版本的会顶不上去
</resources>
②:
在需要设置沉浸式的Activity的layout中添加
android:fitsSystemWindows=”true”
③:
在Activity的OnCreate中添加
在 setContentView() 后面添加
StatusBarCompat.compat(this,getResources().getColor(自定义颜色));
④:
StatusBarCompat 类
package com.zcj.home.test1;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
public class StatusBarCompat
{
private static final int INVALID_VAL = -1;
private static final int COLOR_DEFAULT = Color.parseColor("#20000000");
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void compat(Activity activity, int statusColor)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
if (statusColor != INVALID_VAL)
{
activity.getWindow().setStatusBarColor(statusColor);
}
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
{
int color = COLOR_DEFAULT;
ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
if (statusColor != INVALID_VAL)
{
color = statusColor;
}
View statusBarView = new View(activity);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setBackgroundColor(color);
contentView.addView(statusBarView, lp);
}
}
public static void compat(Activity activity)
{
compat(activity, INVALID_VAL);
}
public static int getStatusBarHeight(Context context)
{
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
{
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
}
上传上我自己写的demo源码:
http://download.csdn.net/detail/qiuqiu784810789/9788861