Buscar..


Introducción

El CoordinatorLayout es un FrameLayout de gran potencia y el objetivo de este ViewGroup es coordinar las vistas que están dentro de él.

El atractivo principal de CoordinatorLayout es su capacidad para coordinar las animaciones y transiciones de las vistas dentro del propio archivo XML.

CoordinatorLayout está destinado a dos casos de uso principales:

: Como una decoración de aplicación de nivel superior o diseño de cromo

: Como contenedor para una interacción específica con una o más vistas secundarias

Observaciones

El CoordinatorLayout es un contenedor que extiende el FrameLayout .
Al adjuntar un comportamiento de CoordinatorLayout.Behavior a un hijo directo de CoordinatorLayout , podrá interceptar eventos táctiles, inserciones de ventanas, medidas, diseño y desplazamiento anidado.

Al especificar Behaviors para vistas secundarias de un CoordinatorLayout , puede proporcionar muchas interacciones diferentes dentro de un solo padre y esas vistas también pueden interactuar entre sí. Las clases de vista pueden especificar un comportamiento predeterminado cuando se usan como elementos secundarios de un CoordinatorLayout mediante la anotación DefaultBehavior .

Creando un comportamiento simple

Para crear un Behavior simplemente extienda la clase CoordinatorLayout.Behavior .

Extender el CoordinatorLayout.Behavior

Ejemplo:

public class MyBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {

      /**
       * Default constructor.
       */
      public MyBehavior() {
      }
    
      /**
       * Default constructor for inflating a MyBehavior from layout.
       *
       * @param context The {@link Context}.
       * @param attrs The {@link AttributeSet}.
       */
      public MyBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
      }
}

Este comportamiento debe adjuntarse a una vista secundaria de un CoordinatorLayout a ser llamado.

Adjuntar un comportamiento programáticamente

MyBehavior myBehavior = new MyBehavior();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
params.setBehavior(myBehavior);

Adjuntar un comportamiento en XML

Puede usar el atributo layout_behavior para adjuntar el comportamiento en XML:

<View
  android:layout_height="...."
  android:layout_width="...."
  app:layout_behavior=".MyBehavior" />

Adjuntar un comportamiento automáticamente

Si está trabajando con una vista personalizada, puede adjuntar el comportamiento utilizando la anotación @CoordinatorLayout.DefaultBehavior :

@CoordinatorLayout.DefaultBehavior(MyBehavior.class)
public class MyView extends ..... {

}

Usando el comportamiento de SwipeDismiss

SwipeDismissBehavior funciona en cualquier Vista e implementa la funcionalidad de deslizar para descartar en nuestros diseños con un CoordinatorLayout .

Solo usa:

        final SwipeDismissBehavior<MyView> swipe = new SwipeDismissBehavior();

        //Sets the swipe direction for this behavior.
        swipe.setSwipeDirection(
            SwipeDismissBehavior.SWIPE_DIRECTION_ANY);

        //Set the listener to be used when a dismiss event occurs
        swipe.setListener(
            new SwipeDismissBehavior.OnDismissListener() {
            @Override public void onDismiss(View view) {
                //......
            }

            @Override 
            public void onDragStateChanged(int state) {
                //......
            }
        });

        //Attach the SwipeDismissBehavior to a view
        LayoutParams coordinatorParams = 
            (LayoutParams) mView.getLayoutParams();    
        coordinatorParams.setBehavior(swipe);

Crear dependencias entre vistas

Puede usar CoordinatorLayout.Behavior para crear dependencias entre vistas. Puede anclar una View a otra View mediante:

Por ejemplo, para crear un Behavior para mover un ImageView cuando se mueve otro (barra de herramientas de ejemplo), realice los siguientes pasos:

  • Crea el comportamiento personalizado :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • Reemplace el método layoutDependsOn devolviendo true . Este método se llama cada vez que se produce un cambio en el diseño:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • Cuando el método layoutDependsOn devuelve true , se llama al método onDependentViewChanged :

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child, View dependency) {
        // Implement here animations, translations, or movements; always related to the provided dependency.
        float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); 
        child.setTranslationY(translationY);
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow