第一步:
首先得让你的activity的布局文件的根布局有android:fitsSystemWindows="true"
该属性,它指定了状态栏占有一定的位子.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical"
android:fitsSystemWindows="true">
第二步:
在你的activity的onCreate
方法中调用该方法:
@TargetApi(19)
private void initWindow() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
ViewGroup decorView = (ViewGroup) getWindow().getDecorView();
View mStatusBarTintView = new View(this);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, getStatusBarHeight());
params.gravity = Gravity.TOP;
mStatusBarTintView.setLayoutParams(params);
mStatusBarTintView.setBackgroundColor(getResources().getColor(DEFAULT_TINT_COLOR));
mStatusBarTintView.setVisibility(View.VISIBLE);
decorView.addView(mStatusBarTintView);
}
}
protected int getStatusBarHeight(){
Class<?> c = null;
Object obj = null;
Field field = null;
int x = 0, sbar = 38;//默认为38,貌似大部分是这样的
try {
c = Class.forName("com.android.internal.R$dimen");
obj = c.newInstance();
field = c.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
sbar = getResources().getDimensionPixelSize(x);
} catch (Exception e1) {
e1.printStackTrace();
}
return sbar;
}
这里获取状态栏的获取就不说了,上一篇文章已经说过了关于如何获取android状态栏高度,上面的DEFAULT_TINT_COLOR
就是你要指定的状态栏颜色值,我这里设置的颜色值跟toolbar的颜色一样。