CoordinatorLayout + AppbarLayout + Viewpager no cambia el tamaño del diseño secundario
Tengo un problema con CoordinatorLayout en conjunto con ViewPager y ViewPager:
el diseño no se redimensiona correctamente. Suponga que la altura resuelta incluye la altura de las lengüetas. Así que cuando me desplazo hacia abajo veo esto:
- Circular ViewPager que utiliza FragmentPagerAdapter
- Reposición / margen de ViewPager de Android entre fragmentos de página
- Android RecyclerView que se encuentra en un fragmento que se encuentra en un ViewPager no vuelve a cargar / refrescar las vistas si se alcanza el setOffscreenPageLimit
- Cómo cambiar automáticamente entre las páginas de viewPager
- Objetos de comunicación entre fragmentos múltiples en ViewPager
código del diseño principal:
<?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" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".activities.MainActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <FrameLayout android:id="@+id/root_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <include layout="@layout/content_main" /> </FrameLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" /> </android.support.design.widget.CoordinatorLayout>
código de diseño de la pestaña
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".activities.MainActivity" tools:showIn="@layout/activity_main" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> <FrameLayout android:id="@+id/regularLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </FrameLayout> </LinearLayout>
código de disposición secundaria
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary" android:clickable="false" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_gravity="bottom" android:layout_marginRight="85dp" android:src="@drawable/ic_android" /> </RelativeLayout>
¿Alguna idea? He visto varios puestos pero no pude encontrar el problema, necesito que la altura del niño debe ser screenHeight – actionBarHeight – TabBatHeight
- ¿Cómo manejar correctamente la rotación de la pantalla con un ViewPager y fragmentos anidados?
- Android: ¿Cómo agregar iconos / drawables a la PagerTabStrip de la versión 4 de Android Support Lib?
- Los datos de ViewPager se pierden al volver de la siguiente pantalla
- Crear un ViewPager infinito desplazándose en una dirección
- Cambiar la dirección de desplazamiento de viewPager
- Eliminar un ViewPager mediante programación, ¿cuándo son (o cómo puedo asegurarlo) que se han destruido fragmentos?
- Despliegue de la barra de herramientas con el viewpager
- Deshabilitar animación suave al hacer clic en las pestañas con ViewPagerIndicator
Hay varias cosas a considerar cuando se utiliza CoordinatorLayout + AppBarLayout + ViewPager:
- Coloque ViewPager dentro de
CoordinatorLayout
pero fuera deAppbarLayout
- Sólo
ViewPager
debe establecer su comportamiento enapp:layout_behavior="@string/appbar_scrolling_view_behavior"
put - Colocar
TabLayout
dentro deAppBarLayout
- También puede configurar el indicador de desplazamiento en los hijos directos de
AppBarLayout
- set
android:fitsSystemWindows="true"
enCoordinatorLayout
yAppBarLayout
para que su color deAppBarLayout
pueda aplicarse a la barra de estado
por lo que su disposición final probablemente se vea así (no incluye la distribución de su hijo porque supongo que era su página ViewPager):
<?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" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay" android:fitsSystemWindows="true"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay" /> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" 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="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" /> </android.support.design.widget.CoordinatorLayout>
Y aquí hay varios recursos que definitivamente debe visitar:
- Manejo de desplazamientos con CoordinatorLayout
- Introducción a CoordinatorLayout en android
- Gran proyecto de ejemplo de Chris Banes
Puede utilizar NestedScrollview
en el diseño de su hijo:
<android.support.v4.widget.NestedScrollView android:id="@+id/nest_scrollview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="fill_vertical" android:fillViewport="true" android:fitsSystemWindows="true" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <your layout> </android.support.v4.widget.NestedScrollView
Voy a sugerir un enlace para resolver problemas de diseño:
Ver tutorial
Utilizar el diseño principal como
<android.support.design.widget.CoordinatorLayout android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="@style/ThemeOverlay.AppCompat.Dark" /> <android.support.design.widget.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:tabGravity="fill" android:theme="@style/ThemeOverlay.AppCompat.Dark" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_gravity="bottom|right" android:layout_marginBottom="@dimen/activity_vertical_margin" android:layout_marginRight="@dimen/activity_horizontal_margin" android:src="@drawable/ic_done"/> </android.support.design.widget.CoordinatorLayout>
Tuve un problema similar y la solución perfecta fue añadir
android:layout_marginBottom="?attr/actionBarSize
en disposición con
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Ejemplo:
<?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" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="@dimen/appbar_padding_top" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay"> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="?attr/actionBarSize" 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" app:backgroundTint="@android:color/holo_green_dark" app:srcCompat="@android:drawable/ic_input_add" /> </android.support.design.widget.CoordinatorLayout>
- enviar notificaciones push a varios dispositivos android usando GCM
- Descargar y guardar imágenes con Picasso