Android
Coordinador de Aula y Comportamientos
Buscar..
Introducción
El CoordinatorLayout es un FrameLayout de gran potencia y el objetivo de este ViewGroup es coordinar las vistas que están dentro de él.
El atractivo principal de CoordinatorLayout es su capacidad para coordinar las animaciones y transiciones de las vistas dentro del propio archivo XML.
CoordinatorLayout está destinado a dos casos de uso principales:
: Como una decoración de aplicación de nivel superior o diseño de cromo
: Como contenedor para una interacción específica con una o más vistas secundarias
Observaciones
El CoordinatorLayout es un contenedor que extiende el FrameLayout .
Al adjuntar un comportamiento de CoordinatorLayout.Behavior a un hijo directo de CoordinatorLayout , podrá interceptar eventos táctiles, inserciones de ventanas, medidas, diseño y desplazamiento anidado.
Al especificar Behaviors para vistas secundarias de un CoordinatorLayout , puede proporcionar muchas interacciones diferentes dentro de un solo padre y esas vistas también pueden interactuar entre sí. Las clases de vista pueden especificar un comportamiento predeterminado cuando se usan como elementos secundarios de un CoordinatorLayout mediante la anotación DefaultBehavior .
Creando un comportamiento simple
Para crear un Behavior simplemente extienda la clase CoordinatorLayout.Behavior .
Extender el CoordinatorLayout.Behavior
Ejemplo:
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);
}
}
Este comportamiento debe adjuntarse a una vista secundaria de un CoordinatorLayout a ser llamado.
Adjuntar un comportamiento programáticamente
MyBehavior myBehavior = new MyBehavior();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
params.setBehavior(myBehavior);
Adjuntar un comportamiento en XML
Puede usar el atributo layout_behavior para adjuntar el comportamiento en XML:
<View
android:layout_height="...."
android:layout_width="...."
app:layout_behavior=".MyBehavior" />
Adjuntar un comportamiento automáticamente
Si está trabajando con una vista personalizada, puede adjuntar el comportamiento utilizando la anotación @CoordinatorLayout.DefaultBehavior :
@CoordinatorLayout.DefaultBehavior(MyBehavior.class)
public class MyView extends ..... {
}
Usando el comportamiento de SwipeDismiss
SwipeDismissBehavior funciona en cualquier Vista e implementa la funcionalidad de deslizar para descartar en nuestros diseños con un CoordinatorLayout .
Solo usa:
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);
Crear dependencias entre vistas
Puede usar CoordinatorLayout.Behavior para crear dependencias entre vistas. Puede anclar una View a otra View mediante:
- utilizando el atributo
layout_anchor. - creando un
Behaviorpersonalizado e implementando el métodolayoutDependsOndevolviendotrue.
Por ejemplo, para crear un Behavior para mover un ImageView cuando se mueve otro (barra de herramientas de ejemplo), realice los siguientes pasos:
Crea el comportamiento personalizado :
public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}Reemplace el método
layoutDependsOndevolviendotrue. Este método se llama cada vez que se produce un cambio en el diseño:@Override public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) { // Returns true to add a dependency. return dependency instanceof Toolbar; }Cuando el método
layoutDependsOndevuelvetrue, se llama al métodoonDependentViewChanged:@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); }