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


Android CoordinatorLayout + AppbarLayout + Viewpager siempre desplazándose

Tengo un diseño clásico con una barra de herramientas en la parte superior, un TabLayout debajo de él, y un ViewPager cambiar las pestañas de TabLayout. Cuando el contenido de ViewPager es desplazable, la barra de herramientas debe desplazarse fuera de la vista, y TabLayout debe seguir y pegar cuando llegue a la parte superior.

Todo esto es bueno en mi código actual, excepto, la barra de herramientas es siempre desplazable, independientemente del tamaño del contenido de ViewPager. Vea mi código abajo. ¿Ideas brillantes sobre cómo arreglar esto?

  • Vista web de Android POST
  • ¿Cómo puedo crear un ListView con divisiones de línea punteadas / punteadas en Android?
  • ¿Existe alguna desventaja en el uso de sólo recursos de imágenes de alta resolución para una aplicación de Android?
  • Android buscar toda la lista de contactos (nombre, correo electrónico, teléfono) toma más de un minuto para unos 700 contactos
  • OnKeyDown () o onBackPressed ()
  • Fade in animation while loading image Uso de Picasso
  • <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/primary" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.ToolBar" app:layout_scrollFlags="scroll|enterAlways" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:scrollbars="horizontal" app:tabIndicatorColor="@color/black_text" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/tabs_activity_view_pager" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> 

    EDITAR:

    Puedo ver que la altura del viewPager es la misma que la altura para toda la vista raíz. Esto podría ser intentded, como el appbar_scrolling_view_behavior parece añadir un desplazamiento superior e inferior. Sin embargo, parece extraño, ya que dará lugar a desplazamiento de la barra de herramientas y la barra de tabulación.

  • Nexus 7 no se muestra bajo 'dispositivos adb' con Windows 8 PC
  • Extensión de Android apk
  • ¿Hay una manera de tener un campo de entrada numérico enmascarado?
  • Android Emulator Plugin en Jenkins - ¿Cómo extender el tiempo de espera?
  • Android - QCMediaPlayer mediaplayer NO está presente - no puede reproducir sonido en absoluto
  • Android MediaCodec decodificar marco h264 crudo
  • 7 Solutions collect form web for “Android CoordinatorLayout + AppbarLayout + Viewpager siempre desplazándose”

    Le sugerí probar esta muestra.

    Este es un diseño como su diseño en la muestra.

     <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_done" /> </android.support.design.widget.CoordinatorLayout> 

    Utilizando ListView como los datos de ViewPager? Si es así, necesita listView.setNestedScrollingEnabled(true);

    Intente agregar estos atributos en TabLayout:

      app:layout_collapseMode="pin" app:tabMode="fixed" 

    Y esto en AppBarLayout:

      android:fitsSystemWindows="true" 

    * UPDATE *

    He intentado y esto no es suficiente, ya que la barra de herramientas todavía se puede desplazar. La solución es hacer algo de lógica sobre ViewPager (y su contenido).

    Quitar del archivo de diseño xml el atributo scroll_flag de la barra de herramientas. Tienes que implementar algún código java para comprobar si la altura del contenido ViewPager es> entonces screenHeight – (barra de herramientas + tabBar). Si es true, establezca programáticamente las scroll_flags como esto:

      LayoutParams params; params = // get layout params from your toolbar params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); // set params toolbar.setLayoutParams(params); 

    La altura de ViewPager debe ser match_parent y no wrap_content .

    Sobre la base de otras muestras, mi propio código y el código fuente (algo desordenado) del appbar_scrolling_view_behavior:

      public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { final CoordinatorLayout.Behavior behavior = ((CoordinatorLayout.LayoutParams) dependency.getLayoutParams()).getBehavior(); if (behavior instanceof Behavior) { // Offset the child so that it is below the app-bar (with any overlap) final int appBarOffset = ((Behavior) behavior) .getTopBottomOffsetForScrollingSibling(); final int expandedMax = dependency.getHeight() - mOverlayTop; final int collapsedMin = parent.getHeight() - child.getHeight(); if (mOverlayTop != 0 && dependency instanceof AppBarLayout) { // If we have an overlap top, and the dependency is an AppBarLayout, we control // the offset ourselves based on the appbar's scroll progress. This is so that // the scroll happens sequentially rather than linearly final int scrollRange = ((AppBarLayout) dependency).getTotalScrollRange(); setTopAndBottomOffset(AnimationUtils.lerp(expandedMax, collapsedMin, Math.abs(appBarOffset) / (float) scrollRange)); } else { setTopAndBottomOffset(dependency.getHeight() - mOverlayTop + appBarOffset); } } return false; } 

    Estoy leyendo esto de una manera que explica el problema, pues esto es comportamiento esperado con este código.

    Creo que tenemos que escribir nuestro propio comportamiento de desplazamiento, especialmente para el RecyclerView,

    Acabo de tener el mismo problema. La solución es muy simple, sólo establece la altura de su viewpager

     android:layout_height="wrap_content" 

    La solución simple es: envolver la configuración de appbar y el visor de páginas con un diseño relativo. – dar a su diseño de appbar algunos id – en la página de vista set android: layout_below = "Your_appbar_layout" Por ejemplo:

     <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/your_appBar_ID" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/primary" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.ToolBar" app:layout_scrollFlags="scroll|enterAlways" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:scrollbars="horizontal" app:tabIndicatorColor="@color/black_text" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/tabs_activity_view_pager" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/your_appBar_ID" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </RelativeLayout> 

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