La barra de herramientas de Android se vuelve translúcida al navegar hacia atrás

Ejemplo de proyecto que ilustra el problema

https://github.com/justincpollard/TransparentToolbarExample

Fondo

Tenemos una combinación Activity / Fragment para mostrar contenido en nuestra aplicación. Nuestros usuarios son capaces de navegar entre piezas de contenido, que esencialmente pone estos combos de Activity / Fragment uno encima del otro. Tocar el botón de retroceso del hardware o el botón de arriba simplemente revela la parte anterior del contenido.

Las siguientes referencias al proyecto de ejemplo

Cuando un usuario está viendo un pedazo de contenido, la barra de herramientas ( android.support.v7.widget.Toolbar ) y su texto comienzan a ser transparentes. Logramos eso así:

 public void onCreateView(...) { ... toolbar = (Toolbar) v.findViewById(R.id.toolbar); ... actionBarDrawable = toolbar.getBackground(); actionBarDrawable.setAlpha(0); actionBarText.setTextColor(Color.argb(0, 255, 255, 255)); ... } 

Si el usuario se desplaza más allá de un determinado punto de la página, por ejemplo, se desplaza una cantidad igual a la altura de la barra de herramientas, animamos el alfa del fondo de la barra de herramientas y el texto de 0 a 255, revelando esencialmente la barra de herramientas:

 private void animateToolbar(final int start, final int finish) { toolbarIsAnimating = true; ValueAnimator animator = ValueAnimator.ofInt(start, finish); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { toolbarAlpha = (int) animation.getAnimatedValue(); actionBarDrawable.setAlpha(toolbarAlpha); actionBarText.setTextColor(Color.argb(toolbarAlpha, 255, 255, 255)); if(toolbarAlpha == finish) { toolbarIsAnimating = false; } } }); animator.setInterpolator(new DecelerateInterpolator()); animator.setDuration(300); animator.start(); } 

Problema

Cuando el usuario navega desde el contenido original hasta otro contenido DESPUÉS de desplazarse más allá del punto de umbral (es decir, se ha animado el fondo de la barra de herramientas), al pulsar hacia atrás / arriba se despliega el conjunto Activity / Fragment original pero la barra de herramientas está completamente transparente.

Para ilustrar el proyecto de ejemplo, compile y abra la aplicación, desplácese hasta la parte inferior de la página y presione el botón "MÁS CONTENIDO". Una vez que haya navegado hasta la segunda Activity , presione el botón Atrás. Observe que la barra de herramientas es transparente, aunque el texto del título sigue siendo visible.

Alguien ha visto este problema antes? Sólo lo he visto en Android 5. +, pero esto se convertirá en más de un problema como la adopción de 5. + sigue creciendo.

¡Gracias por tu ayuda!

Encontrado la solución:

En lugar de

 toolbar.getBackground().setAlpha(); 

Necesitas usar

 toolbar.getBackground().mutate().setAlpha(); 

Aparentemente, los elementos desplegables están compartiendo estados por defecto entre ellos, llamando a mutate () hará que este estado particular no pueda ser distribuido.

Divertido, @Gricher y me encontré con respuestas justo en el mismo tiempo. No he revisado su respuesta, pero aquí está la mía:

No hay necesidad de tratar con Drawable devuelto de toolbar.getBackground() . Puede lograr lo mismo utilizando una técnica similar a la que he usado para cambiar el color del texto de la barra de acción.

Utilice esto para el método animateToolbar() :

 private void animateToolbar(final int start, final int finish) { toolbarIsAnimating = true; ValueAnimator animator = ValueAnimator.ofInt(start, finish); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { toolbarAlpha = (int) animation.getAnimatedValue(); toolbar.setBackgroundColor(Color.argb(toolbarAlpha, 56, 204, 255)); actionBarText.setTextColor(Color.argb(toolbarAlpha, 255, 255, 255)); if(toolbarAlpha == finish) { toolbarIsAnimating = false; } } }); animator.setInterpolator(new DecelerateInterpolator()); animator.setDuration(300); animator.start(); } 

La clave es esta:

toolbar.setBackgroundColor(Color.argb(toolbarAlpha, 56, 204, 255));

Funciona en Android 6. + (tal como está hoy) también.

  • Cajón de navegación de derecha a izquierda con v7 ActionBarDrawerToggle
  • Android appcompat v7: no se puede encontrar el recurso actionModeShareDrawable
  • El botón Inicio de la barra de herramientas no funciona si no hay ningún menú de opciones
  • La vista de búsqueda no funciona desde la aplicación compat
  • GetActionBar de Fragment con AppCompatLibrary
  • Color de fondo predeterminado de Theme.AppCompat.Light android
  • ViewPager en CoordinatorLayout se contrae inesperadamente
  • Cómo utilizar y estilo nuevo AlertDialog de appCompat 22.1 y superior
  • Barra de herramientas y TabLayout no son visibles en dispositivos Android 4.4
  • Android Studio - Valores de error de compilación de Appcompat-v23 / styles_bases.xml
  • Mi FloatingActionButton tiene algunas líneas extrañas que salen de él en 4.4 y menor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.