CoordinatorLayout + ActionBar + Fragmentos

Tengo un problema cuando trato de poner fragmentos con CoordinatorLayout + AppBarLayout .

Intento cargar fragmentos diferentes en mi contenido de RelativeLayout que está por debajo de ActionBar con la app:layout_behavior="@string/appbar_scrolling_view_behavior" atributo app:layout_behavior="@string/appbar_scrolling_view_behavior" pero cuando carga un fragmento con dos botones en la parte inferior de la pantalla estos se cargan fuera de la pantalla.

El contenido donde se cargan los fragmentos está fuera de la pantalla y el contenido siempre sale de la parte inferior.

Este es el código de mi main_activity.xml :

 <?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" tools:context=".views.activities.HomeActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_height="wrap_content" android:layout_width="match_parent" 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:popupTheme="@style/AppTheme.PopupOverlay" app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> </android.support.design.widget.AppBarLayout> <!-- Fragment are loaded here --> <RelativeLayout android:id="@+id/containerLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" > </RelativeLayout> </android.support.design.widget.CoordinatorLayout> 

Esta es la captura de pantalla con el contenido de la pantalla.

Introduzca aquí la descripción de la imagen

Esta es la captura de pantalla del fragmento donde tengo el problema: Introduzca aquí la descripción de la imagen

Esta es la captura de pantalla con el fragmento cargado en el emulador. Puede ver cómo no aparecen los botones inferiores. Están ocultos por la barra de navegación:

Introduzca aquí la descripción de la imagen

¿Cómo puedo evitar este problema?

EDITAR

 <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" tools:context=".views.activities.HomeActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_height="wrap_content" android:layout_width="match_parent" 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:popupTheme="@style/AppTheme.PopupOverlay" app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> </android.support.design.widget.AppBarLayout> <!-- Main content --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <FrameLayout android:id="@+id/containerLayout" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </RelativeLayout> </android.support.design.widget.CoordinatorLayout> 

EDIT 2: He intentado poner ToolBar en RelativeLayout, pero funciona parcialmente. Ahora no funciona la animación sobre actionBar cuando se desplaza en recyclerView

 <?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" tools:context=".views.activities.HomeActivity"> <!-- Main content --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay" android:layout_alignParentTop="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:popupTheme="@style/AppTheme.PopupOverlay" app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> </android.support.design.widget.AppBarLayout> <FrameLayout android:id="@+id/containerLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/appBarLayout"> </FrameLayout> </RelativeLayout> </android.support.design.widget.CoordinatorLayout> 

Finalmente me di cuenta de que lo que ocurre con CoordinatorLayout es que la vista debajo de AppBarLayout está dimensionada para la altura como si la Toolbar ya se desplazara fuera del camino. Entonces, cuando la barra de herramientas está en posición normal, la vista simplemente se presiona hacia abajo. No se vuelve a clasificar según el tamaño mientras que el CoordinatorLayout enrolla todo para arriba.

Lo que esto significa es que cualquier vista adjunta a la parte inferior de esa vista se desplazará fuera del camino y no visible o parcialmente visible.

Entonces, ¿cómo arreglar esto? Necesitas hacer dos cosas:

  1. Traiga el AppBarLayout y la Toolbar en su fragmento. El fragmento puede configurar el soporte ActionBar en la Toolbar y hacer todo lo que normalmente se haría en la actividad. Así que ahora su disposición de la actividad podría ser tan simple como esto:

     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/containerLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".views.activities.HomeActivity"/> 
  2. Adjunte los botones a la parte inferior del CoordinatorLayout . CoordinatorLayout es una subclase de FrameLayout para que pueda tener layout_gravity="bottom" en una vista secundaria. Así que ahora su fragmento XML podría tener este aspecto:

     <?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" tools:context=".views.activities.HomeActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_height="wrap_content" android:layout_width="match_parent" 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:popupTheme="@style/AppTheme.PopupOverlay" app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> </android.support.design.widget.AppBarLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <!-- rest of your fragment layout goes here it needs to have a scrolling component --> <!-- you *might* need a spacer in order to see the bottom of your view over the top of the buttons --> <Space android:layout_width="match_parent" android:layout_height="48dp" /> <!-- or you could put a bottom margin on your layout --> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="48dp" android:layout_gravity="bottom"> <!-- your buttons go here --> </LinearLayout> </android.support.design.widget.CoordinatorLayout> 
  • La vista no puede anclarse en el parámetro CoordinatorLayout principal
  • Elementos de menú de la barra de herramientas apretados después de cambiar a la biblioteca de soporte 26 y AppBarActivity a AppCompatActivity
  • CollapsingToolbarLayout con título multilínea
  • Cómo implementar Bottom Sheets usando la nueva biblioteca de soporte de diseño 23.2
  • Cómo configurar la elevación de un AppBarLayout mediante programación en la Biblioteca de soporte de Android v24.0.0?
  • Establecer layout_anchor en tiempo de ejecución en FloatingActionButton
  • ¿Cómo puedo cambiar la altura predeterminada de BottomSheetDialog?
  • Cómo ocultar la barra de herramientas cuando desplazamiento de contenido en android
  • Biblioteca de soporte de Android: getDrawable independiente si vector o no
  • Establecer el estado de BottomSheetDialogFragment a expandido
  • Cómo agregar Snackbars en un BroadcastReceiver?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.