Szukaj…


Wprowadzenie

CoordinatorLayout to Super-Power FrameLayout, a celem tej grupy ViewGroup jest koordynacja widoków, które się w niej znajdują.

Głównym atutem CoordinatorLayout jest jego zdolność do koordynowania animacji i przejść widoków w samym pliku XML.

Układ CoordinatorLayout jest przeznaczony do dwóch podstawowych zastosowań:

: Jako dekoracja aplikacji lub układ chrom na najwyższym poziomie

: Jako kontener dla określonej interakcji z jednym lub kilkoma widokami potomnymi

Uwagi

CoordinatorLayout to kontener, który rozszerza FrameLayout .
Dołączając CoordinatorLayout.Behavior do bezpośredniego potomka CoordinatorLayout , będziesz w stanie przechwytywać zdarzenia dotykowe, wstawki okien, pomiary, układ i przewijanie zagnieżdżone.

Określając Behaviors dla widoków podrzędnych układu CoordinatorLayout , możesz zapewnić wiele różnych interakcji w obrębie jednego rodzica, a widoki te mogą również oddziaływać ze sobą. Klasy widoku mogą określać domyślne zachowanie, gdy są używane jako dziecko elementu CoordinatorLayout przy użyciu adnotacji DefaultBehavior .

Tworzenie prostego zachowania

Aby utworzyć Behavior po prostu rozszerz klasę CoordinatorLayout.Behavior .

Rozszerz CoordinatorLayout.Behavior

Przykład:

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

To zachowanie musi zostać dołączone do podrzędnego widoku CoordinatorLayout aby zostać wywołanym.

Dołącz zachowanie programowo

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

Dołącz zachowanie w XML

Możesz użyć atrybutu layout_behavior aby dołączyć zachowanie w XML:

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

Dołącz zachowanie automatycznie

Jeśli pracujesz z widokiem niestandardowym, możesz dołączyć zachowanie za pomocą adnotacji @CoordinatorLayout.DefaultBehavior :

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

}

Korzystanie z SwipeDismissBehavior

SwipeDismissBehavior działa na dowolnym widoku i implementuje funkcję machnięcia, aby zamknąć w naszych układach za pomocą układu CoordinatorLayout .

Po prostu użyj:

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

Twórz zależności między widokami

Za pomocą funkcji CoordinatorLayout.Behavior można tworzyć zależności między widokami. Możesz zakotwiczyć View do innego View przez:

  • za pomocą atrybutu layout_anchor .
  • tworzenie niestandardowego Behavior i implementacja metody layoutDependsOn zwracająca wartość true .

Na przykład, aby utworzyć Behavior do przenoszenia ImageView po przeniesieniu innego (przykładowy pasek narzędzi), wykonaj następujące czynności:

  • Utwórz niestandardowe zachowanie :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • Zastąp metodę layoutDependsOn zwracającą wartość true . Ta metoda jest wywoływana za każdym razem, gdy nastąpi zmiana w układzie:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • Ilekroć metoda layoutDependsOn zwraca wartość true metoda onDependentViewChanged jest wywoływana:

    @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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow