Zoeken…


Invoering

De CoordinatorLayout is een superkrachtige FrameLayout en het doel van deze ViewGroup is om de weergaven die erin staan te coördineren.

De belangrijkste aantrekkingskracht van de CoordinatorLayout is de mogelijkheid om de animaties en overgangen van de weergaven in het XML-bestand zelf te coördineren.

CoordinatorLayout is bedoeld voor twee primaire gebruiksgevallen:

: Als een applicatie-decor op het hoogste niveau of een chroomlay-out

: Als een container voor een specifieke interactie met een of meer onderliggende weergaven

Opmerkingen

De CoordinatorLayout is een container die de FrameLayout .
Door een CoordinatorLayout.Behavior te koppelen aan een rechtstreeks onderliggende persoon van CoordinatorLayout , kunt u aanraakgebeurtenissen, vensterinzet, metingen, lay-out en genest scrollen onderscheppen.

Door Behaviors voor onderliggende weergaven van een CoordinatorLayout kunt u veel verschillende interacties binnen één ouder bieden en die weergaven kunnen ook met elkaar communiceren. Weergaveklassen kunnen een standaardgedrag opgeven bij gebruik als kind van een CoordinatorLayout met de annotatie DefaultBehavior .

Een eenvoudig gedrag creëren

Om een Behavior te creëren, breidt u gewoon de CoordinatorLayout.Behavior klasse uit.

Verleng de CoordinatorLayout.Behavior

Voorbeeld:

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

Dit gedrag moet worden gekoppeld aan een onderliggende weergave van een CoordinatorLayout om te worden aangeroepen.

Programmeer een gedrag programmatisch

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

Bevestig een gedrag in XML

U kunt het kenmerk layout_behavior gebruiken om het gedrag in XML te koppelen:

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

Voeg automatisch een gedrag toe

Als u met een aangepaste weergave werkt, kunt u het gedrag koppelen met behulp van de @CoordinatorLayout.DefaultBehavior annotatie:

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

}

Gebruik van de SwipeDismissBehavior

De SwipeDismissBehavior werkt op elke View en implementeert de functionaliteit van swipe om te negeren in onze lay-outs met een CoordinatorLayout .

Gebruik gewoon:

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

Maak afhankelijkheden tussen weergaven

U kunt de CoordinatorLayout.Behavior gebruiken om afhankelijkheden tussen weergaven te maken. U kunt een View aan een andere View verankeren door:

Voer bijvoorbeeld de volgende stappen uit om een Behavior te creëren voor het verplaatsen van een ImageView wanneer een andere wordt verplaatst (voorbeeldwerkbalk):

  • Maak het aangepaste gedrag :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • Vervang de methode layoutDependsOn retourneer true . Deze methode wordt elke keer aangeroepen als er een wijziging in de lay-out optreedt:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • Wanneer de methode layoutDependsOn true retourneert true de methode onDependentViewChanged genoemd:

    @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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow