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.
- Espacio en blanco debajo de CoordinatorLayout en DrawerLayout
- Vector Drawables bandera no funciona en la Biblioteca de Soporte 24+
- Cómo inhabilitar el arrastre del usuario en la parte inferior
- Gráfica de Lollipop
- Android BottomSheetDialogFragment no se expande por completo
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.
Esta es la captura de pantalla del fragmento donde tengo el problema:
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:
¿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>
- Biblioteca de compatibilidad de diseño: qué versión usar con SDK v21
- Android KitKat: android.view.InflateException: Error al inflar la clase android.support.design.widget.NavigationView
- Cómo crear AppBarLayout que se superpone contenido de CoordinatorLayout
- Cambiar los iconos TabLayout a la izquierda, arriba, derecha o abajo en com.android.support:design:23.1.0
- Uso de BottomSheetBehavior con un CoordinatorLayout interno
- CollapsingToolbarLayout título de estilo
- Android AppCompat 23.1.0 Tinte Compuesto Dibujable
- RecyclerView en CoordinatorLayout pierde su relleno superior después de cambios de orientación
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:
-
Traiga el
AppBarLayout
y laToolbar
en su fragmento. El fragmento puede configurar el soporteActionBar
en laToolbar
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"/>
-
Adjunte los botones a la parte inferior del
CoordinatorLayout
.CoordinatorLayout
es una subclase deFrameLayout
para que pueda tenerlayout_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>
- Primera autentificación para obtener el token
- Barra de herramientas, onCreateOptionsMenu () devuelve falso, 'arriba' la navegación no funciona