Ricerca…


introduzione

Il CoordinatorLayout è un FrameLayout superpotente e l'obiettivo di questo ViewGroup è di coordinare le viste al suo interno.

L'attrattiva principale di CoordinatorLayout è la sua capacità di coordinare le animazioni e le transizioni delle viste all'interno del file XML stesso.

CoordinatorLayout è destinato a due casi di utilizzo principale:

: Come decorazione per applicazioni di alto livello o layout cromati

: Come contenitore per una specifica interazione con una o più viste secondarie

Osservazioni

Il CoordinatorLayout è un contenitore che estende il FrameLayout .
Associando un CoordinatorLayout.Behavior a un figlio diretto di CoordinatorLayout , sarete in grado di intercettare gli eventi tattili, le finestre, le misure, il layout e lo scorrimento annidato.

Specificando Behaviors per le visualizzazioni secondarie di un CoordinatorLayout è possibile fornire molte interazioni diverse all'interno di un singolo genitore e tali visualizzazioni possono anche interagire tra loro. Le classi di vista possono specificare un comportamento predefinito quando vengono utilizzate come figlio di un CoordinatorLayout utilizzando l'annotazione DefaultBehavior .

Creare un semplice comportamento

Per creare un Behavior basta estendere la classe CoordinatorLayout.Behavior .

Estendi il CoordinatorLayout.Behavior

Esempio:

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

Questo comportamento deve essere collegato a un figlio Visualizzazione di un CoordinatorLayout da chiamare.

Allegare un comportamento a livello di codice

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

Allegare un comportamento in XML

Puoi utilizzare l'attributo layout_behavior per collegare il comportamento in XML:

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

Allegare un comportamento automaticamente

Se si sta lavorando con una vista personalizzata, è possibile allegare il comportamento utilizzando l'annotazione @CoordinatorLayout.DefaultBehavior :

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

}

Utilizzando il SwipeDismissBehavior

SwipeDismissBehavior funziona su qualsiasi vista e implementa la funzionalità di scorrimento per ignorare nei nostri layout con un CoordinatorLayout .

Basta usare:

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

Crea dipendenze tra le viste

Puoi utilizzare CoordinatorLayout.Behavior per creare dipendenze tra le viste. Puoi ancorare una View a un'altra View di:

Ad esempio, per creare un Behavior per lo spostamento di un ImageView quando ne viene spostato un altro (barra degli strumenti di esempio), effettuare le seguenti operazioni:

  • Crea il comportamento personalizzato :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • Sovrascrivi il metodo layoutDependsOn che restituisce true . Questo metodo viene chiamato ogni volta che si verifica una modifica al layout:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • Ogni volta che il metodo layoutDependsOn restituisce true , viene chiamato il metodo 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow