android android-navigation-bar

android - ¿Cómo cambia el fondo de la barra de navegación(no solo el color), incluso cuando no está en primer plano?



android-navigation-bar (1)

La configuración básica es bastante fácil. Convertirlo en una aplicación llevará algo de trabajo.

Deberá usar las API de accesibilidad , junto con WindowManager#addView(...) .

¿Es un hack?

No puedo decir que me guste la idea, pero no es exactamente un hack.

¿Cómo cambian, no solo el color de la barra de navegación, sino que incluso configuran una imagen de fondo (incluida la dinámica, para el estado de la batería)?

Ya que estamos agregando una View (o ViewGroup ), tenemos mucho más control.

¿También es posible cambiar otras barras del sistema, como la barra de notificaciones?

Voy a ver en esto.

¿Cómo verifica qué aplicación está en primer plano (necesaria para decidir cuándo cambiar el color, según la aplicación actual, probablemente)?

Puede usar las API de accesibilidad para escuchar los cambios en el nivel de la Window ( AccessibilityEvent ); esto le dará el packageName . Úsalo como quieras.

Te daré algunos consejos:

Manifiesto

  • permiso: SYSTEM_ALERT_WINDOW
  • declaración de servicio de accesibilidad: <service />

Servicio de accesibilidad

  • Infle, inicialice y agregue su diseño en: onServiceConnected()
  • TYPE_SYSTEM_OVERLAY con WindowManager#addView(...)
  • Escuche a AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
  • Override onAccessibilityEvent(AccessibilityEvent) ; packageName estará disponible aquí

Salir

Un proyecto de ejemplo está alojado aquí: Link .

Fondo

De alguna manera, la aplicación " Navbar Apps " permite personalizar el fondo de la barra de navegación, incluso si no está en primer plano, e incluso no es solo un color simple.

El problema

Pensé que solo es posible cambiar su color, y solo cuando la aplicación está en primer plano ...

Lo he visto en algunas roms personalizadas, incluso con efectos especiales cuando se reproduce música, pero no sabía que era posible personalizarlo incluso sin una rom (o raíz) personalizada.

Las preguntas

  1. ¿Es un hack? ¿Cómo cambian, no solo el color de la barra de navegación, sino que incluso configuran una imagen de fondo (incluida la dinámica, para el estado de la batería)?

  2. ¿También es posible cambiar otras barras del sistema, como la barra de notificaciones?

  3. ¿Cómo verifica qué aplicación está en primer plano (necesaria para decidir cuándo cambiar el color, según la aplicación actual, probablemente)? ¿Es una nueva API? Pensé que la API para obtener la actividad de primer plano quedó obsoleta y ahora no ayuda de ninguna manera ...