安卓解決小米,魅族狀態列全白的問題
阿新 • • 發佈:2018-11-21
本文不是原創 是借鑑了其他大神的程式碼,我只是轉發收藏一下,方便自己學習記錄
原文地址:https://blog.csdn.net/xiaoshuxgh/article/details/80253196
先看下我沒解決的效果 全白的
使用大神的程式碼後 狀態列就能看見了 就解決了
程式碼如下
public class StatusBarUtils { // 設定狀態列透明與字型顏色 public static void setStatusBarTranslucent(Activity activity, boolean isLightStatusBar) { if (activity == null) return; Window window = activity.getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); } if (isXiaomi()) { setXiaomiStatusBar(window, isLightStatusBar); } else if (isMeizu()) { setMeizuStatusBar(window, isLightStatusBar); } } // 是否是小米手機 public static boolean isXiaomi() { return "Xiaomi".equals(Build.MANUFACTURER); } // 設定小米狀態列 public static void setXiaomiStatusBar(Window window, boolean isLightStatusBar) { Class<? extends Window> clazz = window.getClass(); try { Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); int darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlagField.invoke(window, isLightStatusBar ? darkModeFlag : 0, darkModeFlag); } catch (Exception e) { e.printStackTrace(); } } // 是否是魅族手機 public static boolean isMeizu() { try { Method method = Build.class.getMethod("hasSmartBar"); return method != null; } catch (NoSuchMethodException e) { } return false; } // 設定魅族狀態列 public static void setMeizuStatusBar(Window window, boolean isLightStatusBar) { WindowManager.LayoutParams params = window.getAttributes(); try { 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(null); int value = meizuFlags.getInt(params); if (isLightStatusBar) { value |= bit; } else { value &= ~bit; } meizuFlags.setInt(params, value); window.setAttributes(params); darkFlag.setAccessible(false); meizuFlags.setAccessible(false); } catch (Exception e) { e.printStackTrace(); } } }
然後使用就是在每一個Activity啟動的時候呼叫以下程式碼 就解決小米和魅族的問題了
StatusBarUtils.setStatusBarTranslucent(this,true);
再次宣告 本文不是原創,原文地址在最頂部