public class

SlidingDrawer

extends ViewGroup
java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.SlidingDrawer

Class Overview

SlidingDrawer hides content out of the screen and allows the user to drag a handle to bring the content on screen. SlidingDrawer can be used vertically or horizontally. A special widget composed of two children views: the handle, that the users drags, and the content, attached to the handle and dragged with it. SlidingDrawer should be used as an overlay inside layouts. This means SlidingDrawer should only be used inside of a FrameLayout or a RelativeLayout for instance. The size of the SlidingDrawer defines how much space the content will occupy once slid out so SlidingDrawer should usually use match_parent for both its dimensions. Inside an XML layout, SlidingDrawer must define the id of the handle and of the content:

 <SlidingDrawer
     android:id="@+id/drawer"
     android:layout_width="match_parent"
     android:layout_height="match_parent"

     android:handle="@+id/handle"
     android:content="@+id/content">

     <ImageView
         android:id="@id/handle"
         android:layout_width="88dip"
         android:layout_height="44dip" />

     <GridView
         android:id="@id/content"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />

 </SlidingDrawer>
 

Summary

Nested Classes
interface SlidingDrawer.OnDrawerCloseListener Callback invoked when the drawer is closed. 
interface SlidingDrawer.OnDrawerOpenListener Callback invoked when the drawer is opened. 
interface SlidingDrawer.OnDrawerScrollListener Callback invoked when the drawer is scrolled. 
XML Attributes
Attribute Name Related Method Description
android:allowSingleTap Indicates whether the drawer can be opened/closed by a single tap on the handle. 
android:animateOnClick Indicates whether the drawer should be opened/closed with an animation when the user clicks the handle. 
android:bottomOffset Extra offset for the handle at the bottom of the SlidingDrawer. 
android:content Identifier for the child that represents the drawer's content. 
android:handle Identifier for the child that represents the drawer's handle. 
android:orientation Orientation of the SlidingDrawer. 
android:topOffset Extra offset for the handle at the top of the SlidingDrawer. 
[Expand]
Inherited XML Attributes
From class android.view.ViewGroup
From class android.view.View
Constants
int ORIENTATION_HORIZONTAL
int ORIENTATION_VERTICAL
[Expand]
Inherited Constants
From class android.view.ViewGroup
From class android.view.View
Public Constructors
SlidingDrawer(Context context, AttributeSet attrs)
Creates a new SlidingDrawer from a specified set of attributes defined in XML.
SlidingDrawer(Context context, AttributeSet attrs, int defStyle)
Creates a new SlidingDrawer from a specified set of attributes defined in XML.
Public Methods
void animateClose()
Closes the drawer with an animation.
void animateOpen()
Opens the drawer with an animation.
void animateToggle()
Toggles the drawer open and close with an animation.
void close()
Closes the drawer immediately.
View getContent()
Returns the content of the drawer.
View getHandle()
Returns the handle of the drawer.
boolean isMoving()
Indicates whether the drawer is scrolling or flinging.
boolean isOpened()
Indicates whether the drawer is currently fully opened.
void lock()
Locks the SlidingDrawer so that touch events are ignores.
boolean onInterceptTouchEvent(MotionEvent event)
Implement this method to intercept all touch screen motion events.
boolean onTouchEvent(MotionEvent event)
Implement this method to handle touch screen motion events.
void open()
Opens the drawer immediately.
void setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener)
Sets the listener that receives a notification when the drawer becomes close.
void setOnDrawerOpenListener(SlidingDrawer.OnDrawerOpenListener onDrawerOpenListener)
Sets the listener that receives a notification when the drawer becomes open.
void setOnDrawerScrollListener(SlidingDrawer.OnDrawerScrollListener onDrawerScrollListener)
Sets the listener that receives a notification when the drawer starts or ends a scroll.
void toggle()
Toggles the drawer open and close.
void unlock()
Unlocks the SlidingDrawer so that touch events are processed.
Protected Methods
void dispatchDraw(Canvas canvas)
Called by draw to draw the child views.
void onFinishInflate()
Finalize inflating a view from XML.
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.
void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

Measure the view and its content to determine the measured width and the measured height.

[Expand]
Inherited Methods
From class android.view.ViewGroup
From class android.view.View
From class java.lang.Object
From interface android.graphics.drawable.Drawable.Callback
From interface android.view.KeyEvent.Callback
From interface android.view.ViewManager
From interface android.view.ViewParent
From interface android.view.accessibility.AccessibilityEventSource

XML Attributes

android:allowSingleTap

Since: API Level

Indicates whether the drawer can be opened/closed by a single tap on the handle. (If false, the user must drag or fling, or click using the trackball, to open/close the drawer.) Default is true.

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 corresponds to the global attribute resource symbol allowSingleTap.

Related Methods

android:animateOnClick

Since: API Level

Indicates whether the drawer should be opened/closed with an animation when the user clicks the handle. Default is true.

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 corresponds to the global attribute resource symbol animateOnClick.

Related Methods

android:bottomOffset

Since: API Level

Extra offset for the handle at the bottom of the SlidingDrawer.

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), in (inches), mm (millimeters).

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 corresponds to the global attribute resource symbol bottomOffset.

Related Methods

android:content

Since: API Level

Identifier for the child that represents the drawer's content.

Must be a reference to another resource, in the form "@[+][package:]type:name" or to a theme attribute in the form "?[package:][type:]name".

This corresponds to the global attribute resource symbol content.

Related Methods

android:handle

Since: API Level

Identifier for the child that represents the drawer's handle.

Must be a reference to another resource, in the form "@[+][package:]type:name" or to a theme attribute in the form "?[package:][type:]name".

This corresponds to the global attribute resource symbol handle.

Related Methods

android:orientation

Since: API Level

Orientation of the SlidingDrawer.

Must be one of the following constant values.

ConstantValueDescription
horizontal0 Defines an horizontal widget.
vertical1 Defines a vertical widget.

This corresponds to the global attribute resource symbol orientation.

Related Methods

android:topOffset

Since: API Level

Extra offset for the handle at the top of the SlidingDrawer.

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), in (inches), mm (millimeters).

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 corresponds to the global attribute resource symbol topOffset.

Related Methods

Constants

public static final int ORIENTATION_HORIZONTAL

Since: API Level 3

Constant Value: 0 (0x00000000)

public static final int ORIENTATION_VERTICAL

Since: API Level 3

Constant Value: 1 (0x00000001)

Public Constructors

public SlidingDrawer (Context context, AttributeSet attrs)

Since: API Level 3

Creates a new SlidingDrawer from a specified set of attributes defined in XML.

Parameters
context The application's environment.
attrs The attributes defined in XML.

public SlidingDrawer (Context context, AttributeSet attrs, int defStyle)

Since: API Level 3

Creates a new SlidingDrawer from a specified set of attributes defined in XML.

Parameters
context The application's environment.
attrs The attributes defined in XML.
defStyle The style to apply to this widget.

Public Methods

public void animateClose ()

Since: API Level 3

Closes the drawer with an animation.

public void animateOpen ()

Since: API Level 3

Opens the drawer with an animation.

public void animateToggle ()

Since: API Level 3

Toggles the drawer open and close with an animation.

public void close ()

Since: API Level 3

Closes the drawer immediately.

public View getContent ()

Since: API Level 3

Returns the content of the drawer.

Returns
  • The View reprenseting the content of the drawer, identified by the "content" id in XML.

public View getHandle ()

Since: API Level 3

Returns the handle of the drawer.

Returns
  • The View reprenseting the handle of the drawer, identified by the "handle" id in XML.

public boolean isMoving ()

Since: API Level 3

Indicates whether the drawer is scrolling or flinging.

Returns
  • True if the drawer is scroller or flinging, false otherwise.

public boolean isOpened ()

Since: API Level 3

Indicates whether the drawer is currently fully opened.

Returns
  • True if the drawer is opened, false otherwise.

public void lock ()

Since: API Level 3

Locks the SlidingDrawer so that touch events are ignores.

See Also

public boolean onInterceptTouchEvent (MotionEvent event)

Since: API Level 3

Implement this method to intercept all touch screen motion events. This allows you to watch events as they are dispatched to your children, and take ownership of the current gesture at any point.

Using this function takes some care, as it has a fairly complicated interaction with View.onTouchEvent(MotionEvent), and using it requires implementing that method as well as this one in the correct way. Events will be received in the following order:

  1. You will receive the down event here.
  2. The down event will be handled either by a child of this view group, or given to your own onTouchEvent() method to handle; this means you should implement onTouchEvent() to return true, so you will continue to see the rest of the gesture (instead of looking for a parent view to handle it). Also, by returning true from onTouchEvent(), you will not receive any following events in onInterceptTouchEvent() and all touch processing must happen in onTouchEvent() like normal.
  3. For as long as you return false from this function, each following event (up to and including the final up) will be delivered first here and then to the target's onTouchEvent().
  4. If you return true from here, you will not receive any following events: the target view will receive the same event but with the action ACTION_CANCEL, and all further events will be delivered to your onTouchEvent() method and no longer appear here.

Parameters
event The motion event being dispatched down the hierarchy.
Returns
  • Return true to steal motion events from the children and have them dispatched to this ViewGroup through onTouchEvent(). The current target will receive an ACTION_CANCEL event, and no further messages will be delivered here.

public boolean onTouchEvent (MotionEvent event)

Since: API Level 3

Implement this method to handle touch screen motion events.

Parameters
event The motion event.
Returns
  • True if the event was handled, false otherwise.

public void open ()

Since: API Level 3

Opens the drawer immediately.

public void setOnDrawerCloseListener (SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener)

Since: API Level 3

Sets the listener that receives a notification when the drawer becomes close.

Parameters
onDrawerCloseListener The listener to be notified when the drawer is closed.

public void setOnDrawerOpenListener (SlidingDrawer.OnDrawerOpenListener onDrawerOpenListener)

Since: API Level 3

Sets the listener that receives a notification when the drawer becomes open.

Parameters
onDrawerOpenListener The listener to be notified when the drawer is opened.

public void setOnDrawerScrollListener (SlidingDrawer.OnDrawerScrollListener onDrawerScrollListener)

Since: API Level 3

Sets the listener that receives a notification when the drawer starts or ends a scroll. A fling is considered as a scroll. A fling will also trigger a drawer opened or drawer closed event.

Parameters
onDrawerScrollListener The listener to be notified when scrolling starts or stops.

public void toggle ()

Since: API Level 3

Toggles the drawer open and close. Takes effect immediately.

public void unlock ()

Since: API Level 3

Unlocks the SlidingDrawer so that touch events are processed.

See Also

Protected Methods

protected void dispatchDraw (Canvas canvas)

Since: API Level 3

Called by draw to draw the child views. This may be overridden by derived classes to gain control just before its children are drawn (but after its own view has been drawn).

Parameters
canvas the canvas on which to draw the view

protected void onFinishInflate ()

Since: API Level 3

Finalize inflating a view from XML. This is called as the last phase of inflation, after all child views have been added.

Even if the subclass overrides onFinishInflate, they should always be sure to call the super method, so that we get called.

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

Since: API Level 3

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 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

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

Since: API Level 3

Measure the view and its content to determine the measured width and the measured height. This method is invoked by measure(int, int) and should be overriden by subclasses to provide accurate and efficient measurement of their contents.

CONTRACT: When overriding this method, you must call setMeasuredDimension(int, int) to store the measured width and height of this view. Failure to do so will trigger an IllegalStateException, thrown by measure(int, int). Calling the superclass' onMeasure(int, int) is a valid use.

The base class implementation of measure defaults to the background size, unless a larger size is allowed by the MeasureSpec. Subclasses should override onMeasure(int, int) to provide better measurements of their content.

If this method is overridden, it is the subclass's responsibility to make sure the measured height and width are at least the view's minimum height and width (getSuggestedMinimumHeight() and getSuggestedMinimumWidth()).

Parameters
widthMeasureSpec horizontal space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec.
heightMeasureSpec vertical space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec.