material-components_materia.../docs/components/CollapsingToolbarLayout.md
cketcham 73d1c6f148 Update links in material component docs
PiperOrigin-RevId: 195898245
2018-05-08 20:10:49 -04:00

133 lines
6.0 KiB
Markdown

<!--docs:
title: "Collapsing Toolbars"
layout: detail
section: components
excerpt: "Collapsing toolbars change height and other visual aspects in response to scrolling."
iconId: toolbar
path: /catalog/collapsing-toolbar-layout/
-->
# Collapsing Toolbars
![Collapsing Toolbars](assets/collapsing-toolbars.svg)
<!--{: .article__asset.article__asset--screenshot }-->
`CollapsingToolbarLayout` is a `ViewGroup` that provides many of the visual
characteristics and interactions for **collapsing toolbars** specified in the
material guidelines. To create the collapsing toolbar, `CollapsingToolbarLayout`
integrates with
[`AppBarLayout`](https://developer.android.com/reference/com/google/android/material/appbar/AppBarLayout),
[`CoordinatorLayout`](https://developer.android.com/reference/androidx/coordinatorlayout/widget/CoordinatorLayout),
[`Toolbar`](https://developer.android.com/reference/android/support/v7/widget/Toolbar.html),
and a scrollable content view, such as
[`RecyclerView`](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html).
## Design & API Documentation
* [Material Design guidelines: UI
regions](https://material.io/guidelines/layout/structure.html#structure-ui-regions)
<!--{: .icon-list-item.icon-list-item--spec }-->
* [Material Design guidelines: Scrolling app bar
behavior](https://material.io/guidelines/patterns/scrolling-techniques.html#scrolling-techniques-behavior)
<!--{: .icon-list-item.icon-list-item--spec }-->
* [Class
definition](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/appbar/CollapsingToolbarLayout.java)
<!--{: .icon-list-item.icon-list-item--link }-->
* [Class
overview](https://developer.android.com/reference/com/google/android/material/appbar/CollapsingToolbarLayout)
<!--{: .icon-list-item.icon-list-item--link }--> <!--{: .icon-list }-->
## Usage
To add a collapsing toolbar to your layout, place the `CollapsingToolbarLayout`
inside an `AppBarLayout`. Then, add a `Toolbar` and any other views as a child
to the `CollapsingToolbarLayout`. Make sure that the entire view structure is
inside a `CoordinatorLayout` to take advantage of `CollapsingToolbarLayout`'s
scrolling and features.
A layout with a collapsing toolbar might look something like this:
```xml
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Scrollable view here -->
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="@dimen/tall_toolbar_height">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleGravity="top"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"/>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
```
A common collapsing toolbar pattern is the parallax image scroll, in which
images or other children of the `CollapsingToolbarLayout` scroll at different
rates than their siblings. To achieve this effect, add an
[`ImageView`](https://developer.android.com/reference/android/widget/ImageView.html)
and any other views as children of the `CollapsingToolbarLayout`. Specify parallax
multipliers in the XML for as many of the siblings as you like.
A toolbar with a collapsing image might look something like this:
```xml
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleGravity="top"
app:expandedTitleMarginStart="@dimen/shrine_toolbar_offset_start"
app:expandedTitleMarginTop="@dimen/shrine_toolbar_offset_top"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/shrine_toolbar_image_offset_top"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5"/>
<android.support.v7.widget.Toolbar
android:id="@+id/AppBar"
android:layout_width="match_parent"
android:layout_height="@dimen/shrine_toolbar_collapsed_height"
app:layout_collapseMode="pin"/>
</com.google.android.material.appbar.CollapsingToolbarLayout>
```
You can combine the basic collapsing toolbar with scroll flags,
`CollapsingToolbarLayout`'s attributes, `TabViewLayout`, or any other view you
would like to achieve your desired toolbar.
* Make sure to call
[`setTitle()`](https://developer.android.com/reference/com/google/android/material/appbar/CollapsingToolbarLayout#setTitle(java.lang.CharSequence))
on the `CollapsingToolbarLayout` instead of the `Toolbar`. This allows
`CollapsingToolbarLayout` the ability to resize the title based on the
toolbar's current size.
* You can add as many views as you like to the `CollapsingToolbarLayout`, but
make sure that the `Toolbar` is the last child of the
`CollapsingToolbarLayout`. This ensures that the views are drawn in the
correct order.
* The scrolling content should be placed in a
[`RecyclerView`](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html),
[`NestedScrollView`](https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html),
or another view that supports nested scrolling.
## Related Concepts
* [AppBarLayout](https://developer.android.com/reference/com/google/android/material/appbar/AppBarLayout)
* [TabLayout](https://developer.android.com/reference/com/google/android/material/tabs/TabLayout)