transparente studio sea que notificaciones navegacion hacer estado como color cambiar barra java android transparent statusbar

java - studio - Barra de estado transparente-antes de Android 4.4(KitKat)



como hacer que la barra de notificaciones sea transparente sin root (2)

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

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

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

Descarga Go Launcher Ex y pruébalo tú 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 notificaciones)!

Vea estas imágenes de ejemplo:

(Aviso, esto se tomó de mi Stock Galaxy Note 3 con Android 4.3 y Go Launcher Ex .)

(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 habilitada: (quiero lograr esto en dispositivos pre 4.4 (API 19))


Descubrí cómo obtener una barra de estado transparente en 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 agregado esta opción en su software propietario.

Samsung usa su propia versión de Android, llamada TouchWiz, y Sony también usa su propio sistema.
¡Tienen una implementación propia de la clase View con SYSTEM_UI_ adicionales SYSTEM_UI_ que permiten habilitar una barra de estado transparente en dispositivos pre 4.4!

Pero la única forma de demostrar que esas banderas existen y acceder a ellas es mediante Reflexión.
Aquí está mi solución:

Resuelve la bandera 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; }

Aplícalo en el 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 tal vez otros fabricantes de dispositivos que han implementado tal bandera
pero solo pude resolver esto dos (porque tengo un Samsung y un dispositivo Sony)


Utilizar esta. :)

Después de super () y antes de establecer el contenido.

if (Build.VERSION.SDK_INT >= 19) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) { setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true); } if (Build.VERSION.SDK_INT >= 21) { setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false); getWindow().setStatusBarColor(Color.TRANSPARENT); } public static void setWindowFlag(Activity activity, final int bits, boolean state) { Window win = activity.getWindow(); WindowManager.LayoutParams winParams = win.getAttributes(); if (state) { winParams.flags |= bits; } else { winParams.flags &= ~bits; } }