studio ejemplo desplegable android android-toolbar android-coordinatorlayout androiddesignsupport

android - ejemplo - Agregar vistas debajo de la barra de herramientas en CoordinatorLayout



menu desplegable android studio (3)

Tengo el siguiente diseño:

<android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" 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.support.design.widget.AppBarLayout android:id="@+id/appBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.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:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> </android.support.design.widget.AppBarLayout> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.design.widget.CoordinatorLayout>

Agrego Fragment s en FrameLayout , reemplazándolos. Uno de mis Fragment es una lista, que tiene el siguiente diseño:

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

Mi problema aquí es que la barra de herramientas se dibuja sobre la lista . Traté de resolver eso envolviendo el contenido de CoordinatorLayout en LinearLayout , que resolvió el sobregiro, pero de esa manera el comportamiento de desplazamiento de la barra de aplicaciones ya no funciona.

¡Cualquier ayuda es muy apreciada!


A partir de Android Studio 3.4, debe poner esta línea en su diseño que contiene el RecyclerView.

aplicación: layout_behavior = "android.support.design.widget.AppBarLayout $ ScrollingViewBehavior"


Logré arreglar esto agregando:

android: layout_marginTop = "? android: attr / actionBarSize"

al FrameLayout así:

<FrameLayout android:id="@+id/content" android:layout_marginTop="?android:attr/actionBarSize" android:layout_width="match_parent" android:layout_height="match_parent" />


Toma el atributo

app:layout_behavior="@string/appbar_scrolling_view_behavior"

fuera de RecyclerView y FrameLayout en FrameLayout que está intentando mostrar debajo de la Toolbar .

Descubrí que una cosa importante que hace el comportamiento de la vista de desplazamiento es diseñar el componente debajo de la barra de herramientas. Debido a que FrameLayout tiene un descendiente que se desplazará ( RecyclerView ), CoordinatorLayout obtendrá esos eventos de desplazamiento para mover la Toolbar .

Otra cosa a tener en cuenta: ese comportamiento de diseño hará que la altura de FrameLayout se dimensione como si la Toolbar ya estuviera desplazada , y con la Toolbar completamente mostrada, toda la vista simplemente se empuja hacia abajo para que la parte inferior de la vista esté debajo del parte inferior del CoordinatorLayout .

Esta fue una sorpresa para mi. Esperaba que la vista cambiara de tamaño dinámicamente a medida que la barra de herramientas se desplaza hacia arriba y hacia abajo. Entonces, si tiene un componente de desplazamiento con un componente fijo en la parte inferior de su vista, no verá ese componente inferior hasta que haya desplazado completamente la Toolbar .

Entonces, cuando quería anclar un botón en la parte inferior de la interfaz de usuario, lo android:layout_gravity="bottom" colocando el botón en la parte inferior de CoordinatorLayout ( android:layout_gravity="bottom" ) y agregando un margen inferior igual a la altura del botón ver debajo de la barra de herramientas.