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
- El uso de SearchView con AppCompatActivity genera fallas en la interfaz de usuario
- Error en el archivo styles_base.xml - aplicación android - No se encontró ningún recurso que coincida con el nombre dado 'android: Widget.Material.ActionButton'
- AppcompatActivity Error con el estudio de Android
- No se puede obtener AppCompat ActionBar / Toolbar para convertirse en una superposición
- Acción no mostrada con AppCompat
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!
- cómo cambiar el color de texto del elemento de menú de la barra de acciones en el diseño del material
- Animación ActionBarDrawerToggle
- Cómo implementar DrawerArrowToggle de Android appcompat v7 21 library
- Android L ActionBarActivity con Feinstein SldingMenu y AppCompat v21 se corta en la parte inferior de la pantalla
- No se puede escribir el archivo de caché jarlist mientras se crea el proyecto android
- No se encontró ningún recurso que coincida con el nombre dado: attr 'android: actionModeShareDrawable' appcompat-v7: 21.0.0 con compileSdkVersion 21
- SwitchCompat en barra de acción, con fragmento
- Error al agregar el botón de transmisión de Media Router
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.
- Gradle lanzando error en los números de versión en cordova config.xml
- Envío de un mensaje sencillo de Servicio a Actividad