studio linearlayout layout_behavior error coordinatorlayout constraintlayout and android android-layout android-design-library android-coordinatorlayout

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);