AppBarLayout

public class AppBarLayout
extends LinearLayout implements CoordinatorLayout.AttachedBehavior

java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.LinearLayout
         ↳ com.google.android.material.appbar.AppBarLayout


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 AppBarLayout.LayoutParams.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 its 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.

 <androidx.coordinatorlayout.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">

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

         <!-- Your scrolling content -->

     </androidx.core.widget.NestedScrollView>

     <com.google.android.material.appbar.AppBarLayout
             android:layout_height="wrap_content"
             android:layout_width="match_parent">

         <androidx.appcompat.widget.Toolbar
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

         <com.google.android.material.tabs.TabLayout
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

     </com.google.android.material.appbar.AppBarLayout>

 </androidx.coordinatorlayout.widget.CoordinatorLayout>
 

For more information, see the component developer guidance and design guidelines.

Summary

Nested classes

class AppBarLayout.BaseBehavior<T extends AppBarLayout>

The default AppBarLayout.Behavior for AppBarLayout

interface AppBarLayout.BaseOnOffsetChangedListener<T extends AppBarLayout>

Interface definition for a callback to be invoked when an AppBarLayout's vertical offset changes. 

class AppBarLayout.Behavior

The default AppBarLayout.Behavior for AppBarLayout

class AppBarLayout.ChildScrollEffect

An effect class that should be implemented and used by AppBarLayout children to be given effects when the AppBarLayout's offset changes. 

class AppBarLayout.CompressChildScrollEffect

A class which handles updating an AppBarLayout child, if marked with the app:layout_scrollEffect compress, at each step in the AppBarLayout's offset animation. 

class AppBarLayout.LayoutParams

A ViewGroup.LayoutParams implementation for AppBarLayout

interface AppBarLayout.LiftOnScrollListener

Definition for a callback to be invoked when the lift on scroll elevation and background color change. 

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

AppBarLayout_elevation  
AppBarLayout_expanded  
AppBarLayout_statusBarForeground  

Inherited constants

Inherited fields

Public constructors

AppBarLayout(Context context)
AppBarLayout(Context context, AttributeSet attrs)
AppBarLayout(Context context, AttributeSet attrs, int defStyleAttr)

Public methods

void addLiftOnScrollListener(AppBarLayout.LiftOnScrollListener liftOnScrollListener)

Add a AppBarLayout.LiftOnScrollListener that will be called when the lift on scroll elevation and background color of this AppBarLayout change.

void addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener listener)
void addOnOffsetChangedListener(BaseOnOffsetChangedListener listener)

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

void clearLiftOnScrollListener()

Remove all previously added AppBarLayout.LiftOnScrollListeners.

void draw(Canvas canvas)
AppBarLayout.LayoutParams generateLayoutParams(AttributeSet attrs)
Behavior<AppBarLayout> getBehavior()
int getLiftOnScrollTargetViewId()

Returns the id of the view that the AppBarLayout should use to determine whether it should be lifted.

MaterialShapeDrawable getMaterialShapeBackground()
final int getMinimumHeightForVisibleOverlappingContent()
Drawable getStatusBarForeground()

Returns the drawable which is used for the status bar foreground.

float getTargetElevation()

This method is deprecated. target elevation is now deprecated. AppBarLayout's elevation is now controlled via a StateListAnimator. This method now always returns 0.

final int getTotalScrollRange()

Returns the scroll range of all children.

boolean isLiftOnScroll()

Returns whether the AppBarLayout lifts on scroll or not.

boolean isLifted()

Returns whether the AppBarLayout is in a lifted state or not.

boolean removeLiftOnScrollListener(AppBarLayout.LiftOnScrollListener liftOnScrollListener)

Remove a previously added AppBarLayout.LiftOnScrollListener.

void removeOnOffsetChangedListener(BaseOnOffsetChangedListener listener)

Remove the previously added AppBarLayout.OnOffsetChangedListener.

void removeOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener listener)
void setElevation(float elevation)
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 setLiftOnScroll(boolean liftOnScroll)

Sets whether the AppBarLayout lifts on scroll or not.

void setLiftOnScrollTargetView(View liftOnScrollTargetView)

Sets the view that the AppBarLayout should use to determine whether it should be lifted.

void setLiftOnScrollTargetViewId(int liftOnScrollTargetViewId)

Sets the id of the view that the AppBarLayout should use to determine whether it should be lifted.

boolean setLiftable(boolean liftable)

Sets whether the AppBarLayout is liftable or not.

void setLiftableOverrideEnabled(boolean enabled)

Sets whether the AppBarLayout lifted state corresponding to setLiftable(boolean) and setLifted(boolean) will be overridden manually.

boolean setLifted(boolean lifted)

Sets whether the AppBarLayout is in a lifted state or not.

void setOrientation(int orientation)
void setStatusBarForeground(Drawable drawable)

Set the drawable to use for the status bar foreground drawable.

void setStatusBarForegroundColor(int color)

Set the color to use for the status bar foreground.

void setStatusBarForegroundResource(int resId)

Set the drawable to use for the status bar foreground from resources.

void setTargetElevation(float elevation)

This method is deprecated. target elevation is now deprecated. AppBarLayout's elevation is now controlled via a StateListAnimator. If a target elevation is set, either by this method or the app:elevation attribute, a new state list animator is created which uses the given elevation value.

void setVisibility(int visibility)

Protected methods

boolean checkLayoutParams(ViewGroup.LayoutParams p)
void drawableStateChanged()
AppBarLayout.LayoutParams generateDefaultLayoutParams()
AppBarLayout.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p)
void onAttachedToWindow()
int[] onCreateDrawableState(int extraSpace)
void onDetachedFromWindow()
void onLayout(boolean changed, int l, int t, int r, int b)
void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
boolean verifyDrawable(Drawable who)

Inherited methods

XML attributes

AppBarLayout_elevation

Related methods:

AppBarLayout_expanded

Related methods:

AppBarLayout_statusBarForeground

Related methods:

Public constructors

AppBarLayout

public AppBarLayout (Context context)

Parameters
context Context

AppBarLayout

public AppBarLayout (Context context, 
                AttributeSet attrs)

Parameters
context Context

attrs AttributeSet

AppBarLayout

public AppBarLayout (Context context, 
                AttributeSet attrs, 
                int defStyleAttr)

Parameters
context Context

attrs AttributeSet

defStyleAttr int

Public methods

addLiftOnScrollListener

public void addLiftOnScrollListener (AppBarLayout.LiftOnScrollListener liftOnScrollListener)

Add a AppBarLayout.LiftOnScrollListener that will be called when the lift on scroll elevation and background color of this AppBarLayout change.

Parameters
liftOnScrollListener AppBarLayout.LiftOnScrollListener

addOnOffsetChangedListener

public void addOnOffsetChangedListener (AppBarLayout.OnOffsetChangedListener listener)

Parameters
listener AppBarLayout.OnOffsetChangedListener

addOnOffsetChangedListener

public void addOnOffsetChangedListener (BaseOnOffsetChangedListener listener)

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

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

clearLiftOnScrollListener

public void clearLiftOnScrollListener ()

Remove all previously added AppBarLayout.LiftOnScrollListeners.

draw

public void draw (Canvas canvas)

Parameters
canvas Canvas

generateLayoutParams

public AppBarLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

Parameters
attrs AttributeSet

Returns
AppBarLayout.LayoutParams

getBehavior

public Behavior<AppBarLayout> getBehavior ()

Returns
Behavior<AppBarLayout>

getLiftOnScrollTargetViewId

public int getLiftOnScrollTargetViewId ()

Returns the id of the view that the AppBarLayout should use to determine whether it should be lifted.

Returns
int

getMaterialShapeBackground

public MaterialShapeDrawable getMaterialShapeBackground ()

Returns
MaterialShapeDrawable

getMinimumHeightForVisibleOverlappingContent

public final int getMinimumHeightForVisibleOverlappingContent ()

Returns
int

getStatusBarForeground

public Drawable getStatusBarForeground ()

Returns the drawable which is used for the status bar foreground.

Related XML Attributes:

Returns
Drawable

getTargetElevation

public float getTargetElevation ()

This method is deprecated.
target elevation is now deprecated. AppBarLayout's elevation is now controlled via a StateListAnimator. This method now always returns 0.

Returns
float

getTotalScrollRange

public final int getTotalScrollRange ()

Returns the scroll range of all children.

Returns
int the scroll range in px

isLiftOnScroll

public boolean isLiftOnScroll ()

Returns whether the AppBarLayout lifts on scroll or not.

Returns
boolean

isLifted

public boolean isLifted ()

Returns whether the AppBarLayout is in a lifted state or not.

Returns
boolean

removeLiftOnScrollListener

public boolean removeLiftOnScrollListener (AppBarLayout.LiftOnScrollListener liftOnScrollListener)

Remove a previously added AppBarLayout.LiftOnScrollListener.

Parameters
liftOnScrollListener AppBarLayout.LiftOnScrollListener

Returns
boolean

removeOnOffsetChangedListener

public void removeOnOffsetChangedListener (BaseOnOffsetChangedListener listener)

Remove the previously added AppBarLayout.OnOffsetChangedListener.

Parameters
listener BaseOnOffsetChangedListener: the listener to remove.

removeOnOffsetChangedListener

public void removeOnOffsetChangedListener (AppBarLayout.OnOffsetChangedListener listener)

Parameters
listener AppBarLayout.OnOffsetChangedListener

setElevation

public void setElevation (float elevation)

Parameters
elevation float

setExpanded

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 boolean: true if the layout should be fully expanded, false if it should be fully collapsed

animate boolean: Whether to animate to the new state

setExpanded

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 boolean: true if the layout should be fully expanded, false if it should be fully collapsed

setLiftOnScroll

public void setLiftOnScroll (boolean liftOnScroll)

Sets whether the AppBarLayout lifts on scroll or not.

If set to true, the AppBarLayout will animate to the lifted, or elevated, state when content is scrolled beneath it. Requires `app:layout_behavior="@string/appbar_scrolling_view_behavior` to be set on the scrolling sibling (e.g., `NestedScrollView`, `RecyclerView`, etc.).

Parameters
liftOnScroll boolean

setLiftOnScrollTargetView

public void setLiftOnScrollTargetView (View liftOnScrollTargetView)

Sets the view that the AppBarLayout should use to determine whether it should be lifted.

Parameters
liftOnScrollTargetView View

setLiftOnScrollTargetViewId

public void setLiftOnScrollTargetViewId (int liftOnScrollTargetViewId)

Sets the id of the view that the AppBarLayout should use to determine whether it should be lifted.

Parameters
liftOnScrollTargetViewId int

setLiftable

public boolean setLiftable (boolean liftable)

Sets whether the AppBarLayout is liftable or not.

Parameters
liftable boolean

Returns
boolean true if the liftable state changed

setLiftableOverrideEnabled

public void setLiftableOverrideEnabled (boolean enabled)

Sets whether the AppBarLayout lifted state corresponding to setLiftable(boolean) and setLifted(boolean) will be overridden manually.

If true, this means that the AppBarLayout will not manage its own lifted state and it should instead be manually updated via setLifted(boolean). If false, the AppBarLayout will manage its lifted state based on the scrolling sibling view.

Note that calling setLiftable(boolean) will result in this liftable override being enabled and set to true by default.

Parameters
enabled boolean

setLifted

public boolean setLifted (boolean lifted)

Sets whether the AppBarLayout is in a lifted state or not.

Parameters
lifted boolean

Returns
boolean true if the lifted state changed

setOrientation

public void setOrientation (int orientation)

Parameters
orientation int

setStatusBarForeground

public void setStatusBarForeground (Drawable drawable)

Set the drawable to use for the status bar foreground drawable. Providing null will disable the scrim functionality.

This scrim is only shown when we have been given a top system inset.

Related XML Attributes:

Parameters
drawable Drawable: the drawable to display

setStatusBarForegroundColor

public void setStatusBarForegroundColor (int color)

Set the color to use for the status bar foreground.

This scrim is only shown when we have been given a top system inset.

Related XML Attributes:

Parameters
color int: the color to display

setStatusBarForegroundResource

public void setStatusBarForegroundResource (int resId)

Set the drawable to use for the status bar foreground from resources.

This scrim is only shown when we have been given a top system inset.

Related XML Attributes:

Parameters
resId int: drawable resource id

setTargetElevation

public void setTargetElevation (float elevation)

This method is deprecated.
target elevation is now deprecated. AppBarLayout's elevation is now controlled via a StateListAnimator. If a target elevation is set, either by this method or the app:elevation attribute, a new state list animator is created which uses the given elevation value.

Related XML Attributes:

Parameters
elevation float

setVisibility

public void setVisibility (int visibility)

Parameters
visibility int

Protected methods

checkLayoutParams

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

Parameters
p ViewGroup.LayoutParams

Returns
boolean

drawableStateChanged

protected void drawableStateChanged ()

generateDefaultLayoutParams

protected AppBarLayout.LayoutParams generateDefaultLayoutParams ()

Returns
AppBarLayout.LayoutParams

generateLayoutParams

protected AppBarLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

Parameters
p ViewGroup.LayoutParams

Returns
AppBarLayout.LayoutParams

onAttachedToWindow

protected void onAttachedToWindow ()

onCreateDrawableState

protected int[] onCreateDrawableState (int extraSpace)

Parameters
extraSpace int

Returns
int[]

onDetachedFromWindow

protected void onDetachedFromWindow ()

onLayout

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

Parameters
changed boolean

l int

t int

r int

b int

onMeasure

protected void onMeasure (int widthMeasureSpec, 
                int heightMeasureSpec)

Parameters
widthMeasureSpec int

heightMeasureSpec int

verifyDrawable

protected boolean verifyDrawable (Drawable who)

Parameters
who Drawable

Returns
boolean