Suche…


Einführung

Das CoordinatorLayout ist ein FrameLayout mit Super-Power. Ziel dieser ViewGroup ist es, die darin enthaltenen Ansichten zu koordinieren.

Der Hauptanreiz des CoordinatorLayout ist seine Fähigkeit, die Animationen und Übergänge der Ansichten in der XML-Datei selbst zu koordinieren.

CoordinatorLayout ist für zwei primäre Anwendungsfälle vorgesehen:

: Als Anwendungsdekor auf oberster Ebene oder als Chrom-Layout

: Als Container für eine bestimmte Interaktion mit einer oder mehreren untergeordneten Ansichten

Bemerkungen

Das CoordinatorLayout ist ein Container, der das FrameLayout .
Durch Anhängen eines CoordinatorLayout.Behavior an ein direktes untergeordnetes Element von CoordinatorLayout können Sie Berührungsereignisse, Fensterinsets, Messungen, Layout und verschachteltes Scrollen abfangen.

Durch Angeben von Behaviors für untergeordnete Ansichten eines CoordinatorLayout Sie viele verschiedene Interaktionen innerhalb eines einzelnen übergeordneten CoordinatorLayout bereitstellen. Diese Ansichten können auch miteinander interagieren. View-Klassen können ein Standardverhalten angeben, wenn sie als DefaultBehavior eines CoordinatorLayout mithilfe der Annotation DefaultBehavior .

Ein einfaches Verhalten erstellen

Um ein Behavior zu erstellen, erweitern Sie einfach die CoordinatorLayout.Behavior Klasse.

Erweitern Sie das CoordinatorLayout.Behavior

Beispiel:

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

Dieses Verhalten muss an eine untergeordnete Ansicht eines CoordinatorLayout angehängt werden, um aufgerufen zu werden.

Binden Sie ein Verhalten programmgesteuert an

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

Fügen Sie ein Verhalten in XML an

Sie können das Attribut layout_behavior , um das Verhalten in XML anzuhängen:

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

Fügen Sie ein Verhalten automatisch an

Wenn Sie mit einer benutzerdefinierten Ansicht arbeiten, können Sie das Verhalten mithilfe der Annotation @CoordinatorLayout.DefaultBehavior anfügen:

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

}

Verwenden des SwipeDismissBehavior

Das SwipeDismissBehavior funktioniert für jede Ansicht und implementiert die Funktion zum SwipeDismissBehavior in unseren Layouts mit einem CoordinatorLayout .

Benutz einfach:

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

Erstellen Sie Abhängigkeiten zwischen Ansichten

Sie können CoordinatorLayout.Behavior , um Abhängigkeiten zwischen Ansichten zu erstellen. Sie können eine View mit einer anderen View verankern, indem Sie:

Um beispielsweise ein Behavior zum Verschieben einer ImageView zu erstellen, wenn eine andere verschoben wird (Beispielsymbolleiste), führen Sie die folgenden Schritte aus:

  • Erstellen Sie das benutzerdefinierte Verhalten :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • layoutDependsOn Methode layoutDependsOn den layoutDependsOn true layoutDependsOn . Diese Methode wird bei jeder Änderung des Layouts aufgerufen:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • Immer wenn die Methode layoutDependsOn den onDependentViewChanged layoutDependsOn zurückgibt true die Methode onDependentViewChanged aufgerufen:

    @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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow