Android
코디네이터 레이아웃 및 동작
수색…
소개
CoordinatorLayout은 수퍼 프레임 방식의 FrameLayout이며이 ViewGroup의 목표는 내부에있는 뷰를 조정하는 것입니다.
코디네이터 레이아웃의 가장 큰 매력은 XML 파일 자체 내에서 뷰의 애니메이션과 전환을 조정할 수 있다는 것입니다.
CoordinatorLayout은 다음과 같은 두 가지 주요 사용 사례를 대상으로합니다.
: 최상위 수준의 응용 프로그램 장식 또는 크롬 레이아웃
: 하나 이상의 자식 뷰와의 특정 상호 작용을위한 컨테이너
비고
CoordinatorLayout
은 FrameLayout
을 확장하는 컨테이너입니다.
부착하여 CoordinatorLayout.Behavior
의 직접적인 아이에게 CoordinatorLayout
, 당신은 터치 이벤트, 창 세트, 측정, 레이아웃, 중첩 된 스크롤을 가로 챌 수 있습니다.
CoordinatorLayout
의 하위 뷰에 대한 Behaviors
를 지정하면 단일 부모 내에서 여러 가지 상호 작용을 제공 할 수 있으며 이러한 뷰는 서로 상호 작용할 수도 있습니다. 뷰 클래스는 DefaultBehavior
주석을 사용하여 CoordinatorLayout
의 자식으로 사용될 때 기본 동작을 지정할 수 있습니다.
간단한 동작 만들기
Behavior
를 만들려면 CoordinatorLayout.Behavior
클래스를 확장하면됩니다.
CoordinatorLayout.Behavior 확장
예:
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);
}
}
이 동작은 호출 할 CoordinatorLayout
의 자식 뷰에 첨부해야합니다.
프로그래밍 방식으로 동작 첨부
MyBehavior myBehavior = new MyBehavior();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
params.setBehavior(myBehavior);
XML로 동작 붙이기
layout_behavior
속성을 사용하여 비헤이비어를 XML에 첨부 할 수 있습니다.
<View
android:layout_height="...."
android:layout_width="...."
app:layout_behavior=".MyBehavior" />
자동으로 행동 붙이기
사용자 정의보기로 작업하는 경우 @CoordinatorLayout.DefaultBehavior
주석을 사용하여 비헤이비어를 첨부 할 수 있습니다.
@CoordinatorLayout.DefaultBehavior(MyBehavior.class)
public class MyView extends ..... {
}
SwipeDismissBehavior 사용하기
SwipeDismissBehavior
는 모든보기에서 작동하며 CoordinatorLayout
사용하여 레이아웃에서 SwipeDismissBehavior
기능을 구현합니다.
그냥 사용 :
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);
뷰 간 종속성 만들기
CoordinatorLayout.Behavior
를 사용하여 뷰 사이의 종속성을 만들 수 있습니다. View
를 다른 View
에 고정시킬 수 있습니다.
-
layout_anchor
속성을 사용합니다. - 커스텀
Behavior
작성해,true
돌려주는layoutDependsOn
메소드를 구현true
.
예를 들어 다른 ImageView
가 이동되었을 때 ImageView
를 움직이는 Behavior
을 생성하려면 (예 : 툴바 예제) 다음 단계를 수행하십시오.
public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
true
돌려주는layoutDependsOn
메소드를 오버라이드 (override)true
. 이 메소드는 레이아웃이 변경 될 때마다 호출됩니다.@Override public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) { // Returns true to add a dependency. return dependency instanceof Toolbar; }
때마다 방법
layoutDependsOn
반환true
방법은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); }