2017-09-09 4 views
2

Je souhaite changer la couleur des icônes de la barre d'état du blanc au noir. J'essaie le code ci-dessous mais je ne peux pas le faire. Pourrais-tu m'aider s'il te plait?Comment changer la couleur de l'icône de la barre d'état dans Android?

Code d'activité:

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

Code style.xml:

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

Vous souhaitez changer la couleur de l'icône. Est-ce que 'Time' et une autre icône sont en haut? – KeLiuyue

+0

@KeLiuyue Oui. Je veux changer le texte de la barre d'état et la couleur de l'icône. –

+0

Vous pouvez vérifier ma réponse. Ca marche bien dans mon code. @ Muhammed Cobanoglu – KeLiuyue

Répondre

2

essayer.

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

ensuite mis à la disposition racine

android:fitsSystemWindows="true" 

Une autre façon

Essayez ceci dans votre code.

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

Ensuite, utilisez StatusBarLightMode(this); dans votre code.

Et cela peut rendre votre texte d'état et votre icône noirs.

Modifier

A partir de Android 6.0, officiel de Google fournit un support pour la configuration android:windowLightStatusBar dans la propriété de style Oui, lorsqu'il est réglé sur true, lorsque la couleur d'arrière-plan de la barre d'état est la lumière, la couleur du texte de la La barre d'état devient grisée pour 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

Malheureusement ça ne marche pas. Mon téléphone est OnePlus One. La version Android est 6.0.1 –

+0

Vous pouvez réessayer. @MuhammedCobanoglu – KeLiuyue

+0

Pourriez-vous essayer la deuxième manière dans votre code? J'utilise HUA WEI et ça va. Aussi, vous pouvez essayer @MuhammedCobanoglu – KeLiuyue