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 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); } } }