Añadir vistas debajo de la barra de herramientas en CoordinatorLayout
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 el FrameLayout
, reemplazándolos. Una de mis Fragment
s 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 del CoordinatorLayout
en un LinearLayout
, que resolvió el sobregiro, pero de esa manera el comportamiento de desplazamiento de appbar ya no funciona.
Cualquier ayuda es muy apreciada!
2 answers
Tome el atributo
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Fuera del RecyclerView
y póngalo en el FrameLayout
que está tratando de mostrar debajo del Toolbar
.
He encontrado que una cosa importante que hace el comportamiento de vista de desplazamiento es diseñar el componente debajo de la barra de herramientas. Debido a que el FrameLayout
tiene un descendiente que se desplazará (RecyclerView
), el CoordinatorLayout
obtendrá esos eventos de desplazamiento para mover el Toolbar
.
Otra cosa a tener en cuenta: Ese comportamiento de diseño hará que la altura FrameLayout
se dimensione como si el Toolbar
ya estuviera desplazado, y con el Toolbar
completamente mostrado, la vista completa simplemente se empuja hacia abajo de modo que la parte inferior de la vista esté debajo de la parte inferior del CoordinatorLayout
.
Esto fue una sorpresa para mí. Esperaba que la vista se redimensionara dinámicamente a medida que la barra de herramientas se desplaza hacia arriba y hacia abajo. Por lo tanto, 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 el Toolbar
.
Así que cuando quería anclar un botón en la parte inferior de la interfaz de usuario, trabajé alrededor de esto poniendo el botón en la parte inferior de la CoordinatorLayout
(android:layout_gravity="bottom"
) y agregar un margen inferior igual a la altura del botón a la vista debajo de la barra de herramientas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-31 13:29:02
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"
/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-04 15:36:14