¿Qué es CoordinatorLayout?

96

Acabo de echar un vistazo a la aplicación de demostración de la nueva biblioteca de diseño de soporte de Android. Es proporcionado por Chris Banes en github . A lo largo de la aplicación, CoordinatorLayoutse usa mucho. Además, muchas de las clases de biblioteca de diseño de soporte tales como FloatingActionButton, SnackBar, AppBarLayoutetc. comporta de manera diferente cuando dentro usado CoordinatorLayout.

¿Alguien puede arrojar algo de luz sobre qué es CoordinatorLayouty en qué se diferencia de otros ViewGroups en Android, o al menos proporcionar el camino correcto hacia el aprendizaje CoordinatorLayout?

jimmy0251
fuente
5
android-developers.blogspot.com/2015/05/… También tiene una descripción extensa, aunque confusa, en JavaDocs (actualmente no está disponible en forma de enlace directo, pero puede descargar un ZIP desde developer.android.com/preview /download.html ).
CommonsWare
1
¿Cuál es realmente la ventaja de usarlo CordinatorLayout?. ¿Qué ventaja tiene sobre los demás?
eRaisedToX

Respuestas:

43

Aquí está lo que busca.

de documentos

la biblioteca de diseño presenta CoordinatorLayoutun diseño que proporciona un nivel adicional de control sobre los eventos táctiles entre las vistas secundarias, algo que muchos de los componentes de la biblioteca de diseño aprovechan.

https://android-developers.googleblog.com/2015/05/android-design-support-library.html

en este enlace verá los videos de demostración de todas las vistas mencionadas anteriormente.

espero que esto ayude :)

Qadir Hussain
fuente
4
el enlace está roto.
Yogesh Seralia
40

¿Qué es un CoordinatorLayout? No dejes que el nombre elegante te engañe, no es más que un FrameLayout con esteroides

Para comprender mejor qué CoordinatorLayoutes / hace, primero debe comprender / tener en cuenta lo que significa Coordinar.

Si buscas en Google la palabra

Coordinar

Esto es lo que obtienes:

ingrese la descripción de la imagen aquí

Creo que estas definiciones ayudan a describir lo que hace un CoordinatorLayout por sí solo y cómo se comportan las vistas dentro de él.

Un CoordinatorLayout (un ViewGroup) trae los diferentes elementos (vistas secundarias) de una (̶a̶ ̶c̶o̶m̶p̶l̶e̶x̶ ̶a̶c̶t̶i̶v̶i̶t̶y̶ ̶o̶r̶ ̶a̶n̶ ̶o̶r̶g̶i ̶n̶i̶i̶a̶t̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶

Con la ayuda de un CoordinatorLayout, las vistas de los niños funcionan juntas de manera armoniosa para implementar comportamientos asombrosos como

arrastres, golpes, lanzamientos o cualquier otro gesto.

Las vistas dentro de un CoordinatorLayout negocian con otros para trabajar juntos de manera efectiva al especificar estos comportamientos

Un CoordinatorLayout es una característica genial de Material Design que ayuda a crear diseños atractivos y armonizados.

Todo lo que tiene que hacer es envolver las vistas de su hijo dentro del CoordinatorLayout.

<?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:layout_width="match_parent"
 android:layout_height="match_parent"
 android:fitsSystemWindows="true"
 tools:context="com.byte64.coordinatorlayoutexample.ScollingActivity">

 <android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/app_bar_height"
    android:fitsSystemWindows="true"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">



        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_scolling" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/fab_margin"
    app:layout_anchor="@id/app_bar"
    app:layout_anchorGravity="bottom|end"
    app:srcCompat="@android:drawable/ic_dialog_email" />

 </android.support.design.widget.CoordinatorLayout>

y content_scrolling:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView     
 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="com.byte64.coordinatorlayoutexample.ScollingActivity"
 tools:showIn="@layout/activity_scolling">

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/text_margin"
    android:text="@string/large_text" />

 </android.support.v4.widget.NestedScrollView>

Lo que esto nos da es un diseño que se puede desplazar para contraer la barra de herramientas y ocultar el FloatingActionButton

Abierto:

ingrese la descripción de la imagen aquí

Cerrado:

ingrese la descripción de la imagen aquí

Ojonugwa Jude Ochalifu
fuente
2
¿No tendría el diseño relativo o de restricción también una relación entre las vistas? Si uno se mueve hacia arriba, la vista relacionada se mueve hacia arriba. ¿Por qué el coordinador es mejor?
Serpiente
1
@Snake 1. El CoordinatorLayout ayuda a organizar una vista sobre otra vista, algo que ni un ConstraintLayout ni un RelativeLayout pueden hacer. 2. También ayuda a animar la transición de vistas. Un buen ejemplo es la transición de la actividad / fragmento "Ver contacto" en la aplicación Whatsapp.
Felix Favor Chinemerem
13

Un punto adicional a tener en cuenta. Dado que OP preguntó específicamente

Además, muchas de las clases de biblioteca de diseño de soporte como FloatingActionButton, SnackBar, AppBarLayout, etc. se comportan de manera diferente cuando se usan dentro de CoordinatorLayout.

Y supongo que es por esto.

CoordinatorLayout es un FrameLayout superpoderoso.

FAB Button, SnackBar funciona con el concepto de FrameLayout, y dado que CoordinatorLayout tiene la funcionalidad de FrameLayout, puede hacer que otras vistas se comporten de manera diferente.

capt.swag
fuente
9

CoordinatorLayout es esencialmente el diseño del marco con muchas capacidades que es obvio por el nombre, automatiza la coordinación entre sus hijos y ayuda a construir hermosas vistas. Su implementación se puede ver en Google Play Store App. Cómo la barra de herramientas se colapsa y cambia de color.

Lo mejor de CoordinatorLayout es el comportamiento que le damos a sus descendientes directos o indirectos. Debes haber visto mientras te desplazas toda la IU se pone en movimiento. Es muy probable que el comportamiento esté haciendo su magia.

Uzair
fuente
7

Para dar una instantánea rápida de lo que es útil en la documentación de Android :

Utilice CoordinatorLayout para controlar simplemente el comportamiento relacional de sus vistas,

Por ejemplo, si desea que su barra de herramientas se contraiga u oculte. Google lo hizo realmente fácil al presentar AppBarLayout & CollapsingToolbarLayout, que funcionan mejor bajo un CoordinatorLayout.

La otra situación más utilizada es cuando desea que un FloatingActionButton se adhiera a la parte inferior de su CollapsingToolbar y se mueva con él, colocándolos debajo de un coordinatorLayout y utilícelos app:layout_anchor="@id/YourAppBarId"para el pegamento (!) Y app:layout_anchorGravity="bottom|end"como posición será suficiente para que vea el obra de magia!

Al usar este diseño como contexto, las vistas secundarias tendrán una mejor colaboración y se comportarán de una manera inteligente porque se conocerán entre sí a través del contexto CoordinatorLayout, esto significa que sus Botones FloatingAction ya no se superpondrán con un snackBar, etc.

Estos fueron solo un resumen rápido de las partes más útiles, por lo que si desea ahorrar más tiempo animando su aplicación, valdrá la pena profundizar un poco más en el tema.

ver la plantilla de actividad de la vista de desplazamiento de Google

AmiNadimi
fuente
1

Una cosa que es importante tener en cuenta es que CoordinatorLayout no tiene ningún conocimiento innato del trabajo FloatingActionButton o AppBarLayout; solo proporciona una API adicional en forma de Coordinator.Behavior, que permite que las vistas de los niños controlen mejor los eventos táctiles y los gestos así como declarar dependencias entre sí y recibir devoluciones de llamada a través de onDependentViewChanged ().

Las vistas pueden declarar un comportamiento predeterminado mediante el uso de la anotación CoordinatorLayout.DefaultBehavior (YourView.Behavior.class), o establecerlo en los archivos de diseño con la aplicación: layout_behavior = "com.example.app.YourView $ Behavior" atributo. Este marco hace posible que cualquier vista se integre con CoordinatorLayout.

¡Disponible ahora! La biblioteca de diseño está disponible ahora, así que asegúrese de actualizar el repositorio de soporte de Android en el SDK Manager. A continuación, puede comenzar a utilizar la biblioteca de diseño con una única dependencia nueva:

compile 'com.android.support:design:22.2.0' Tenga en cuenta que, dado que la biblioteca de diseño depende de las bibliotecas de soporte de Support v4 y AppCompat, estas se incluirán automáticamente cuando agregue la dependencia de la biblioteca de diseño. También nos encargamos de que estos nuevos widgets se puedan usar en la vista Diseño del editor de diseño de Android Studio (encuéntrelos en CustomView), lo que le brinda una manera más fácil de obtener una vista previa de algunos de estos nuevos componentes.

La biblioteca de diseño, AppCompat y toda la biblioteca de soporte de Android son herramientas importantes para proporcionar los componentes básicos necesarios para crear una aplicación de Android moderna y de excelente apariencia sin construir todo desde cero.

Qaim Raza
fuente
0

El CoordinatorLayoutes un superpoderoso FrameLayout.

De forma predeterminada, si agrega varios hijos a FrameLayout, se superpondrán entre sí. A FrameLayoutdebe usarse con mayor frecuencia para mantener una vista secundaria única. El principal atractivo del CoordinatorLayoutes su capacidad para coordinar las animaciones y transiciones de las vistas dentro de él. Usando solo XML, puede describir un diseño donde un FAB se mueve fuera del camino de una Snackbar entrante, por ejemplo, o tiene un FAB (o cualquier otra Vista en realidad) que aparentemente está adjunto a otro widget y se mueve en la pantalla con el widget.

Aquí está el tutorial de la fuente principal .

Gk Mohammad Emon
fuente