| package com.doumee.lib_coremodel.util; | 
|   | 
| import android.annotation.TargetApi; | 
| import android.app.Activity; | 
| import android.content.Context; | 
| import android.graphics.Color; | 
| import android.os.Build; | 
| import android.view.View; | 
| import android.view.ViewGroup; | 
| import android.view.Window; | 
| import android.view.WindowManager; | 
|   | 
| import java.io.IOException; | 
| import java.lang.reflect.Field; | 
| import java.lang.reflect.Method; | 
|   | 
| import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; | 
|   | 
| //状态栏工具 | 
| public class StateBarUtils { | 
|      | 
|     private Activity activity; | 
|   | 
|     public StateBarUtils(Activity activity) { | 
|         this.activity = activity; | 
|     } | 
|   | 
|     public void setStateBar(){ | 
|         transparencyBar(); | 
|         addStatusViewWithColor(Color.parseColor("#ffE91E63")); | 
|         setFitsSystemWindows(activity,true); | 
|     } | 
|   | 
|     public void setStateBar(int color){ | 
|         transparencyBar(); | 
|         addStatusViewWithColor(color); | 
|         setFitsSystemWindows(activity,true); | 
|     } | 
|   | 
|     //设置透明 | 
|     public void setTransparentStateBar(){ | 
|         transparencyBar(); | 
|         addStatusViewWithColor(Color.parseColor("#ffffffff")); | 
|         setFitsSystemWindows(activity,true); | 
|         setStatusTextColor(true,activity); | 
|     } | 
|   | 
|     //设置透明 | 
|     public void setTransparentNoStateBar(){ | 
|         transparencyBar(); | 
|         setStatusTextColor(true,activity); | 
|         setFitsSystemWindows(activity,false); | 
|     } | 
|   | 
|     public void setStartBarColor(int color){ | 
|         addStatusViewWithColor( color); | 
|     } | 
|   | 
|   | 
|   | 
|     @TargetApi(19) | 
|     public void transparencyBar() { | 
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | 
|             Window window = activity.getWindow(); | 
|             window.clearFlags(FLAG_TRANSLUCENT_STATUS); | 
|             window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); | 
|             window.setStatusBarColor(Color.TRANSPARENT); | 
|             window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
|                     | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); | 
|   | 
|         } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | 
|             Window window = activity.getWindow(); | 
|             window.setFlags(FLAG_TRANSLUCENT_STATUS, | 
|                     FLAG_TRANSLUCENT_STATUS); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 添加状态栏占位视图 | 
|      * | 
|      */ | 
|     private void addStatusViewWithColor(int color) { | 
|         ViewGroup contentView = activity.findViewById(android.R.id.content); | 
|         View statusBarView = new View(activity); | 
|         ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, | 
|                 getStatusBarHeight(activity)); | 
|         statusBarView.setBackgroundColor(color); | 
|         contentView.addView(statusBarView, lp); | 
|     } | 
|   | 
|     public static int getStatusBarHeight(Context context) { | 
|         try { | 
|             int result = 0; | 
|             int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); | 
|             if (resourceId > 0) { | 
|                 result = context.getResources().getDimensionPixelSize(resourceId); | 
|             } | 
|             return result; | 
|         }catch (Exception e){ | 
|   | 
|         } | 
|         return 0; | 
|     } | 
|   | 
|     /** | 
|      * 设置页面最外层布局 FitsSystemWindows 属性 | 
|      * @param activity | 
|      * @param value | 
|      */ | 
|     public static void setFitsSystemWindows(Activity activity, boolean value) { | 
|         ViewGroup contentFrameLayout = (ViewGroup) activity.findViewById(android.R.id.content); | 
|         View parentView = contentFrameLayout.getChildAt(0); | 
|         if (parentView != null && Build.VERSION.SDK_INT >= 14) { | 
|             parentView.setFitsSystemWindows(value); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 改变魅族的状态栏字体为黑色,要求FlyMe4以上 | 
|      */ | 
|     private static void processFlyMe(boolean isLightStatusBar, Activity activity) { | 
|         WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); | 
|         try { | 
|             Class<?> instance = Class.forName("android.view.WindowManager$LayoutParams"); | 
|             int value = instance.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON").getInt(lp); | 
|             Field field = instance.getDeclaredField("meizuFlags"); | 
|             field.setAccessible(true); | 
|             int origin = field.getInt(lp); | 
|             if (isLightStatusBar) { | 
|                 field.set(lp, origin | value); | 
|             } else { | 
|                 field.set(lp, (~value) & origin); | 
|             } | 
|         } catch (Exception ignored) { | 
|             ignored.printStackTrace(); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 改变小米的状态栏字体颜色为黑色, 要求MIUI6以上  lightStatusBar为真时表示黑色字体 | 
|      */ | 
|     private static void processMIUI(boolean lightStatusBar, Activity activity) { | 
|         Class<? extends Window> clazz = activity.getWindow().getClass(); | 
|         try { | 
|             int darkModeFlag; | 
|             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(), lightStatusBar? darkModeFlag : 0, darkModeFlag); | 
|         } catch (Exception ignored) { | 
|             ignored.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"; | 
|   | 
|     /** | 
|      * 判断手机是否是小米 | 
|      * @return | 
|      */ | 
|     public static boolean isMIUI() { | 
|         try { | 
|             final BuildProperties prop = BuildProperties.newInstance(); | 
|             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; | 
|         } catch (final IOException e) { | 
|             return false; | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 判断手机是否是魅族 | 
|      * @return | 
|      */ | 
|     public static boolean isFlyme() { | 
|         try { | 
|             // Invoke Build.hasSmartBar() | 
|             final Method method = Build.class.getMethod("hasSmartBar"); | 
|             return method != null; | 
|         } catch (final Exception e) { | 
|             return false; | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 设置状态栏文字色值为深色调 | 
|      * @param useDart 是否使用深色调 | 
|      * @param activity | 
|      */ | 
|     public void setStatusTextColor(boolean useDart, Activity activity) { | 
|         if (isFlyme()) { | 
|             processFlyMe(useDart, activity); | 
|         } else if (isMIUI()) { | 
|             processMIUI(useDart, activity); | 
|         } else { | 
|             if (useDart) { | 
|                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | 
|                     activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); | 
|                 } | 
|             } else { | 
|                 activity.getWindow().getDecorView().setSystemUiVisibility( | 
|                         View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); | 
|             } | 
|             activity.getWindow().getDecorView().findViewById(android.R.id.content).setPadding(0, 0, 0, 0); | 
|         } | 
|     } | 
| } |