Chcę zaimplementować wzorzec „Elastyczna przestrzeń z nakładającą się zawartością” z technik przewijania Material Design , takich jak w tym filmie :
Mój układ XML wygląda teraz tak:
<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>
Czy istnieje łatwy sposób na osiągnięcie tego za pomocą Biblioteki projektu? Czy też muszę utworzyć niestandardowy układ CoordinatorLayout.Behavior, aby to zrobić?
android
android-design-library
android-collapsingtoolbarlayout
ianhanniballake
źródło
źródło
Odpowiedzi:
W rzeczywistości nakładanie widoku przewijania za pomocą AppBarLayout jest funkcją dołączoną do biblioteki obsługi projektów systemu Android : możesz użyć
app:behavior_overlapTop
atrybutu w swoimNestedScrollView
(lub dowolnym widoku używającym ScrollingViewBehavior ), aby ustawić nakładanie się:Należy zauważyć, że
app:behavior_overlapTop
działa tylko w przypadku widoków, które mająapp:layout_behavior="@string/appbar_scrolling_view_behavior"
zachowanie używające atrybutu (a nie widok lub nadrzędną grupę widoków, jak zwykle mają zastosowanie atrybuty), stądbehavior_
prefiks.Lub ustaw go programowo za pomocą setOverlayTop () :
źródło
layout_behavior
ibehavior_overlapTop
) kończy się za jego siostrzanym AppBarLayout. Próbowałem zmienić kolejność w XML, ale nie daje to żadnego efektu. Jakieś pomysły, co może być problemem?error no resource identifier found for attribute behavior_overlayTop
behavior_overlapTop
alesetOverlayTop()
- nakładanie się vs nakładanie. Upewnij się, że używasz właściwego!Oprócz zaakceptowanej odpowiedzi wywołaj setTitleEnabled (false) na swoim CollapsingToolbarLayout, aby tytuł pozostał na górze, jak w przykładzie.
Lubię to:
lub dodając go w xml w ten sposób:
W przeciwnym razie tytuł mógłby zniknąć za nakładającymi się treściami, chyba że jest to pożądane zachowanie.
źródło