Coordinator Layout 의 사용 은 이렇게 간단 합 니 다(Android)

인터넷 에서 Coordinator Layout 에 관 한 강 좌 를 찾 았 습 니 다.대부분의 글 은 Coordinator Layout,AppbarLayout,Collapsing ToolbarLayout 와 Toolbar 등 을 함께 사용 하여 소 개 했 습 니 다.이것 은 저 로 하여 금 자신 도 모 르 게 이 몇 개의 구 조 를 함께 사용 해 야 한다 고 생각 하 게 했 고 그 장면 에 만 사용 되 었 습 니 다.사실 Coordinator Layout 의 기능 은 AppBarLayout 와 함께 사용 하 는 것 에 국한 되 는 것 이 아니 라 기능 이 강하 다.본 고 는 주로 Coordinator Layout 의 사용 에 대해 소개 하고 그 다음 에 한 편의 글 을 써 서 AppBarLayout 와 Collapsing Tool BarLayout 를 Coordinator Layout 와 통합 시 켰 다.그렇다면 코 디 네 이 터 레이아웃 이 얼마나 좋 은 지 느껴 보 세 요~
Coordinator Layout 가 뭘 할 수 있 을 까?
Coordinator Layout 를 배우 기 전에 Coordinator Layout 가 우 리 를 도와 무엇 을 할 수 있 는 지 알 필요 가 있 습 니 다.이름 에서 알 수 있 듯 이 자 View 를 조율 해 주 는 것 입 니 다.어떤 조화 법 이 죠?바로 이것 이 우리 의 맞 춤 형 제작 에 따라 각 키 View 의 구 조 를 조율 하 는 데 도움 을 주 는 것 이다.저희 가 먼저 애니메이션 을 보 겠 습 니 다.

이 애니메이션 을 조금 만 설명해 주세요.파란색 사각형 은 우리 의 일반 View 이 고 노란색 Hello 는 Button 입 니 다.우리 가 파란색 사각형 을 수평 으로 끌 때 노란색 Button 은 파란색 사각형 과 반대 방향 으로 이동 하 는 것 을 찾 고 있다.세로 로 파란색 사각형 을 움 직 일 때 노란색 도 세로 로 움직인다.한 마디 로 수직 방향 에서 동기 적 으로 이동 하고 수평 방향 에서 반대 된다.
이 효 과 는 Coordinator Layout 를 사용 하지 않 고 실현 할 수 있다 면 아무런 문제 가 없 을 것 입 니 다.그러나 코드 의 결합 도가 매우 클 것 입 니 다.코드 는 2 개의 View 인용 을 가지 고 onTouch Event 에서 여러 가지 판단 을 해 야 합 니 다.만약 에 우리 가 실현 하고 자 하 는 기능 이 더 많은 View 가 파란색 View 의 이동 에 따라 응답 해 야 한 다 는 것 이 라면 파란색 View 의 onTouch Event 에서 다른 View 에 대해 각종 논 리 를 처리 해 야 한다.이 결합 도 는 너무 슬프다~
그리고 Coordinator Layout 는 서브 뷰 의 레이아웃 을 조율 해 준다 고 불 리 는 만큼 Coordinator Layout 가 어떻게 실현 되 는 지 살 펴 보 겠 습 니 다.
Coordinator Layout 사용
Coordinator Layout 의 사용 핵심 은 Behavior 입 니 다.Behavior 는 맞 춤 형 동작 을 수행 하 는 것 입 니 다.Behavior 를 말 하기 전에 두 가지 개념 을 이해 해 야 합 니 다.Child 와 Dependency,무슨 뜻 입 니까?Child 는 당연히 자 View 라 는 뜻 입 니 다.누구의 자 View 입 니까?당연히 Coordinator Layout 의 자 View 입 니 다.사실 차 일 드 는 동작 을 수행 하 는 코 디 네 이 터 레이아웃 의 하위 뷰 를 말한다.디 펜 던 시 는 차 일 드 가 의존 하 는 뷰 를 말한다.예 를 들 어 위의 gif 그림 에서 파란색 View 는 Dependency 이 고 노란색 View 는 Child 이다.노란색 View 의 동작 은 파란색 View 에 의존 하기 때문이다.한 마디 로 Dependency 라 는 View 에 변화 가 생 겼 다 면 Child 라 는 View 는 이에 따라 변화 가 생 겨 야 한다.변화 가 생기 는 것 은 구체 적 으로 어떤 변화 가 발생 하 는 것 입 니까?여기 서 Behavior 를 도입 해 야 합 니 다.Child 가 변화 하 는 구체 적 인 실행 코드 는 모두 Behavior 와 같은 종류 에 넣 습 니 다.
Behavior 를 어떻게 사용 합 니까?우선,우 리 는 하나의 종 류 를 정의 합 니 다.Coordinator Layout.Behavior를 계승 합 니 다.그 중에서 일반적인 매개 변수 T 는 우리 가 동작 을 수행 해 야 하 는 View 류,즉 Child 입 니 다.그리고 Behavior 를 실현 하 는 두 가지 방법 입 니 다.

/**
*   child       dependency
*/
 @Override
 public boolean layoutDependsOn(CoordinatorLayout parent, T child, View dependency) {
 boolean rs;
 //      rs   
 //  false  child   dependency,ture    
 return rs; 
}

/**
*  dependency     (  、   ),      
*   true  child             ,     false
*/
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, T child, View dependency) {
  //child        
  return true;
}

위의 개념 이 생기 면 구체 적 으로 어떻게 실현 되 는 지 살 펴 보 자~
손가락 을 따라 이동 하 는 동작 에 응답 하기 위해 우 리 는 매우 간단 한 View 를 정의 합 니 다.이 View 는 손가락 을 따라 이동 하 는 것 에 만 응답 하고 이 View 를 Dependency 로 합 니 다.너무 간단 하기 때문에 이 View 소스 코드 는 붙 이지 않 습 니 다.우 리 는 이 View 의 유형 이름 인 TempView 만 알 아야 합 니 다.
Behavior 의 사용 을 살 펴 보 겠 습 니 다.

package com.hc.studyCoordinatorLayout;

import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;

/**
 * Package com.hc.studyCoordinatorLayout
 * Created by HuaChao on 2016/6/1.
 */
public class MyBehavior extends CoordinatorLayout.Behavior<Button> {
 private int width;

 public MyBehavior(Context context, AttributeSet attrs) {
  super(context, attrs);
  DisplayMetrics display = context.getResources().getDisplayMetrics();
  width = display.widthPixels;
 }

 @Override
 public boolean layoutDependsOn(CoordinatorLayout parent, Button child, View dependency) {
  //  dependency TempView   ,           Dependency
  return dependency instanceof TempView;
 }

 //  dependency      ,    onDependentViewChanged  
 @Override
 public boolean onDependentViewChanged(CoordinatorLayout parent, Button btn, View dependency) {

  //  dependency   ,  Button   

  int top = dependency.getTop();
  int left = dependency.getLeft();

  int x = width - left - btn.getWidth();
  int y = top;

  setPosition(btn, x, y);
  return true;
 }

 private void setPosition(View v, int x, int y) {
  CoordinatorLayout.MarginLayoutParams layoutParams = (CoordinatorLayout.MarginLayoutParams) v.getLayoutParams();
  layoutParams.leftMargin = x;
  layoutParams.topMargin = y;
  v.setLayoutParams(layoutParams);
 }


}

OK,현재 우 리 는 Button 류 에 Dependency 를 지정 하고 Dependency 에 따라 계속 변화 하 는 동작(Behavior)을 정 의 했 습 니 다.다음은 어떤 구체 적 인 Button 인 스 턴 스 로 연결 할 지 지정 해 야 합 니 다.방법 은 간단 합 니 다.레이아웃 파일 에 직접 지정 하면 됩 니 다.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.hc.studyCoordinatorLayout.MainActivity">

 <Button
  android:id="@+id/btn"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginLeft="300dp"
  android:layout_marginTop="300dp"
  android:background="#FFCC00"
  android:text="Hello"
  app:layout_behavior="com.hc.studyCoordinatorLayout.MyBehavior" />

 <com.hc.studyCoordinatorLayout.TempView
  android:layout_width="100dp"
  android:layout_height="100dp"
  android:layout_marginLeft="300dp"
  android:layout_marginTop="300dp"
  android:background="#3366CC" />
</android.support.design.widget.CoordinatorLayout>

쉽 지 않 아 요?우 리 는 Behavior 의 작성 에 만 관심 을 가지 면 됩 니 다.Child 와 Dependency 간 의 관 계 를 완전히 결합 시 켰 습 니 다~
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기