首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

自定义屉子 指定把手

2012-08-26 
自定义抽屉 指定把手SlidingDrawer这个控件顾名思义就像抽屉一样,抽屉里面的东西(content)是对外面隐藏的,

自定义抽屉 指定把手

         SlidingDrawer这个控件顾名思义就像抽屉一样,抽屉里面的东西(content)是对外面隐藏的,只有抽屉的把手(handle)是暴露在外面的。当用户触动把手时,抽屉内隐藏的内容就会呈现。 配置上采用了水平展开或垂直展开两种(android:orientation)方式,在XML里必须指定其使用的android:handle 与android:content,前者委托要展开的图片(Layout 配置),后者则是要展开的Layout Content。用抽屉的外部布局一般采用相对布局(RelativeLayout)或是帧布局(FrameLayout),之样才只可以让抽屉的行为控制在指定的范围内。由于抽屉的高度在XML中指定为wrap_content是没有效果的,所以程序最好可以动态的根据抽屉的打开或是关闭来设置布局的显示位置。在主程序中,可以通过为SlidingDrawer设置监听器捕捉"打开完毕"与"已经关闭"这两个事件,所设置的Listener 为SlidingDrawer.setOnDrawerOpenListener()与SlidingDrawer.setOnDrawerCloseListener()。可以在这两个方法里面动态的改变布局。

 下面就以相对布局为例 里面有一个Button,ListView和一个自定义的SlidingDrawer它的把手部分的左右有两个TextView。抽屉里面是一个简单的TextView控件。main.xml布局如下:


接下来就要去实现自定义的抽屉了,因为这个把手需要我们自定义去处理,为了让把手周边的控件可以响应操作。那么自定义的抽屉类如下:




         当然这里的有效把手是Handle那个button控件,可以拖拉它来打开或是关闭,同时把手左右两边的两个控件分别是TextView,点击这两个控件会有响应,同时会换张图片。以上的代码关键在重写SlidingDrawer控件,通过拦截触摸事件,遍历把手部分的所有控件,只让我们在自定义控件中指定的某个控件Id具有把手的功能,其它的控件没有把手功能,并把触摸消息分发到没有把手功能的子控件上,而不会被SlidingDrawer拦截掉。其次在SlidingDrawer控件打开和关闭时要动态的去设置相对布局的位置信息,这样就可以随意控件SlidingDrawer的显示范围和位置了。

以上布局不太美观,但是它很简明的测试了自定义抽屉的功能完整性,达到了很多朋友想要的效果,这样抽屉外面的把手不再单调的只显示把手了,也可以显示用户指定的内容了,并且它们都有自己的焦点,不会影响指定把手的功能和焦点或是受原抽屉控件的限制。 现在美丽的布局由你定,动手吧。




热点排行