首先什么是沉浸式呢?我的理解就是 状态栏融入到整个页面之中,使其看起来协调一致。
首先看下没有做沉浸式的页面
页面可能给人感觉生硬
再看一下做了沉浸式的页面
上面两种都是沉浸式,个人感觉还是可以的
下面说下如何做出沉浸式的效果吧
这个类可以直接黏贴使用
/**
* 作者: CoolTone
* 描述: 沉浸式状态栏
*/
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;
}
}
里面有 compat 方法
方法 compat (Activity activity , int statusColor ) 是使用自己设置的颜色
方法 compat (Activity activity) 是使用默认的颜色,这里默认色值上面也有标注
使用时我们在 onCreate( ) 方法中调用即可
StatusBarCompat.compat(this, getResources().getColor(R.color.black_1)); // 沉浸式