Recherche…


Introduction

Le CoordinatorLayout est un FrameLayout extrêmement puissant et l'objectif de ce groupe de vues est de coordonner les vues qu'il contient.

Le principal atout de CoordinatorLayout est sa capacité à coordonner les animations et les transitions des vues dans le fichier XML lui-même.

CoordinatorLayout est destiné à deux cas d'utilisation principaux:

: Comme un décor d'application de haut niveau ou une disposition chromée

: En tant que conteneur pour une interaction spécifique avec une ou plusieurs vues enfants

Remarques

Le CoordinatorLayout est un conteneur qui étend le FrameLayout .
En attachant un CoordinatorLayout.Behavior à un enfant direct de CoordinatorLayout , vous pouvez intercepter les événements tactiles, les encarts de fenêtre, les mesures, la mise en page et le défilement imbriqué.

En spécifiant les Behaviors pour les vues enfant d'un CoordinatorLayout vous pouvez fournir de nombreuses interactions différentes au sein d'un seul parent et ces vues peuvent également interagir les unes avec les autres. Les classes de vue peuvent spécifier un comportement par défaut lorsqu'elles sont utilisées comme enfant d'un CoordinatorLayout à l'aide de l'annotation DefaultBehavior .

Créer un comportement simple

Pour créer un Behavior simplement la classe CoordinatorLayout.Behavior .

Prolongez le CoordinatorLayout.Behavior

Exemple:

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);
      }
}

Ce comportement doit être associé à un enfant. Vue d'un CoordinatorLayout à appeler.

Attacher un comportement par programmation

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

Joindre un comportement en XML

Vous pouvez utiliser l'attribut layout_behavior pour associer le comportement en XML:

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

Joindre un comportement automatiquement

Si vous travaillez avec une vue personnalisée, vous pouvez attacher le comportement à l'aide de l'annotation @CoordinatorLayout.DefaultBehavior :

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

}

Utiliser le SwipeDismissBehavior

SwipeDismissBehavior fonctionne sur n'importe quelle vue et implémente les fonctionnalités de swipe à supprimer dans nos mises en page avec un CoordinatorLayout .

Utilisez simplement:

        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);

Créer des dépendances entre les vues

Vous pouvez utiliser le CoordinatorLayout.Behavior pour créer des dépendances entre les vues. Vous pouvez ancrer une View à une autre View par:

Par exemple, pour créer un Behavior permettant de déplacer un ImageView lorsqu'un autre est déplacé (exemple, barre d'outils), procédez comme suit:

  • Créez le comportement personnalisé :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • Remplacez la méthode layoutDependsOn renvoyant true . Cette méthode est appelée chaque fois qu'une modification est apportée à la mise en page:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • Chaque fois que la méthode layoutDependsOn renvoie true la méthode onDependentViewChanged est appelée:

    @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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow