android - linearlayout - Ocultar AppBarLayout y dar su espacio a la vista restante
layout_behavior android studio (2)
Tengo un diseño bastante estándar utilizando las nuevas bibliotecas de diseño:
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView/>
<Toolbar/>
</CollapsingToolbarLayout>
</AppBarLayout>
<android.support.v4.widget.NestedScrollView/> <!-- content here -->
Lo que estoy tratando de hacer es ocultar completamente todo el AppBarLayout
programación, para deshacerme temporalmente de la Toolbar
de Toolbar
y su característica de colapso.
Así que estoy llamando a esto:
private void disableCollapsing() {
AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
p.setScrollFlags(0);
collapsingToolbarLayout.setLayoutParams(p);
}
para deshabilitar el comportamiento de colapso (funciona bien), y finalmente esto:
@Override
public void hide() {
final AppBarLayout layout = (AppBarLayout) findViewById(R.id.appbar);
layout.animate().translationY(-layout.getHeight())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
layout.setVisibility(View.GONE);
}
}).start();
}
Hago que AppBarLayout se traduzca en la parte superior (funciona sin problemas), y al final del conjunto de animación hay visibilidad de View.GONE
.
Problema
Al final de la animación, no importa que también establezca la visibilidad en GONE, no puedo obtener el espacio que anteriormente ocupaba AppBarLayout
. Mi NestedScrollView permanece confinado en la mitad inferior de la pantalla, como si el AppBarLayout todavía estuviera allí (que no lo está). ¿Cómo puedo arreglarlo?
Antes de esconderse:
Después de esconderse (AppBar traducido a la parte superior):
Como puede ver, el espacio superior está vacío e inalcanzable. La vista de desplazamiento se desplaza dentro de los márgenes que tenía antes, como si el cambio de visibilidad no fuera medido por el CoordinatorLayout
.
He intentado llamar
coordinator.requestLayout()
, sin éxito.También intenté configurar el AppBarLayout como una
app:anchor
para mi NestedScrollView, pero eso me complica mucho: la vista de desplazamiento termina por ocupar toda la pantalla incluso antes de ocultarla.Estaba pensando en un
Behavior
personalizado que se configuraría en la vista de desplazamiento al entrar en este modo oculto de la Barra de aplicaciones , pero no puedo comenzar con eso.
Los siguientes trabajos también
appBarLayout.setExpanded(false, false);
appBarLayout.setVisibility(View.GONE);
Sí, esto parece un error. Resolví este problema para mi aplicación al establecer la altura de la barra de aplicaciones en 0:
android.support.design.widget.AppBarLayout appbar = (android.support.design.widget.AppBarLayout) findViewById(R.id.appbar);
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams();
lp.height = 0;
appbar.setLayoutParams(lp);