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
Behavior
personalizado e implementando el métodolayoutDependsOn
devolviendotrue
.
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
layoutDependsOn
devolviendotrue
. 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
layoutDependsOn
devuelvetrue
, 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); }