随着苹果刘海屏的出现,越来越多的android手机制造商开始出刘海屏,水滴屏,而手机不同的状态栏高度,导致UI设计的图,状态栏部分也会在不同手机上显示不一样,这个时候就需要适配了。
本文主要是动态获取手机的状态栏高度并且设置成沉浸式状态。
首先建立一个工具类:StatusBarUtils.class
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
public class StatusBarUtils {
private Activity mActivity;
//状态栏颜色
private int mColor = -1;
//状态栏drawble
private Drawable mDrawable;
//是否是最外层布局是 DrawerLayout 的侧滑菜单
private boolean mIsDrawerLayout;
//是否包含 ActionBar
private boolean mIsActionBar;
//侧滑菜单页面的内容视图
private int mContentResourseIdInDrawer;
public StatusBarUtils(Activity activity) {
mActivity = activity;
}
public static StatusBarUtils with(Activity activity) {
return new StatusBarUtils(activity);
}
public int getColor() {
return mColor;
}
public StatusBarUtils setColor(int color) {
mColor = color;
return this;
}
public Drawable getDrawable() {
return mDrawable;
}
public StatusBarUtils setDrawable(Drawable drawable) {
mDrawable = drawable;
return this;
}
public boolean isDrawerLayout() {
return mIsDrawerLayout;
}
public boolean isActionBar() {
return mIsActionBar;
}
public StatusBarUtils setIsActionBar(boolean actionBar) {
mIsActionBar = actionBar;
return this;
}
/**
* 是否是最外层布局为 DrawerLayout 的侧滑菜单
*
* @param drawerLayout 是否最外层布局为 DrawerLayout
* @param contentId 内容视图的 id
* @return
*/
public StatusBarUtils setDrawerLayoutContentId(boolean drawerLayout, int contentId) {
mIsDrawerLayout = drawerLayout;
mContentResourseIdInDrawer = contentId;
return this;
}
public void init() {
fullScreen(mActivity);
if (mColor != -1) {
//设置了状态栏颜色
addStatusViewWithColor(mActivity, mColor);
}
if (mDrawable != null) {
//设置了状态栏 drawble,例如渐变色
addStatusViewWithDrawble(mActivity, mDrawable);
}
if (isDrawerLayout()) {
//未设置 fitsSystemWindows 且是侧滑菜单,需要设置 fitsSystemWindows 以解决 4.4 上侧滑菜单上方白条问题
fitsSystemWindows(mActivity);
}
if (isActionBar()) {
//要增加内容视图的 paddingTop,否则内容被 ActionBar 遮盖
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
ViewGroup rootView = (ViewGroup) mA