Coordinator Layout 의 사용 은 이렇게 간단 합 니 다(Android)
6701 단어 AndroidCoordinatorLayout
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
/**
* 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 간 의 관 계 를 완전히 결합 시 켰 습 니 다~이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.