Android-隐藏式抽屉SlidingDrawer

范例说明

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

源码下载:http://vdisk.weibo.com/s/1cs8n

4-29 按下向左的圆形按钮,会类似抽屉拉开内含的GridViewLayout中的图示

Android-隐藏式抽屉SlidingDrawer


范例程序

src/irdc.ex04_27/EX04_27.java

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

 

 

import android.widget.GridView;

import android.widget.ImageView;

importandroid.widget.SlidingDrawer;

 

public class EX04_27 extends Activity

{

  private GridViewgv;

  privateSlidingDrawer sd;

  private ImageViewim;

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

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

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

  private String[]items=

  {

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

  };

   

 

 @Override

  public voidonCreate(Bundle savedInstanceState)

  {

   super.onCreate(savedInstanceState);

   

   setContentView(R.layout.main);

   

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

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

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

   

   

   MyGridViewAdapter adapter=newMyGridViewAdapter(this,items,icons);

   gv.setAdapter(adapter);

   

   

   sd.setOnDrawerOpenListener

   (new SlidingDrawer.OnDrawerOpenListener()

   {

     @Override

     public void onDrawerOpened()

     {

       im.setImageResource(R.drawable.close);

     }

   });

   

   sd.setOnDrawerCloseListener

   (new SlidingDrawer.OnDrawerCloseListener()

   {

     @Override

     public void onDrawerClosed()

     {

       im.setImageResource(R.drawable.open);

     }

   });

  }

}

src/irdc.ex04_27/MyGridViewAdapter.java

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

 

 

 

 

public class MyGridViewAdapter extendsBaseAdapter

{

  private Context_con;

  private String[]_items;

  private int[]_icons;

 

  publicMyGridViewAdapter(Context con,String[] items,int[]icons)

  {

    _con=con;

   _items=items;

   _icons=icons;

  }

 

 @Override

  public intgetCount()

  {

   return _items.length;

  }

 

 @Override

  public ObjectgetItem(int arg0)

  {

   return _items[arg0];

  }

 

 @Override

  public longgetItemId(int position)

  {

   return position;

  }

 

 @Override

  publicView getView(int position, View convertView, ViewGroupparent)

 {

   LayoutInflater factory = LayoutInflater.from(_con);

   

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

   

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

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

   

   iv.setImageResource(_icons[position]);

   tv.setText(_items[position]);

   return v;

 }

}

res/layout/main.java

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

 

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

<RelativeLayout 

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

 android:layout_width="fill_parent"

 android:layout_height="fill_parent"

 <TextView

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"

   android:text="@string/hello"

   android:textSize="16sp"

 />

  <SlidingDrawer

   android:id="@+id/drawer1"

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   android:handle="@+id/layout1"

   android:content="@+id/myContent1"

   android:orientation="horizontal"

 >

   <LinearLayout

     android:id="@id/layout1"

     android:layout_width="35px"

     android:layout_height="fill_parent"

     android:background="@drawable/black"

     android:gravity="center"

   >

     <ImageView

       android:id="@+id/myImage1"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:src="@drawable/open"

     />

   </LinearLayout>

   <GridView

     android:id="@id/myContent1"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:numColumns="2"

     android:background="@drawable/black"

     android:gravity="center"

   />      

 </SlidingDrawer>

</RelativeLayout>

扩展学习

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

 

<SlidingDrawer

 android:id="@+id/drawer1"

 android:layout_width="fill_parent"

 android:layout_height="fill_parent"

 android:handle="@+id/layout1"

 android:content="@+id/myContent1"

  android:orientation="vertical"

>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值