importandroid.annotation.TargetApi;importandroid.app.Activity;importandroid.content.Context;importandroid.content.res.Resources;importandroid.os.Build;importandroid.support.annotation.ColorRes;importandroid.text.TextUtils;importandroid.util.Log;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.Window;importandroid.view.WindowManager;importcom.sandy.cloudlock.R;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.util.Properties;public classStatusBarCompatUtil2 {private static final int COLOR_DEFAULT =ResourceUtil.getColor(R.color.colorPrimary);private static intgetStatusBarHeight(Context context) {int statusBarHeight = 0;
Resources res=context.getResources();int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");if (resourceId > 0) {
statusBarHeight=res.getDimensionPixelSize(resourceId);
}returnstatusBarHeight;
}/*** 设置状态栏透明*/
public static void setTranslucentStatus(Activity activity, @ColorRes intstatusColor) {if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP) {
Window window=activity.getWindow();
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);int color =COLOR_DEFAULT;if (statusColor != 0) {
color=ResourceUtil.getColor(statusColor);
}
window.setStatusBarColor(color);
}else if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {int color =COLOR_DEFAULT;
ViewGroup contentView=activity.findViewById(android.R.id.content);if (statusColor != 0) {
color=ResourceUtil.getColor(statusColor);
}
View statusBarView= newView(activity);
ViewGroup.LayoutParams lp= newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setBackgroundColor(color);
contentView.addView(statusBarView, lp);
}else{
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}/*** 改变魅族的状态栏字体为黑色,要求FlyMe4以上*/
private static void processFlyme(Activity activity, booleandarkMode) {
Window window=activity.getWindow();if (window != null) {try{
WindowManager.LayoutParams lp=window.getAttributes();
Field darkFlag= WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
Field meizuFlags= WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");
darkFlag.setAccessible(true);
meizuFlags.setAccessible(true);int bit = darkFlag.getInt((Object) null);int value =meizuFlags.getInt(lp);if(darkMode) {
value|=bit;
}else{
value&= ~bit;
}
meizuFlags.setInt(lp, value);
window.setAttributes(lp);
}catch(Exception var8) {
Log.w("StatusBarUtils", "setStatusBarDarkIcon: failed");
}
}
}/*** 改变小米的状态栏字体颜色为黑色, 要求MIUI6以上 lightStatusBar为真时表示黑色字体*/
private static void processMIUI(Activity activity, booleandarkMode) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //即基于 Android 6.0 ,开发版 7.7.13 及以后版本
compatHighMIUI(activity, darkMode);
}else{
compatLowMIUI(activity, darkMode);
}
}
@TargetApi(Build.VERSION_CODES.M)private static void compatHighMIUI(Activity activity, booleandarkMode) {
View decorView=activity.getWindow().getDecorView();if(darkMode) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}else{int flag = decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
decorView.setSystemUiVisibility(flag);
}
}/*** 兼容低版本miui
*
*@paramactivity activity
*@paramdarkMode 是否夜间模式*/
private static void compatLowMIUI(Activity activity, booleandarkMode) {
Class extends Window> clazz =activity.getWindow().getClass();try{int darkModeFlag = 0;
Class> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
Field field= layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
darkModeFlag=field.getInt(layoutParams);
Method extraFlagField= clazz.getMethod("setExtraFlags", int.class, int.class);
extraFlagField.invoke(activity.getWindow(), darkMode? darkModeFlag : 0, darkModeFlag);
}catch(Exception e) {
e.printStackTrace();
}
}private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";/*** 判断手机是否是小米*/
private static booleanisMIUI() {final Properties prop = newProperties();return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
}/*** 判断手机是否是魅族
*
*@return
*/
private static booleanisFlyme() {try{//Invoke Build.hasSmartBar()
final Method method = Build.class.getMethod("hasSmartBar");return method != null || TextUtils.equals("Meizu", Build.MANUFACTURER);
}catch (finalException e) {return TextUtils.equals("Meizu", Build.MANUFACTURER);
}
}/*** 设置Android状态栏的字体颜色,状态栏为亮色的时候字体和图标是黑色,状态栏为暗色的时候字体和图标为白色
*
* 设置状态栏文字色值为深色调,默认状态栏颜色透明(即同标题栏的颜色)
*
*@paramactivity activity
*@paramuseDart 是否使用深色调*/
public static void setStatusBarFontIconDark(Activity activity, booleanuseDart) {
setStatusBarFontIconDark(activity, useDart,0);
}/*** 设置Android状态栏的字体颜色,状态栏为亮色的时候字体和图标是黑色,状态栏为暗色的时候字体和图标为白色
*
* 设置状态栏文字色值为深色调
*
*@paramactivity activity
*@paramuseDart 是否使用深色调
*@paramstatusColor 自定义的状态栏颜色*/
public static void setStatusBarFontIconDark(Activity activity, boolean useDart, @ColorRes intstatusColor) {if(isMIUI()) {
processMIUI(activity, useDart);
}else{if(isFlyme()) {
processFlyme(activity, useDart);
}if(useDart) {if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.M) {int mode = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
activity.getWindow().getDecorView().setSystemUiVisibility(mode);
}
}else{if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.JELLY_BEAN) {int mode = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
activity.getWindow().getDecorView().setSystemUiVisibility(mode);
}
}
activity.getWindow().getDecorView().findViewById(android.R.id.content).setPadding(0, 0, 0, 0);
}if (statusColor != 0) {if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP) {int color =ResourceUtil.getColor(statusColor);
activity.getWindow().setStatusBarColor(color);
}else if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
ViewGroup contentView=activity.findViewById(android.R.id.content);int color =ResourceUtil.getColor(statusColor);
View statusBarView= newView(activity);
ViewGroup.LayoutParams lp= newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setBackgroundColor(color);
contentView.addView(statusBarView, lp);
}
}///适配虚拟按键背景色//if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//activity.getWindow().setNavigationBarColor(COLOR_DEFAULT);//}
}
}