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.
- ¿Barras de acción en la parte inferior?
- Ayuda para obtener String Array desde el archivo arrays.xml
- Repositorios de compilación de Android: jcenter VS mavencentral
- Deshabilitar haga clic en RecyclerView dentro de un SwipeRefreshLayout
- Androide. El ajuste del margen izquierdo / derecho no funciona
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:
Con la barra de estado transparente activada: (Quiero lograr esto en los dispositivos pre 4.4 (API 19)
- No se puede cerrar ChunkedInputStream rápidamente en Android 4.4 KitKat
- Cómo consultar el SpeechRecognizer predeterminado
- Mockito - burlándose de una interfaz - lanzando NullPointerException
- Envío de datos POST en Android
- ¿Qué es mejor usar varios AsyncTask o HandlerThread (hilo de la tubería)?
- Uso de Google Analytics para rastrear fragmentos
- Conversión de mapa de bits Java a matriz de bytes
- Problema de compilación en Android Studio con Google Play Services
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)
- Cómo agregar un proyecto de Android Studio a GitHub
- Firefox para Android no inicia la aplicación cuando se hace clic en el enlace