Barra de estado transparente: antes de Android 4.4 (KitKat)

Sé que en Android 4.4 KitKat (API 19) es posible hacer la barra de estado transparente.

Pero por ejemplo, Go Launcher Ex y otros tienen una opción para hacerlo transparente, y está trabajando en pre KitKat también, para mí ( Android 4.3 (Jelly Bean)) y también en mi Android 4.0 (Ice Cream Sandwich) del dispositivo.

No necesitaba root ni ningún privilegio especial para usarlo.

Descargar Go Launcher Ex y pruébelo usted mismo. Para mí también estaría bien si necesitara root.

Pero, ¿cómo hicieron eso? ¿Cómo puedo hacer que la barra de estado de Android sea translúcida en dispositivos pre-KitKat?

— Para aclarar las cosas —

No estoy hablando de la barra de acción ; Me refiero a la barra de estado (barra de notificación)!


Vea estos ejemplos:

(Tenga en cuenta, esto se toma de mi Stock Galaxy Nota 3 con Android 4.3 y Go Ex lanzador ).

(Lo mismo funciona con mi Galaxy S2 y Android 4.0 también.)

Sin una barra de estado transparente:

Sin barra transparente (predeterminado)

Con la barra de estado transparente activada: (Quiero lograr esto en los dispositivos pre 4.4 (API 19)

Con la barra de estado transparente (lo que quiero lograr en dispositivos pre 4.4 de cualquier manera

Descubrí cómo obtener una barra de estado transparente en los dispositivos Samsung y Sony
Ejecutando al menos Android 4.0.

Para empezar, permítanme explicar por qué no es posible en la mayoría de los dispositivos:
Desde el lado oficial de Android, no hay solución hasta KitKat (4.4).
Pero algunos fabricantes de dispositivos como Samsung y Sony han añadido esta opción en su software propietario.

Samsung utiliza su propia versión desollada de Android, llamada TouchWiz, y Sony está usando su propio sistema también.
Tienen una implementación propia de la clase View con banderas SYSTEM_UI_ adicionales que permiten activar una barra de estado transparente en dispositivos SYSTEM_UI_ .

Pero la única manera de probar que esas banderas están existentes y para acceder a ellas es usando Reflection.
Aquí está mi solución:


Resolver el indicador de vista:

 int ResolveTransparentStatusBarFlag() { String[] libs = getPackageManager().getSystemSharedLibraryNames(); String reflect = null; if (libs == null) return 0; for (String lib : libs) { if (lib.equals("touchwiz")) reflect = "SYSTEM_UI_FLAG_TRANSPARENT_BACKGROUND"; else if (lib.startsWith("com.sonyericsson.navigationbar")) reflect = "SYSTEM_UI_FLAG_TRANSPARENT"; } if (reflect == null) return 0; try { Field field = View.class.getField(reflect); if (field.getType() == Integer.TYPE) return field.getInt(null); } catch (Exception e) { } return 0; } 

Aplicarla en la decorView de tu Window (dentro de cualquier actividad):

 void ApplyTransparentStatusBar() { Window window = getWindow(); if (window != null) { View decor = window.getDecorView(); if (decor != null) decor.setSystemUiVisibility(ResolveTransparentStatusBarFlag()); } } 

Creo que hay quizás otros fabricantes de dispositivos que han implementado tal bandera
Pero sólo pude calcular esto dos (porque tengo un Samsung y un dispositivo de Sony)

  • No se puede emitir desde el tipo de origen al tipo de destino (JNIEnv.GetArray <Java.Lang.Object> (pudis.Handle);)
  • Android - Color de fondo de AlertDialog personalizado
  • Tratando de analizar JSON con GSON
  • Cómo hacer que mi sistema de solicitudes
  • Android: Diferencia entre getCount () y getChildCount () en ListView
  • ¿Cómo interactúa Kotlin con Java y JavaScript?
  • ¿Qué significa poner signo "$" antes de un parámetro en Java / Android?
  • Diferencia entre setBackgroundDrawable () y setBackground ()
  • Obtener el nombre de archivo detrás de una url amigable en Java
  • Retrofit 2 - obtiene error-objeto JSON (POJO pocos para la misma solicitud)
  • Modo de lanzamiento "single top" de Android y método onNewIntent
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.