该方法适用于Android4.4以上系统,并且页面带有公共标题。以下是实现方式:
1.状态栏设置为透明
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
2.调整公共标题位置
protected void initTitleView() {
titleView = findViewById(R.id.title);
if (titleView != null) {
ViewGroup.LayoutParams params = titleView.getLayoutParams();
if (params != null) { //调整 标题的高度=标题+状态栏高度
if (params instanceof RelativeLayout.LayoutParams) {
((RelativeLayout.LayoutParams) params).height = params.height + WindowUtil.getStatusBarHeight(this);
} else if (params instanceof LinearLayout.LayoutParams) {
((LinearLayout.LayoutParams) params).height = params.height + WindowUtil.getStatusBarHeight(this);
}
titleView.setLayoutParams(params);
}
titleView.setPadding(titleView.getPaddingLeft(),
titleView.getPaddingTop() + WindowUtil.getStatusBarHeight(this),
titleView.getPaddingRight(),
titleView.getPaddingRight());//调整上padding=实际padding+状态栏高度
if (titleView.getLeftBackImageTv() != null) {
titleView.getLeftBackImageTv().setOnClickListener(this);
}
}
}
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;
}
优点:可以适配状态栏背景效果为图片的情形。
缺点:需要有公共标题栏。如果没有,可以考虑获取页面的top view,仅提供一种可行性。