AppBarLayout으로 스크롤링보기 겹침


103

이 비디오 에서와 같이 머티리얼 디자인 스크롤 기술 에서 '겹치는 콘텐츠가있는 유연한 공간'패턴을 구현하고 싶습니다 . 콘텐츠가 겹치는 유연한 공간 GIF

내 XML 레이아웃은 다음과 같습니다.

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <android.support.design.widget.AppBarLayout
      android:layout_width="match_parent"
      android:layout_height="192dp"
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

      <android.support.v7.widget.Toolbar
          android:layout_height="?attr/actionBarSize"
          android:layout_width="match_parent"
          app:layout_collapseMode="pin"/>
    </android.support.design.widget.CollapsingToolbarLayout>
  </android.support.design.widget.AppBarLayout>

  <android.support.v4.widget.NestedScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
      <....>
    </LinearLayout>
  </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

디자인 라이브러리를 사용하여 쉽게 수행 할 수있는 방법이 있습니까? 아니면 사용자 지정 CoordinatorLayout.Behavior 를 구축 해야합니까?


반대쪽을 찾고 있는데, CollapsingToolbarLayout 내부의 이미지는 툴바 뒤와 NestedScrollView 아래에 다른 색상으로 몇 dps를 더 표시해야합니다!
David

FrameLayout, RelativeLayout을 사용했지만 항상 조각이 actionBar와 겹쳤습니다. NestedScrollView를 모든 조각에 대한 부모로 사용하는 것이 해결책이었습니다. 감사!
JCarlosR

답변:


148

실제로 AppBarLayout으로 스크롤링 뷰를 오버레이하는 것은 Android 디자인 지원 라이브러리에 포함 된 기능입니다. (또는 ScrollingViewBehavior를 사용하는 모든 뷰) 의 app:behavior_overlapTop속성을 NestedScrollView사용 하여 오버랩 양을 설정할 수 있습니다.

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    app:behavior_overlapTop="64dp">

참고 app:behavior_overlapTop만이 뷰에서 작동 app:layout_behavior="@string/appbar_scrolling_view_behavior"이 (속성이 보통에 적용되는이 아닌보기 또는 상위 뷰 그룹) 속성을 사용하는 행동이기 때문에, 따라서 behavior_접두사.

또는 setOverlayTop ()을 통해 프로그래밍 방식으로 설정합니다 .

NestedScrollView scrollView = ...
CoordinatorLayout.LayoutParams params = 
    (CoordinatorLayout.LayoutParams) scrollView.getLayoutParams();
AppBarLayout.ScrollingViewBehavior behavior =
    (AppBarLayout.ScrollingViewBehavior) params.getBehavior();
behavior.setOverlayTop(128); // Note: in pixels

1
이 거의 (있는 내가 설정 한 내 RecyclerView 제외하고, 나를 위해 노력 layout_behavior하고 behavior_overlapTop) 끝 뒤에 그 형제 AppBarLayout. XML에서 순서를 전환 해 보았지만 아무런 효과가없는 것 같습니다. 문제가 될 수있는 아이디어가 있습니까?
Vicky Chijwani

1
스크롤링을 비활성화하면 (app : layout_scrollFlags 속성 제거)-behavior_overlapTop이 작동하지 않음-NestedScrollView가 AppBarLayout 아래에 있습니다. 이 문제를 해결하는 방법을 알고 있습니까?
Pavel Biryukov 2015

@PavelBiryukov API <21에 대해 무엇을 했습니까?
Vicky Chijwani

1
안녕하세요, 저에게는 작동하지 않습니다. 수신error no resource identifier found for attribute behavior_overlayTop
Jack Lynx

1
@Lynx는 - 혼동을 일으킬 정도로, 그것은이다 behavior_overlapTop하지만 setOverlayTop()- 오버레이 대 겹치는. 올바른 것을 사용하고 있는지 확인하십시오!
ianhanniballake

21

수락 된 답변 외에도 CollapsingToolbarLayout에서 setTitleEnabled (false)를 호출하여 예제와 같이 제목이 맨 위에 고정되도록합니다.

이렇게 :

CollapsingToolbarLayout.setTitleEnabled(false);

또는 다음과 같이 xml에 추가합니다.

app:titleEnabled="false"

그렇지 않으면 당연히 원하는 동작이 아닌 한 겹치는 콘텐츠 뒤에 제목이 사라질 수 있습니다.


2
확장 될 때 제목이 겹치지 않도록 충분히 큰 extendedTitleMarginBottom을 CollapsingToolbarLayout에 배치 할 수 있습니다.
WindRider
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.