2017-09-09 182 views
2

我想將狀態欄圖標顏色從白色更改爲黑色。我嘗試下面的代碼,但我無法做到。請問你能幫幫我嗎?如何更改Android中的狀態欄圖標顏色?

活動代碼:

public static void setLightStatusBar(View view,Activity activity){ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

     int flags = view.getSystemUiVisibility(); 
     flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; 
     view.setSystemUiVisibility(flags); 
     activity.getWindow().setStatusBarColor(Color.WHITE); 
    } 
} 

style.xml代碼:

<item name="android:windowLightStatusBar">true</item> 
+0

您想更改圖標顏色。 '時間'和其他圖標在頂部? – KeLiuyue

+0

@KeLiuyue是的。我想更改狀態欄文字和圖標顏色。 –

+0

你可以檢查我的答案。它在我的代碼中工作正常。@ Muhammed Cobanoglu – KeLiuyue

回答

2

試試這個。

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); 
    // edited here 
    activity.getWindow().setStatusBarColor(Color.WHITE); 
} 

然後設置在根佈局

android:fitsSystemWindows="true" 

另一種方式

試試這個在您的代碼。

public static int StatusBarLightMode(Activity activity) { 
    int result = 0; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     if (MIUISetStatusBarLightMode(activity, true)) { 
      result = 1; 
     } else if (FlymeSetStatusBarLightMode(activity.getWindow(), true)) { 
      result = 2; 
     } else 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); 
      result = 3; 
     } 
    } 
    return result; 
} 


public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) { 
    boolean result = false; 
    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(null); 
      int value = meizuFlags.getInt(lp); 
      if (dark) { 
       value |= bit; 
      } else { 
       value &= ~bit; 
      } 
      meizuFlags.setInt(lp, value); 
      window.setAttributes(lp); 
      result = true; 
     } catch (Exception e) { 

     } 
    } 
    return result; 
} 

public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) { 
    boolean result = false; 
    Window window = activity.getWindow(); 
    if (window != null) { 
     Class clazz = window.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); 
      if (dark) { 
       extraFlagField.invoke(window, darkModeFlag, darkModeFlag); 
      } else { 
       extraFlagField.invoke(window, 0, darkModeFlag); 
      } 
      result = true; 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if (dark) { 
        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_VISIBLE); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return result; 
} 

然後在代碼中使用StatusBarLightMode(this);

它可以讓你的狀態文本和圖標變成黑色。

編輯

與Android 6.0開始,谷歌官方提供的樣式屬性配置android:windowLightStatusBar支持 是的,當設置爲true,當狀態欄的背景顏色爲淺,的文字顏色狀態欄變灰顯示爲false。

<style name="statusBarStyle" parent="@android:style/Theme.DeviceDefault.Light"> 
    <item name="android:statusBarColor">@color/status_bar_color</item> 
    <item name="android:windowLightStatusBar">false</item> 
</style> 
+0

不幸的是,它不起作用。我的手機是OnePlus One。 Android版本是6.0.1 –

+0

您可以再試一次。 @MuhammedCobanoglu – KeLiuyue

+0

你可以在你的代碼中嘗試第二種方式嗎?我使用HUA WEI,沒問題。你也可以試試@MuhammedCobanoglu – KeLiuyue