CoordinatorLayout이란 무엇입니까?


96

새로운 Android 지원 디자인 라이브러리의 데모 앱을 살펴 보았습니다. Chris Banes가 github 에서 제공합니다 . 앱을 통해 CoordinatorLayout무겁게 사용됩니다. 또한, 예컨대 상기지지 설계 라이브러리 많은 클래스 FloatingActionButton, SnackBar, AppBarLayout등을 다르게 행동한다 때 사용되는 내부 CoordinatorLayout.

누군가 가 안드로이드의 CoordinatorLayout다른 것들 과 어떻게 다른지 에 대해 조명을 비추 ViewGroup거나 적어도 학습을 향한 올바른 경로를 제공 할 수 있습니까 CoordinatorLayout?


5
android-developers.blogspot.com/2015/05/… 또한 JavaDocs에 광범위하고 혼란 스럽지만 설명이 포함되어 있습니다 (현재 직접 연결 가능한 형식으로 제공되지는 않지만 developer.android.com/preview 에서 ZIP을 다운로드 할 수 있음). /download.html ).
CommonsWare

1
실제로 사용의 장점은 무엇입니까 CordinatorLayout?. 다른 사람들보다 어떤 우위를 가지고 있습니까?
eRaisedToX

답변:


43

여기 당신이 찾고 있습니다.

문서에서

디자인 라이브러리는 디자인 라이브러리의 CoordinatorLayout많은 구성 요소가 활용하는 자식 뷰 간의 터치 이벤트에 대한 추가 수준의 제어를 제공하는 레이아웃을 도입 합니다.

https://android-developers.googleblog.com/2015/05/android-design-support-library.html

이 링크에서는 위에서 언급 한 모든 뷰의 데모 비디오를 볼 수 있습니다.

도움이 되었기를 바랍니다 :)


3
링크가 끊어졌습니다.
Yogesh Seralia 2018-08-28

40

CoordinatorLayout이란 무엇입니까? 멋진 이름이 당신을 속이게하지 마세요.

이 무엇인지 CoordinatorLayout/ 하는 일을 가장 잘 이해하려면 먼저 Coordinate의 의미를 이해하고 염두에 두어야합니다.

당신이 단어를 구글하면

동등 어구

이것이 당신이 얻는 것입니다.

여기에 이미지 설명 입력

이러한 정의는 CoordinatorLayout이 자체적으로 수행하는 작업과 내부 뷰가 어떻게 작동하는지 설명하는 데 도움이된다고 생각합니다.

CoordinatorLayout (a ViewGroup)은 다른 요소 (하위 뷰)를 제공합니다.

CoordinatorLayout의 도움으로 자식 뷰는 조화롭게 함께 작동하여 다음과 같은 멋진 동작을 구현합니다.

드래그, 스 와이프, 플링 또는 기타 제스처.

CoordinatorLayout 내부의 뷰는 이러한 Behaviors 를 지정하여 효과적으로 협력하기 위해 다른 사용자와 협상합니다.

CoordinatorLayout은 매력적이고 조화로운 레이아웃을 만드는 데 도움이되는 머티리얼 디자인의 멋진 기능입니다.

CoordinatorLayout 안에 자식 뷰를 래핑하기 만하면됩니다.

<?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"
 android:fitsSystemWindows="true"
 tools:context="com.byte64.coordinatorlayoutexample.ScollingActivity">

 <android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/app_bar_height"
    android:fitsSystemWindows="true"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">



        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_scolling" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/fab_margin"
    app:layout_anchor="@id/app_bar"
    app:layout_anchorGravity="bottom|end"
    app:srcCompat="@android:drawable/ic_dialog_email" />

 </android.support.design.widget.CoordinatorLayout>

및 content_scrolling :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView     
 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"
 app:layout_behavior="@string/appbar_scrolling_view_behavior"
 tools:context="com.byte64.coordinatorlayoutexample.ScollingActivity"
 tools:showIn="@layout/activity_scolling">

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/text_margin"
    android:text="@string/large_text" />

 </android.support.v4.widget.NestedScrollView>

이것이 우리에게주는 것은 툴바를 접고 FloatingActionButton을 숨기기 위해 스크롤 할 수있는 레이아웃입니다.

열다:

여기에 이미지 설명 입력

닫은:

여기에 이미지 설명 입력


2
상대 또는 제약 레이아웃도 뷰간에 관계가 없을 것입니다. 하나가 위로 이동하면 관련 뷰가 위로 이동합니다. 코디네이터가 더 나은 이유는 무엇입니까?
Snake

1
@Snake 1. CoordinatorLayout은 ConstraintLayout이나 RelativeLayout이 할 수없는 다른 뷰 위에 뷰를 정렬하는 데 도움이됩니다. 2. 또한 뷰 전환을 애니메이션하는 데 도움이됩니다. 좋은 예는 Whatsapp 앱에서 "연락처보기"활동 / 단편의 전환입니다.
Felix Favor Chinemerem

13

참고할 추가 사항입니다. OP가 특별히 물었 기 때문에

또한 FloatingActionButton, SnackBar, AppBarLayout 등과 같은 많은 지원 디자인 라이브러리 클래스는 CoordinatorLayout 내에서 사용될 때 다르게 작동합니다.

이 때문인 것 같습니다.

CoordinatorLayout은 강력한 FrameLayout입니다.

FAB Button, SnackBar는 FrameLayout의 개념으로 작동하며 CoordinatorLayout 자체가 FrameLayout의 기능을 가지고 있기 때문에 다른 뷰가 다르게 동작하도록 만들 수 있습니다!.


9

CoordinatorLayout 은 본질적으로 이름에서 알 수있는 많은 기능을 가진 프레임 레이아웃이며, 자식 간의 조정을 자동화하고 아름다운보기를 구축하는 데 도움이됩니다. 구현은 Google Play 스토어 앱에서 볼 수 있으며 툴바가 축소되고 색상이 변경되는 방식입니다.

CoordinatorLayout 의 가장 좋은 점은 직접 또는 간접 후손에게 제공하는 동작입니다. 스크롤하는 동안 모든 UI가 움직이는 것을 보았을 것입니다. 그 행동이 마법을 일으켰을 가능성이 큽니다.


7

Android 문서 에서 유용한 기능에 대한 빠른 스냅 샷을 제공하려면 다음을 수행하십시오.

CoordinatorLayout을 사용하여 단순히 뷰의 관계형 동작을 제어합니다.

예를 들어 도구 모음을 축소하거나 숨기려는 경우. Google은 CoordinatorLayout에서 가장 잘 작동하는 AppBarLayout 및 CollapsingToolbarLayout을 도입하여 정말 쉽게 만들었습니다.

다른 가장 많이 사용되는 상황은 FloatingActionButton이 CollapsingToolbar의 맨 아래에 붙어서 움직여서 coordinatorLayout 아래 app:layout_anchor="@id/YourAppBarId"에 놓고 glue (!)에 사용 하기 를 원할 때 app:layout_anchorGravity="bottom|end"입니다. 마법의 일!

이 레이아웃을 컨텍스트로 사용하면 자식 뷰가 CoordinatorLayout 컨텍스트를 통해 서로를 인식하기 때문에 더 나은 협업을 수행하고 지능적인 방식으로 동작합니다. 즉, FloatingAction 버튼이 더 이상 스낵바 등으로 겹치지 않습니다.

이것은 가장 유용한 부분에 대한 간략한 요약 일 뿐이므로 앱 애니메이션에 더 많은 시간을 절약하고 싶다면 주제에 대해 조금 더 깊이 파고 드는 것이 좋습니다.

투시 구글 스크롤 뷰 활동 템플리트를


1

한 가지 중요한 점은 CoordinatorLayout이 FloatingActionButton 또는 AppBarLayout 작업에 대한 본질적인 이해가 없다는 것입니다. Coordinator.Behavior 형식으로 추가 API를 제공하기 만하면 자식 뷰가 터치 이벤트 및 제스처를 더 잘 제어 할 수 있습니다. 또한 서로 간의 종속성을 선언하고 onDependentViewChanged ()를 통해 콜백을 수신합니다.

뷰는 CoordinatorLayout.DefaultBehavior (YourView.Behavior.class) 주석을 사용하여 기본 Behavior를 선언하거나 app ​​: layout_behavior = "com.example.app.YourView $ Behavior"속성을 사용하여 레이아웃 파일에 설정할 수 있습니다. 이 프레임 워크를 사용하면 모든 뷰가 CoordinatorLayout과 통합 될 수 있습니다.

지금 구입 가능! 현재 Design 라이브러리를 사용할 수 있으므로 SDK Manager에서 Android 지원 리포지토리를 업데이트해야합니다. 그런 다음 단일 새 종속성으로 디자인 라이브러리 사용을 시작할 수 있습니다.

compile 'com.android.support:design:22.2.0'참고로 디자인 라이브러리는 Support v4 및 AppCompat 지원 라이브러리에 종속되므로 디자인 라이브러리 종속성을 추가하면 자동으로 포함됩니다. 또한 이러한 새 위젯을 Android Studio Layout Editor의 디자인보기 (CustomView에서 찾을 수 있음)에서 사용할 수 있도록주의하여 이러한 새 구성 요소 중 일부를 더 쉽게 미리 볼 수 있도록했습니다.

디자인 라이브러리, AppCompat 및 모든 Android 지원 라이브러리는 모든 것을 처음부터 빌드하지 않고 현대적이고 멋진 Android 앱을 빌드하는 데 필요한 빌딩 블록을 제공하는 데 중요한 도구입니다.


0

CoordinatorLayout슈퍼 구동입니다 FrameLayout.

기본적으로에 여러 하위 항목을 추가 FrameLayout하면 서로 겹칩니다. A FrameLayout는 단일 하위보기를 보유하는 데 가장 자주 사용되어야합니다. 의 주요 매력은 애니메이션 과 그 안에있는 뷰의 전환CoordinatorLayout 을 조정하는 기능 입니다. 예를 들어, XML 만 사용하여 FAB가 수신 스낵바에서 벗어나는 레이아웃을 설명하거나, FAB (또는 실제로 다른 뷰)가 다른 위젯에 연결되고 화면에서 이동하는 위젯.

다음은 주요 소스 튜토리얼 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.