Android APIs
public class

AppBarLayout

extends LinearLayout
java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.LinearLayout
         ↳ android.support.design.widget.AppBarLayout

Class Overview

AppBarLayout is a vertical LinearLayout which implements many of the features of material designs app bar concept, namely scrolling gestures.

Children should provide their desired scrolling behavior through setScrollFlags(int) and the associated layout xml attribute: app:layout_scrollFlags.

This view depends heavily on being used as a direct child within a CoordinatorLayout. If you use AppBarLayout within a different ViewGroup, most of it's functionality will not work.

AppBarLayout also requires a separate scrolling sibling in order to know when to scroll. The binding is done through the AppBarLayout.ScrollingViewBehavior behavior class, meaning that you should set your scrolling view's behavior to be an instance of AppBarLayout.ScrollingViewBehavior. A string resource containing the full class name is available.

 <android.support.design.widget.CoordinatorLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="match_parent">

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

         <!-- Your scrolling content -->

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

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

         <android.support.v7.widget.Toolbar
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

         <android.support.design.widget.TabLayout
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

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

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

Summary

Nested Classes
class AppBarLayout.Behavior The default AppBarLayout.Behavior for AppBarLayout
class AppBarLayout.LayoutParams  
interface AppBarLayout.OnOffsetChangedListener Interface definition for a callback to be invoked when an AppBarLayout's vertical offset changes. 
class AppBarLayout.ScrollingViewBehavior Behavior which should be used by Views which can scroll vertically and support nested scrolling to automatically scroll any AppBarLayout siblings. 
XML Attributes
Attribute Name Related Method Description
android.support.design:expanded setExpanded(boolean) The initial expanded state for the AppBarLayout. 
[Expand]
Inherited XML Attributes
From class android.widget.LinearLayout
From class android.view.ViewGroup
From class android.view.View
[Expand]
Inherited Constants
From class android.widget.LinearLayout
From class android.view.ViewGroup
From class android.view.View
[Expand]
Inherited Fields
From class android.view.View
Public Constructors
AppBarLayout(Context context)
AppBarLayout(Context context, AttributeSet attrs)
Public Methods
void addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener listener)
Add a listener that will be called when the offset of this AppBarLayout changes.
AppBarLayout.LayoutParams generateLayoutParams(AttributeSet attrs)
Returns a new set of layout parameters based on the supplied attributes set.
float getTargetElevation()
Returns the elevation value to use when this AppBarLayout should be elevated above content.
final int getTotalScrollRange()
Returns the scroll range of all children.
void removeOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener listener)
Remove the previously added AppBarLayout.OnOffsetChangedListener.
void setExpanded(boolean expanded, boolean animate)
Sets whether this AppBarLayout is expanded or not.
void setExpanded(boolean expanded)
Sets whether this AppBarLayout is expanded or not, animating if it has already been laid out.
void setOrientation(int orientation)
Should the layout be a column or a row.
void setTargetElevation(float elevation)
Set the elevation value to use when this AppBarLayout should be elevated above content.
Protected Methods
boolean checkLayoutParams(ViewGroup.LayoutParams p)
AppBarLayout.LayoutParams generateDefaultLayoutParams()
Returns a set of layout parameters with a width of MATCH_PARENT and a height of WRAP_CONTENT when the layout's orientation is VERTICAL.
AppBarLayout.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p)
Returns a safe set of layout parameters based on the supplied layout params.
void onLayout(boolean changed, int l, int t, int r, int b)
Called from layout when this view should assign a size and position to each of its children.
[Expand]
Inherited Methods
From class android.widget.LinearLayout
From class android.view.ViewGroup
From class android.view.View
From class java.lang.Object
From interface android.view.ViewParent
From interface android.view.ViewManager
From interface android.graphics.drawable.Drawable.Callback
From interface android.view.KeyEvent.Callback
From interface android.view.accessibility.AccessibilityEventSource

XML Attributes

android.support.design:expanded

The initial expanded state for the AppBarLayout. This only takes effect when this view is a direct child of a CoordinatorLayout.

Must be a boolean value, either "true" or "false".

This may also be a reference to a resource (in the form "@[package:]type:name") or theme attribute (in the form "?[package:][type:]name") containing a value of this type.

This is a private symbol.

Related Methods

Public Constructors

public AppBarLayout (Context context)

public AppBarLayout (Context context, AttributeSet attrs)

Public Methods

public void addOnOffsetChangedListener (AppBarLayout.OnOffsetChangedListener listener)

Add a listener that will be called when the offset of this AppBarLayout changes.

Parameters
listener The listener that will be called when the offset changes.]

public AppBarLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

Returns a new set of layout parameters based on the supplied attributes set.

Parameters
attrs the attributes to build the layout parameters from
Returns

public float getTargetElevation ()

Returns the elevation value to use when this AppBarLayout should be elevated above content.

public final int getTotalScrollRange ()

Returns the scroll range of all children.

Returns
  • the scroll range in px

public void removeOnOffsetChangedListener (AppBarLayout.OnOffsetChangedListener listener)

Remove the previously added AppBarLayout.OnOffsetChangedListener.

Parameters
listener the listener to remove.

public void setExpanded (boolean expanded, boolean animate)

Sets whether this AppBarLayout is expanded or not.

As with AppBarLayout's scrolling, this method relies on this layout being a direct child of a CoordinatorLayout.

Related XML Attributes
Parameters
expanded true if the layout should be fully expanded, false if it should be fully collapsed
animate Whether to animate to the new state

public void setExpanded (boolean expanded)

Sets whether this AppBarLayout is expanded or not, animating if it has already been laid out.

As with AppBarLayout's scrolling, this method relies on this layout being a direct child of a CoordinatorLayout.

Related XML Attributes
Parameters
expanded true if the layout should be fully expanded, false if it should be fully collapsed

public void setOrientation (int orientation)

Should the layout be a column or a row.

Parameters
orientation Pass HORIZONTAL or VERTICAL. Default value is HORIZONTAL.

public void setTargetElevation (float elevation)

Set the elevation value to use when this AppBarLayout should be elevated above content.

This method does not do anything itself. A typical use for this method is called from within an AppBarLayout.OnOffsetChangedListener when the offset has changed in such a way to require an elevation change.

Parameters
elevation the elevation value to use.

Protected Methods

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

protected AppBarLayout.LayoutParams generateDefaultLayoutParams ()

Returns a set of layout parameters with a width of MATCH_PARENT and a height of WRAP_CONTENT when the layout's orientation is VERTICAL. When the orientation is HORIZONTAL, the width is set to WRAP_CONTENT and the height to WRAP_CONTENT.

Returns
  • a set of default layout parameters or null

protected AppBarLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

Returns a safe set of layout parameters based on the supplied layout params. When a ViewGroup is passed a View whose layout params do not pass the test of checkLayoutParams(android.view.ViewGroup.LayoutParams), this method is invoked. This method should return a new set of layout params suitable for this ViewGroup, possibly by copying the appropriate attributes from the specified set of layout params.

Parameters
p The layout parameters to convert into a suitable set of layout parameters for this ViewGroup.
Returns

protected void onLayout (boolean changed, int l, int t, int r, int b)

Called from layout when this view should assign a size and position to each of its children. Derived classes with children should override this method and call layout on each of their children.

Parameters
changed This is a new size or position for this view
l Left position, relative to parent
t Top position, relative to parent
r Right position, relative to parent
b Bottom position, relative to parent