SlidingDrawer抽屉类显示

SlidingDrawer 是自SDK 1.5 才新加入的成员,也许你已曾经在Android 手机上看过。按下
一个按钮,就能展开一个"程序集"菜单,里面包含了各式各样的程序,而SlidingDrawer
Widget 正是为了这样的效果所准备的,当你在布局有限的UI Layout 时,可以应用
SlidingDrawaer 来在可视范围内放置更多组件,在需要的时候才拉出"抽屉"里的"子功能图标
"。SlidingDrawer 配置上采用了水平展开或垂直展开两种(android:orientation)方式,在XML
里必须指定其使用的android:handle 与android:content,前者委托要展开的图片(Layout 配
置),后者则是要展开的Layout Content。

运行结果如下

   SlidingDrawer 的使用,并不需复杂的设置才能启用,关键在于XML 里的属性设置,稍后
将会看到XML 里的描述。在主程序中所建立的SlidingDrawer 对象,为了捕捉"打开完毕"与"
已经关闭"这两个事件,所设置的Listener 为SlidingDrawer.setOnDrawerOpenListener()与
SlidingDrawer.setOnDrawerCloseListener()。

 

 1.  

 2.   import android.widget.GridView; 

 3.   import android.widget.ImageView;

 4.    import android.widget.SlidingDrawer;

   5.

   6.   public class EX04_27 extends Activity

   7.    {

   8.     private GridView gv;

   9.     private SlidingDrawer sd;

   10.    private ImageView im;

   11.    private int[] icons={R.drawable.alarm,R.drawable.calendar,

   12.                         R.drawable.camera,R.drawable.clock,

   13.                         R.drawable.music,R.drawable.tv};

   14.    private String[] items=

   15.     {

   16.       "Alarm","Calendar","Camera","Clock","Music","TV"

   17.     };

   18.

   19.    

   20.     @Override

   21.    public void onCreate(Bundle savedInstanceState)

   22.     {

   23.       super.onCreate(savedInstanceState);

   24.      

   25.       setContentView(R.layout.main);

   26.      

   27.       gv = (GridView)findViewById(R.id.myContent1);

   28.       sd = (SlidingDrawer)findViewById(R.id.drawer1);

   29.       im=(ImageView)findViewById(R.id.myImage1);

   30.

   31.      

   32.      MyGridViewAdapter adapter=new MyGridViewAdapter(this,items,icons);

   33.       gv.setAdapter(adapter);

   34.

   35.      

   36.       sd.setOnDrawerOpenListener

   37.       (new SlidingDrawer.OnDrawerOpenListener()

       

 38.       {

    39.         @Override

    40.         public void onDrawerOpened()

    41.          {

    42.            im.setImageResource(R.drawable.close);

    43.          }

    44.       });

    45.      

    46.       sd.setOnDrawerCloseListener

    47.        (new SlidingDrawer.OnDrawerCloseListener()

    48.       {

    49.         @Override

    50.         public void onDrawerClosed()

    51.          {

    52.            im.setImageResource(R.drawable.open);

    53.          }

    54.       });

    55.     }

    56.   }

    MyGridViewAdapter 在本范例中,是为了"拉开SlindingDrawer"所要显示的GridView 配置
的图标,以下是自定义继承自BaseAdapter 的类。

    1.   

    2.

    3.   

    4.    public class MyGridViewAdapter extends BaseAdapter

    5.    {

    6.      private Context _con;

    7.      private String[] _items;

    8.      private int[] _icons;

    9.     

    10.     public MyGridViewAdapter(Context con,String[] items,int[] icons)

    11.     {

    12.      _con=con;

    13.      _items=items;

    14.      _icons=icons;

    15.     }

     16.

     17.     @Override

     18.     public int getCount()

     19.     {

     20.       return _items.length;

     21.     }

     22.

     23.     @Override

     24.     public Object getItem(int arg0)

     25.     {

     26.       return _items[arg0];

     27.     }

     28.

     29.     @Override

     30.     public long getItemId(int position)

     31.     {

     32.       return position;

     33.     }

     34.

     35.     @Override

     36.     public View getView(int position, View convertView, ViewGroup parent)

     37.     {

     38.       LayoutInflater factory = LayoutInflater.from(_con);

     39.      

     40.       View v = (View) factory.inflate(R.layout.grid, null);

     41.      

     42.       ImageView iv = (ImageView) v.findViewById(R.id.icon);

     43.       TextView tv = (TextView) v.findViewById(R.id.text);

     44.      

     45.       iv.setImageResource(_icons[position]);

     46.       tv.setText(_items[position]);

     47.       return v;

     48.     }

     49.   }

res/layout/main.java   

 

     这支XML 中的SlidingDrawer TAG,通过Activity 里onCreate() 方法中的setContent-
View(R.layout.main)之后,就会存在于布局(Layout )当中,即使主程序(EX04_27.java)没有
编写相关的程序,依然可以正常运行,关键在于当中android:handle 指定要显示的ImageView
(小圆图)作为开关,android:content 则是按下这个ImageView (开关)之后,所要展开抽屉
显示的布局(Layout)。

   1.   <?xml version="1.0" encoding="utf-8"?>

   2.   <RelativeLayout

   3.      xmlns:android="http://schemas.android.com/apk/res/android"

   4.      android:layout_width="fill_parent"

   5.      android:layout_height="fill_parent"

   6.    >

   7.     <TextView

   8.        android:layout_width="fill_parent"

   9.        android:layout_height="wrap_content"

   10.       android:text="@string/hello"

   11.       android:textSize="16sp"

   12.     />

   13.    <SlidingDrawer

   14.       android:id="@+id/drawer1"

   15.       android:layout_width="fill_parent"

   16.       android:layout_height="fill_parent"

   17.       android:handle="@+id/layout1"

   18.       android:content="@+id/myContent1"

   19.       android:orientation="horizontal"

   20.     >

   21.      <LinearLayout

   22.         android:id="@id/layout1"

   23.         android:layout_width="35px"

   24.         android:layout_height="fill_parent"

   25.         android:background="@drawable/black"

   26.         android:gravity="center"

   27.       >

   28.        <ImageView

   29.           android:id="@+id/myImage1"

   30.           android:layout_width="wrap_content"

   31.          android:layout_height="wrap_content"

   32.          android:src="@drawable/open"

   33.        />

   34.      </LinearLayout>

   35.      <GridView

   36.        android:id="@id/myContent1"

   37.        android:layout_width="wrap_content"

   38.        android:layout_height="wrap_content"

   39.        android:numColumns="2"

   40.        android:background="@drawable/black"

   41.        android:gravity="center"

   42.      />

   43.    </SlidingDrawer>

   44.  </RelativeLayout>

 

上面的XML 程序代码之中是配置以水平方式来打开抽屉,我们另外通过修改
android:orientation="vertical",就能让SlidingDrawer 以垂直的方式打开。

   1.   <SlidingDrawer

   2.     android:id="@+id/drawer1"

   3.     android:layout_width="fill_parent"

   4.     android:layout_height="fill_parent"

   5.     android:handle="@+id/layout1"

   6.     android:content="@+id/myContent1"

   7.     android:orientation="vertical"

   8.   >

android中SlidingDrawer(抽屉)的应用android中SlidingDrawer(抽屉)的应用


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章