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