我们看下android4.4的手机沉浸式状态栏的效果图:
让所有的activity继承baseActivity,然后在baseactivity里面为重复的高度添加一个状态栏高度的view将toolbar顶下去即可。
如果你的activity没有继承baseActivity,那么你就只有在每个Activity的setContentView后面添加如下代码。
看不懂可以联系我。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//应用竖直屏幕显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(getLayoutResId());
//判断api19版本,填充状态栏高度这个方法一定要在setContentView后调用
if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
//填充重叠的部分
addMoreView();
}
initView(savedInstanceState);
if (this instanceof IBaseView) {
mPresenterImpl.onAttach((V) this);
}
}
/**
* 添加一个和状态栏一样高度的view将toolbar顶下去
*/
private void addMoreView() {
//获取windowphone下的decorView
ViewGroup decorView = (ViewGroup) getWindow().getDecorView();
int count = decorView.getChildCount();
//判断是否已经添加了statusBarView
if (count > 0 && decorView.getChildAt(count - 1) instanceof TextView) {
decorView.getChildAt(count - 1).setBackgroundColor(Color.parseColor("#8B1C21"));
} else {
//新建一个和状态栏高宽的view
View statusView = createStatusBarView();
decorView.addView(statusView);
}
ViewGroup rootView = (ViewGroup) ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
//rootview不会为状态栏留出状态栏空间
ViewCompat.setFitsSystemWindows(rootView, true);
rootView.setClipToPadding(true);
}
/**
* 创建一个与状态看一样高度的view
*
* @return 返回view
*/
private View createStatusBarView() {
// 绘制一个和状态栏一样高的矩形
TextView statusBarView = new TextView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight());
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(Color.parseColor("#8B1C21"));
return statusBarView;
}
/**
* 拿到状态栏的高度
*
* @return 返回高度
*/
private int getStatusBarHeight() {
Class c;
try {
c = Class.forName("com.android.internal.R$dimen");
Object obj = c.newInstance();
Field field = c.getField("status_bar_height");
int x = Integer.parseInt(field.get(obj).toString());
LogUtils.e("打印高度:" + getResources().getDimensionPixelSize(x));
return getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
在看下修复后android4.4手机的效果: