SlidingDrawer可以将内容隐藏在屏幕外,允许用户通过拖拽一个把手,将内容带回屏幕上显示. SlidingDrawer可以横向使用,也可以纵向使用。 该小部件由两个子视图组成:用于拖拽的把手视图和由该把手连接并拖拽的内容。 SlidingDrawer 应该用于覆盖内部布局。这意味着SlidingDrawer应该只用于象 FrameLayout或 RelativeLayout 这样的布局的内部。SlidingDrawer 的大小定义了滑出屏幕时其占用的空间。 因此一般SlidingDrawer 的长宽属性都设置为match_parent。 在XML布局中,SlidingDrawer必须为其把手和内容定义ID:
<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>
概述
嵌套类 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
interface | SlidingDrawer.OnDrawerCloseListener | 抽屉关闭时执行的回调函数. | |||||||||
interface | SlidingDrawer.OnDrawerOpenListener | 抽屉打开时执行的回调函数. | |||||||||
interface | SlidingDrawer.OnDrawerScrollListener | 抽屉滑动时执行的回调函数. |
XML 属性 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
属性名称 | 关联方法 | 描述 | |||||||||
android:allowSingleTap | 指示是否可以通过点击抽屉把手来开闭抽屉. | ||||||||||
android:animateOnClick | 指示用户单击把手时是否显示抽屉的开闭动画. | ||||||||||
android:bottomOffset | SlidingDrawer 的把手距离底边的额外距离. | ||||||||||
android:content | 标识用于显示抽屉内容的子视图. | ||||||||||
android:handle | 标识用于显示抽屉把手的子视图. | ||||||||||
android:orientation | SlidingDrawer 的抽出方向. | ||||||||||
android:topOffset | SlidingDrawer 的把手距离顶边的额外距离. |
[展开]
继承 XML 属性
| |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
继承自 class android.view.ViewGroup
| |||||||||||
继承自 class android.view.View
|
常量 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | ORIENTATION_HORIZONTAL | ||||||||||
int | ORIENTATION_VERTICAL |
[展开]
继承常量
| |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
继承自 class android.view.ViewGroup
| |||||||||||
继承自 class android.view.View
|
[展开]
继承字段
| |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
继承自 class android.view.View
|
公有构造函数 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
SlidingDrawer(
Context context,
AttributeSet attrs)
根据指定的XML中定义的属性创建SlidingDrawer。
| |||||||||||
SlidingDrawer(
Context context,
AttributeSet attrs, int defStyle)
根据指定的XML中定义的属性创建SlidingDrawer。
|
公有方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
animateClose()
以动画的形式关闭抽屉。
| ||||||||||
void |
animateOpen()
以动画的形式打开抽屉。
| ||||||||||
void |
animateToggle()
以动画的形式切换抽屉的开闭状态。
| ||||||||||
void |
close()
立即关闭抽屉。
| ||||||||||
View |
getContent()
返回抽屉的内容。
| ||||||||||
View |
getHandle()
返回抽屉的把手。
| ||||||||||
boolean |
isMoving()
指示抽屉是否正在移动。
| ||||||||||
boolean |
isOpened()
指示抽屉当前是否出于全开状态。
| ||||||||||
void |
lock()
锁定SlidingDrawer,使其忽略触控事件。
| ||||||||||
void |
onInitializeAccessibilityEvent(
AccessibilityEvent event)
使用作为事件源的该视图的信息初始化
AccessibilityEvent 事件.换句话说, 该视图状态的变化是触发辅助事件的源头.
| ||||||||||
void |
onInitializeAccessibilityNodeInfo(
AccessibilityNodeInfo info)
使用该视图的信息初始化
AccessibilityNodeInfo 对象.
| ||||||||||
boolean |
onInterceptTouchEvent(
MotionEvent event)
使用此方法可以拦截所有触摸屏动作引发的事件.这意味着你可以监视分派给子项的事件, 并且可以在当前手势的任何一点获得其控制权.
| ||||||||||
boolean |
onTouchEvent(
MotionEvent event)
实现该方法可以处理触屏动作事件.
| ||||||||||
void |
open()
立即打开抽屉。
| ||||||||||
void |
setOnDrawerCloseListener(
SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener)
设置用于接收抽屉关闭通知的监听器。
| ||||||||||
void |
setOnDrawerOpenListener(
SlidingDrawer.OnDrawerOpenListener onDrawerOpenListener)
设置用于接收抽屉打开通知的监听器。
| ||||||||||
void |
setOnDrawerScrollListener(
SlidingDrawer.OnDrawerScrollListener onDrawerScrollListener)
设置接收抽屉开始滑动和结束滑动通知的监听器.
| ||||||||||
void |
toggle()
切换抽屉的开闭状态。状态立即变更。
| ||||||||||
void |
unlock()
解除对SlidingDrawer的锁定,使其可以处理触控事件。
|
保护方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
dispatchDraw(
Canvas canvas)
调用此方法来绘出子视图.可被衍生类重写,以便在其子项被画出之前取得控制权.
| ||||||||||
void |
onFinishInflate()
根据 XML 生成视图工作完成.该函数在生成视图的最后调用,在所有子视图添加完之后.
| ||||||||||
void |
onLayout(boolean changed, int l, int t, int r, int b)
该视图设置其子视图的大小及位置时调用.派生类可以重写此方法,并为其子类布局.
| ||||||||||
void |
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
评估视图及其内容,以决定其宽度和高度.此方法由 |
[展开]
继承方法
| |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
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 属性
android:allowSingleTap
指示是否可以通过点击抽屉把手来开闭抽屉. (如果为假,用户必须通过 拖动或快速滑动把手,或通过单击轨迹球来开闭抽屉。) 默认值为真.
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
.
关联方法
android:animateOnClick
指示用户单击把手时是否显示抽屉的开闭动画. 默认值为真.
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
.
关联方法
android:bottomOffset
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
.
关联方法
android: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
.
关联方法
android: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
.
关联方法
android:orientation
SlidingDrawer 的抽出方向.
Must be one of the following constant values.
Constant | Value | Description |
---|---|---|
horizontal | 0 | 定义为横向. |
vertical | 1 | 定义为纵向. |
This corresponds to the global attribute resource symbol orientation
.
关联方法
android:topOffset
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
.
关联方法
常量
公有构造函数
public SlidingDrawer (Context context, AttributeSet attrs)
根据指定的XML中定义的属性创建SlidingDrawer。
参数
context | 应用程序上下文。 |
---|---|
attrs | XML中定义的属性。 |
public SlidingDrawer (Context context, AttributeSet attrs, int defStyle)
根据指定的XML中定义的属性创建SlidingDrawer。
参数
context | 应用程序上下文。 |
---|---|
attrs | XML中定义的属性。 |
defStyle | 应用到该小部件的样式。 |
公有方法
public void onInitializeAccessibilityEvent (AccessibilityEvent event)
使用作为事件源的该视图的信息初始化 AccessibilityEvent
事件.换句话说, 该视图状态的变化是触发辅助事件的源头.
例如:为超类实现的属性集合中添加设置密码属性的事件:
public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); event.setPassword(true); }
如果调用 setAccessibilityDelegate(AccessibilityDelegate)
时指定了 View.AccessibilityDelegate
,则 onInitializeAccessibilityEvent(View, AccessibilityEvent)
负责处理该调用.
注意: 向事件中加入信息时一定要首先调用超类的实现, 因为默认实现添加了一些基本信息.
参数
event | 初始化的事件. |
---|
public void onInitializeAccessibilityNodeInfo (AccessibilityNodeInfo info)
使用该视图的信息初始化 AccessibilityNodeInfo
对象. 基类实现的功能如下.
setParent(View)
;setBoundsInParent(Rect)
;setBoundsInScreen(Rect)
;setPackageName(CharSequence)
;setClassName(CharSequence)
;setContentDescription(CharSequence)
;setEnabled(boolean)
;setClickable(boolean)
;setFocusable(boolean)
;setFocused(boolean)
;setLongClickable(boolean)
;setSelected(boolean)
.
子类应该在覆盖该方法时,调用超类的实现并添加附加属性.
如果调用 setAccessibilityDelegate(AccessibilityDelegate)
时指定了 View.AccessibilityDelegate
,则 onInitializeAccessibilityNodeInfo(View, AccessibilityNodeInfo)
负责处理该调用.
参数
info | 要初始化的实例 |
---|
public boolean onInterceptTouchEvent (MotionEvent event)
使用此方法可以拦截所有触摸屏动作引发的事件.这意味着你可以监视分派给子项的事件, 并且可以在当前手势的任何一点获得其控制权.
使用此方法需谨慎.因为它与 View.onTouchEvent(MotionEvent)
有相当复杂的交互. 使用它需要像该方法实现一样正确的实现该方法.触控事件是按如下顺序接收的:
- 首先该函数收到按下事件.
- 按下事件会在视图组的子视图以及本视图的 onTouchEvent() 方法中处理. 这意味着若要处理之后的手势(代替父视图来处理该事件),你应该实现 onTouchEvent() 方法并返回真.另外,如果你的 onTouchEvent() 方法返回真, onInterceptTouchEvent() 方法将不会收到接下来发生的事件, 整个触控处理必须在 onTouchEvent() 方法中进行.
- 如果该方法返回假,接下来的每个事件(直到最后的抬起事件) 都会首先由该函数来处理,之后传给目标对象的 onTouchEvent() 方法.
- 如果该函数返回真,你不会收到接下来的任何事件: 目标视图会接收到该事件,但其动作被标记为
ACTION_CANCEL
,之后的事件都会交由你的 onTouchEvent() 方法来处理,不再出现在该方法中.
参数
event | 沿着层次结构向下分派的动作事件. |
---|
返回值
- 若将动作事件从子视图中截获并通过 onTouchEvent() 将他们分派给当前视图组,则返回真.当前目标将收到 ACTION_CANCEL 事件,并且不再会有其他消息传入该函数.
public boolean onTouchEvent (MotionEvent event)
实现该方法可以处理触屏动作事件.
参数
event | 动作时间 |
---|
返回值
- 如果处理了事件,返回真;否则返回假.
public void setOnDrawerCloseListener (SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener)
设置用于接收抽屉关闭通知的监听器。
参数
onDrawerCloseListener | 抽屉关闭时通知的监听器。 |
---|
public void setOnDrawerOpenListener (SlidingDrawer.OnDrawerOpenListener onDrawerOpenListener)
设置用于接收抽屉打开通知的监听器。
参数
onDrawerOpenListener | 抽屉打开时通知的监听器。 |
---|
public void setOnDrawerScrollListener (SlidingDrawer.OnDrawerScrollListener onDrawerScrollListener)
设置接收抽屉开始滑动和结束滑动通知的监听器. 快速滑动作为抽屉抽屉滑动对待. 快速滑动会触发抽屉打开或关闭事件。
参数
onDrawerScrollListener | 滑动开始或结束时通知的监听器。 |
---|
保护方法
protected void dispatchDraw (Canvas canvas)
调用此方法来绘出子视图.可被衍生类重写,以便在其子项被画出之前取得控制权. 此方法由 draw 方法在绘制子视图时调用. 子类可以重写该方法,在绘制其子视图之前获得控制权.(但是在绘制其自身的视图之后.)
参数
canvas | 绘制视图的画布. |
---|
protected void onFinishInflate ()
根据 XML 生成视图工作完成.该函数在生成视图的最后调用,在所有子视图添加完之后.
即使子类覆盖了 onFinishInflate 方法,也应该调用父类的方法,使该方法得以执行.
protected void onLayout (boolean changed, int l, int t, int r, int b)
该视图设置其子视图的大小及位置时调用.派生类可以重写此方法,并为其子类布局. Derived classes with children should override this method and call layout on each of their children.
参数
changed | 是否为视图设置了新的大小和位置. |
---|---|
l | 相对于父视图的左侧的位置. |
t | 相对于父视图的顶部的位置. |
r | 相对于父视图的右侧的位置. |
b | 相对于父视图的底部的位置. |
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
评估视图及其内容,以决定其宽度和高度.此方法由 measure(int, int)
调用,子类可以重载以提供更精确、更有效率的衡量其内容尺寸的方法.
约定: 覆盖该方法时,必须调用 setMeasuredDimension(int, int)
方法来保存评估结果的视图的宽度和高度.如果忘记将导致 measure(int, int)
方法抛出IllegalStateException
异常.要有效的利用父类的onMeasure(int, int)
方法.
基类测量的是背景的大小,除非 MeasureSpec 允许超过背景.子类应该重写 onMeasure(int, int)
方法,以为其内容提供更适合的大小.
如果重写了该方法,子类要确保其高度和宽度大于等于视图的最小高度和宽度. (getSuggestedMinimumHeight()
和 getSuggestedMinimumWidth()
)
参数
widthMeasureSpec | 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理. |
---|---|
heightMeasureSpec | 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理. |