Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo dejar que sólo fragmentos específicos desplazarse dentro de un ViewPager de CoordinatorLayout?

Fondo

Tengo un viewPager, con 3 fragmentos y pestañas para ellos. Cada fragmento tiene una fase de introducción (propia) que no tiene ningún contenido desplazable.

Después de salir de la fase de introducción, hay un recyclerView que el usuario puede desplazarse adentro.

El problema

Necesito usar la nueva biblioteca de diseño, de modo que al desplazarse (sólo a través de recyclerView), se oculte la barra de acción y dejar que las pestañas todavía se muestran.

Cuando el usuario va a un fragmento que aún no tiene un contenido desplazable, la barra de acción debería volver a aparecer, similar a lo que tiene "Google Play Kiosco" . De hecho, incluso estaría feliz de tener lo que tienen: tan pronto como empiece a deslizar izquierda / derecha, volver a mostrar la barra de acción.

La cosa es, si sigo las pautas y las muestras, tengo 2 ediciones:

  1. La fase no desplazable de los fragmentos se trunca en la parte inferior, como si pudiera desplazarse.

  2. No puedo encontrar cómo volver a mostrar la barra de acción, y hacerla atascada allí hasta que cambie a un contenido desplazable (ya sea cambiando a otro fragmento, o cuando el contenido del fragmento actual cambia a un contenido desplazable).

Lo que he intentado

Este es un fragmento corto del archivo XML de la presentación actual de la actividad:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.CoordinatorLayout android:id="@+id/activity_main__coordinator" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/activity_main__appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:theme="?attr/actionBarTheme"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:layoutDirection="ltr" android:theme="?attr/actionBarTheme" app:layout_scrollFlags="scroll|enterAlways|snap" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" tools:ignore="UnusedAttribute"/> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:tabGravity="fill" app:tabIndicatorColor="#FFffffff" app:tabIndicatorHeight="3dp"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> <include layout="@layout/fabs"/> </android.support.design.widget.CoordinatorLayout> <include layout="@layout/sliding_menu" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left"/> </android.support.v4.widget.DrawerLayout> 

Los fragmentos tienen un diseño de un ViewAnimator que sólo cambia entre fases, mientras que uno de ellos es el contenido no desplazable, y el otro es el RecyclerView.

He intentado agregar un NestedScrollView / ScrollView el contenido no desplazable, y forzarlo a llenarse, usando android: fillViewport = "true", pero no funcionó. Para ScrollView ni siquiera permitía desplazarse.

EDIT: Otra cosa que he intentado es usar addOnPageChangeListener en el viewPager, para que en onPageSelected podría establecer los indicadores para la barra de herramientas:

 AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams(); params.setScrollFlags(!needScrolling? 0 : LayoutParams.SCROLL_FLAG_SNAP | LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | LayoutParams.SCROLL_FLAG_SCROLL); 

Funciona, pero también tiene problemas:

  1. Mientras se desplaza horizontalmente, puedo ver el contenido del fragmento no desplazable truncado, y al ir al nuevo fragmento (deje de tocar la pantalla, para dejarlo encajar al fragmento), sólo entonces se encoge su tamaño para ajustarse a la correcta espacio.
  2. La barra de herramientas no se vuelve a mostrar.
  3. Si la barra de herramientas está oculta debido a desplazamiento en otro fragmento, y ahora estoy en el fragmento no desplazable, en realidad tiene menos espacio para rellenar de lo que se supone, por lo que tiene espacio vacío en la parte inferior.

EDIT: una solución es agregar una vista vacía de la misma altura de la barra de acciones (layout_height = "? ActionBarSize") en la parte inferior del contenido de los fragmentos no desplazables. Sin embargo, cuando la barra de acción está oculta, puedo ver la vista, por lo que hay espacio vacío. Todavía necesito saber cómo volver a mostrar la barra de acciones en este caso.

La pregunta

¿Cómo puedo establecer un comportamiento diferente para la barra de herramientas, para que se vuelva a mostrar y pegado en ciertos estados, pero se puede desplazar sólo cuando hay un RecyclerView se muestra en el fragmento actual?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.