一 SlidingDrawer 这个类,也就是所谓的"抽屉"类。它的用法很简单,要包括handle ,和content .
handle 就是当你点击它的时候,content 要么抽抽屉要么关抽屉。
这是上下拉抽屉的效果,将 SlidingDrawer属性设置为android:orientation="vertical"即可
二、重要属性
android:allowSingleTap:指示是否可以通过handle打开或关闭
android:animateOnClick:指示是否当使用者按下手柄打开/关闭时是否该有一个动画。
android:content:隐藏的内容
android:handle:handle(手柄)
三、重要方法
animateClose():关闭时实现动画。
close():即时关闭
getContent():获取内容
isMoving():指示SlidingDrawer是否在移动。
isOpened():指示SlidingDrawer是否已全部打开
lock():屏蔽触摸事件。
setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener):SlidingDrawer关闭时调用
unlock():解除屏蔽触摸事件。
toggle():切换打开和关闭的抽屉SlidingDrawer。
上面例子的布局文件:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="效果显示:" /> <SlidingDrawer android:id="@+id/drawer1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:handle="@+id/layout1" android:content="@+id/mycontent1"> <LinearLayout android:id="@id/layout1" android:orientation="vertical" android:layout_width="35sp" android:layout_height="wrap_content" android:gravity="center"> <ImageView android:id="@+id/myImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/open" /> </LinearLayout> <GridView android:id="@id/mycontent1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="2" android:gravity="center" /> </SlidingDrawer> </LinearLayout> </FrameLayout>java文件:
import android.app.Activity; import android.os.Bundle; import android.widget.GridView; import android.widget.ImageView; import android.widget.SlidingDrawer; import android.widget.SlidingDrawer.OnDrawerCloseListener; import android.widget.SlidingDrawer.OnDrawerOpenListener; import android.widget.SlidingDrawer.OnDrawerScrollListener; public class SlidingDrawerActivity extends Activity { /** Called when the activity is first created. */ private SlidingDrawer sd; private GridView gv; private ImageView iv; private int [] itemIcons = new int [] { R.drawable.alarm, R.drawable.calendar, R.drawable.camera, R.drawable.clock, R.drawable.music, R.drawable.tv }; private String[] itemString = new String[]{"Alarm","Calendar","camera","clock","music","tv"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.slidrawer); init(); GridAdapter adapter = new GridAdapter(SlidingDrawerActivity.this,itemString,itemIcons); gv.setAdapter(adapter); /* 设定SlidingDrawer被打开的事件处理 */ sd.setOnDrawerOpenListener(new OnDrawerOpenListener() { @Override public void onDrawerOpened() { // TODO Auto-generated method stub iv.setImageResource(R.drawable.close); } }); /* 设定SlidingDrawer被关闭的事件处理 */ sd.setOnDrawerCloseListener(new OnDrawerCloseListener() { public void onDrawerClosed() { iv.setImageResource(R.drawable.open); } }); sd.setOnDrawerScrollListener(new OnDrawerScrollListener() { @Override public void onScrollStarted() { // TODO Auto-generated method stub System.out.println("start"); } @Override public void onScrollEnded() { // TODO Auto-generated method stub System.out.println("end"); } }); } private void init(){ sd = (SlidingDrawer) findViewById(R.id.drawer1); gv = (GridView) findViewById(R.id.mycontent1); iv = (ImageView) findViewById(R.id.myImage); } }还有注意的是:
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,如果显示的时候不正常,考虑上面的原因。