不透明
//1.设置不透明,再设置颜色
<item name="android:windowIsTranslucent">false</item>//强制改成不透明
activity.getWindow().setStatusBarColor(color);
//2.设置透明,再通过设定全屏,增加与状态栏同高度的布局替代
透明设置见下文
半透明
<item name="android:windowTranslucentStatus">true</item>//半透明或全透明(机型版本有关)
透明
<item name="android:windowIsTranslucent">true</item>//强制改成透明
状态栏悬浮在布局之上
//改变状态栏对布局的挤压,让状态栏悬浮在布局之上
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
状态栏黑字体
//设置状态栏黑色字体
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
DEMO
//1.字体设置
//改变状态栏对布局的挤压,让状态栏悬浮在布局之上:SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//默认白字,黑字设置:SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
//可以使用黑字的api版本
if(neddTran){
//白字
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}else{
//黑字
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
//白字
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}else{
//白字
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
//2.状态栏透明设置
//设置状态栏颜色为:透明
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
StatusBarUtils.compat(this);
}else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
//只能是白字:
if(neddTran){
//需要状态栏透明的activity
StatusBarUtils.compat(this);
}else{
//使用灰色底
StatusBarUtils.compat(this, getColors(R.color.label));
}
}else{
//只能是白字
if(neddTran){
//需要状态栏透明的activity
getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}else{
//使用系统本身的颜色或者灰色
StatusBarUtils.compat(this, getColors(R.color.label));
}
}
//3.设置状态栏颜色颜色StatusBarUtils
public static void compat(Activity activity, int statusColor)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
int color = COLOR_DEFAULT;
if (statusColor != INVALID_VAL)
{
color = statusColor;
}
activity.getWindow().setStatusBarColor(color);
}
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);
}
}