2012-01-28 52 views
14

Quiero cambiar el color de fondo de la barra de estado escribiendo una aplicación. Mi dispositivo Android tiene color negro, quiero cambiarlo por otro color. Vi algunas publicaciones relacionadas con esto aquí, pero están contando sobre antecedentes de notificaciones.Cómo cambiar el color de fondo de la barra de estado de Android

Si algún cuerpo lo sabe, por favor, ayúdenme.

La barra de estado por defecto

enter image description here

Después de usar un estirable como fondo de la barra de estado

enter image description here

Respuesta

12

En este momento, a menos que usted está haciendo una ROM personalizada esto no es posible, a menos que solo desee cambiar la barra de estado de su aplicación.

Esto requeriría muchísimo trabajo.

primer lugar se necesita añadir a su Theme.NoTitleBar.Fullscreen manifiesta

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
     > 

Luego, una vez que haya hecho eso es necesario crear un diseño estándar que representa la barra de estado, esto significaría que usted tiene para agregar el tiempo y también recibir todas las notificaciones de otras aplicaciones, personalmente no sé cómo hacerlo, pero estoy seguro de que hay una manera.

Si realmente quieres hacer esta buena diversión, tienes un momento difícil por delante.


En este momento, a menos que tenga el know how de ROMs personalizadas que construyen No creo que esto es posible

11

Esto es posible en Kitkat y después.

Si desea utilizarlo en una aplicación (como me pediste), se puede usar esta biblioteca https://github.com/jgilfelt/SystemBarTint

Sólo es necesario escribir:

// set a custom tint color for all system bars 
tintManager.setTintColor(Color.parseColor("#99000FF")); 
// set a custom navigation bar resource 
tintManager.setNavigationBarTintResource(R.drawable.my_tint); 
// set a custom status bar drawable 
tintManager.setStatusBarTintDrawable(MyDrawable); 
1

SI desea actualizar la color de barra de estado en Lollipop sin actualizar su ADT y SDK y todo lo relacionado, puede usar reflexiones para llegar a los métodos de API 21 (Lollipop) y superior

en su actividad:

if (Build.VERSION.SDK_INT >= 21) { 
     Window window = getWindow(); 

     // original code, works on Lollipop SDKs 
     // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     // window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
     // window.setStatusBarColor(getResources().getColor(YOUR_COLOR)); 

     try { 
      // to work on old SDKs 
      int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000; 
      window.addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 

      Class<?> cls = window.getClass(); 
      Method method = cls.getDeclaredMethod("setStatusBarColor", 
        new Class<?>[] { Integer.TYPE }); 

      method.invoke(window, Res.color(theme.statusColor)); 

     } catch (Exception e) { 
      // upgrade your SDK and ADT :D 
     } 

    } 

mi API mínimo actual es de 15, si no se puede encontrar

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 

en su SDK, puede obtener su valor a partir de la documentación que lo que hice con

WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 

esperanza esta ayudado

+0

no funcionar para 17: java.lang.NoSuchMethodException: setStatusBarColor [int] – djdance

7

En estilos.xml hacer esto:

<resources> 
    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light"> 
     <item name="colorPrimary">@color/color_primary</item> 
     <item name="colorPrimaryDark">@color/color_secondary</item> 
     <item name="colorAccent">@color/color_accent</item> 
     <!---Below is the code for status bar color------> 
     <item name="android:statusBarColor">@color/color_primary</item> 
    </style> 
</resources> 

que es este sitio en su valores-v21/styles.xml, para permitir esto en Lollipop y posteriores.

Para hacerlo mediante programación ello:

Window window = activity.getWindow(); 
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));` 
Cuestiones relacionadas