Sök…


Introduktion

CoordinatorLayout är en superdriven FrameLayout och målet med denna ViewGroup är att samordna vyerna som finns i den.

CoordinatorLayouts huvudattraktion är dess förmåga att koordinera animeringarna och övergångarna av vyerna i själva XML-filen.

CoordinatorLayout är avsett för två fall med primär användning:

: Som applikationsdekor eller kromlayout på toppnivå

: Som behållare för en specifik interaktion med en eller flera barnvyer

Anmärkningar

CoordinatorLayout är en behållare som utökar FrameLayout .
Genom att ansluta en CoordinatorLayout.Behavior till ett direkt barn av CoordinatorLayout kan du fånga beröringshändelser, fönsterinsatser, mätning, layout och kapslad rullning.

Genom att ange Behaviors för barnvyer av en CoordinatorLayout du ge många olika interaktioner inom en ensamstående förälder och dessa vyer kan också interagera med varandra. Visningsklasser kan ange ett standardbeteende när det används som barn i en CoordinatorLayout hjälp av DefaultBehavior .

Skapa ett enkelt beteende

För att skapa ett Behavior bara klassen CoordinatorLayout.Behavior .

Utöka koordinatorLayout.Beh Fräsen

Exempel:

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

Detta beteende är nödvändigt att fästas till ett barn Vy över en CoordinatorLayout att kallas.

Bifoga ett beteende programmatiskt

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

Bifoga ett beteende i XML

Du kan använda attributet layout_behavior att bifoga beteendet i XML:

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

Bifoga ett beteende automatiskt

Om du arbetar med en anpassad vy kan du bifoga beteendet med @CoordinatorLayout.DefaultBehavior kommentaren:

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

}

Använda SwipeDismissBehavior

SwipeDismissBehavior fungerar på valfri vy och implementerar SwipeDismissBehavior funktionalitet i våra layouter med en CoordinatorLayout .

Använd bara:

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

Skapa beroenden mellan vyer

Du kan använda CoordinatorLayout.Behavior att skapa beroenden mellan vyerna. Du kan förankra en View till en annan View av:

Utför följande steg för att skapa ett Behavior för att flytta en ImageView när en annan flyttas (exempelvis verktygsfältet):

  • Skapa det anpassade beteendet :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • Åsido layoutDependsOn metoden återvänder true . Den här metoden kallas varje gång en ändring sker i layouten:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • När layoutDependsOn returneras true kallas metoden 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow