수색…


소개

CoordinatorLayout은 수퍼 프레임 방식의 FrameLayout이며이 ViewGroup의 목표는 내부에있는 뷰를 조정하는 것입니다.

코디네이터 레이아웃의 가장 큰 매력은 XML 파일 자체 내에서 뷰의 애니메이션과 전환을 조정할 수 있다는 것입니다.

CoordinatorLayout은 다음과 같은 두 가지 주요 사용 사례를 대상으로합니다.

: 최상위 수준의 응용 프로그램 장식 또는 크롬 레이아웃

: 하나 이상의 자식 뷰와의 특정 상호 작용을위한 컨테이너

비고

CoordinatorLayoutFrameLayout 을 확장하는 컨테이너입니다.
부착하여 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 에 고정시킬 수 있습니다.

예를 들어 다른 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);
    }
    


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow