Android
Coördinator Lay-out en gedrag
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:
- met behulp van het kenmerk
layout_anchor
. - een aangepast
Behavior
en de methodelayoutDependsOn
implementeren dietrue
retourneert.
Voer bijvoorbeeld de volgende stappen uit om een Behavior
te creëren voor het verplaatsen van een ImageView
wanneer een andere wordt verplaatst (voorbeeldwerkbalk):
public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
Vervang de methode
layoutDependsOn
retourneertrue
. 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
retourneerttrue
de methodeonDependentViewChanged
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); }