android案例---透明状态栏
2018-07-05 本文已影响91人
return_toLife
想要实现的效果:
微信图片_20171107222158.png- 设置透明状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}
设置之后虽然状态栏隐藏了,但是状态栏的高度被填充了(少了状态栏的高度),如下:
11.jpg
- 解决步骤一,使用fitssystemwindows预留系统空间,也可以在xml的根布局里设置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.getWindow().findViewById(android.R.id.content)).getChildAt(0);
//预留系统空间
rootView.setFitsSystemWindows(true);
//绘制区域在padding里面
rootView.setClipToPadding(true);
}
设置预留系统空间之后,用的是小米5s手机,状态栏变成白色,效果如下:
222.png
- 继续解决问题,加入一个自定义系统状态栏,获取系统状态栏高度,设置其背景颜色和自定义bar背景一致
/**
* 为activity添加状态栏颜色
*
* @param activity
* @param color
*/
public static void addStatusViewWithColor(Activity activity, int color) {
//获取contentview布局
ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
//新建一个new
View statusBarView = new View(activity);
//设置宽高
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setBackgroundResource(color);
contentView.addView(statusBarView, lp);
}
/**
* 获取状态栏高度
*
* @param activity
* @return
*/
public static int getStatusBarHeight(Activity activity) {
int result = 0;
//获取状态栏高度的资源id
int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = activity.getResources().getDimensionPixelSize(resourceId);
}
return result;
}