侧滑菜单

DrawerLayout是SupportLibrary包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物。drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现)。


drawerLayout的使用很方便,使用drawerLayout的要点如下:

1.      drawerLayout其实是一个布局控件,跟LinearLayout等控件是一种东西,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果。

 

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayoutxmlns:android="http://schemas.android.com/apk/res/android"
   
android:id="@+id/drawer_layout"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
>

    <FrameLayout
       
android:id="@+id/content_frame"
       
android:layout_width="match_parent"
       
android:layout_height="match_parent"
/>

    <ListView
       
android:id="@+id/left_drawer"
       
android:layout_width="240dp"
       
android:layout_height="match_parent"
       
android:layout_gravity="start"
       
android:background="#111"
       
android:choiceMode="singleChoice"
       
android:divider="@android:color/transparent"
       
android:dividerHeight="0dp"
/>
</android.support.v4.widget.DrawerLayout>

其中:DrawerLayout最好为界面的根布局,官网是这样说的,否则可能会出现触摸事件被屏蔽的问题;主内容区的布局代码要放在侧滑菜单布局的前面, 因为 XML 顺序意味着按 z 序(层叠顺序)排序,并且抽屉式导航栏必须位于内容顶部;侧滑菜单部分的布局(这里是ListView)必须设置layout_gravity属性,他表示侧滑菜单是在左边还是右边,而且如果不设置在打开关闭抽屉的时候会报错,设置了layout_gravity="start/left"的视图才会被认为是侧滑菜单。

 

2.      drawerLayout左侧菜单(或者右侧)的展开与隐藏可以被DrawerLayout.DrawerListener的实现监听到,这样你就可以在菜单展开与隐藏反生的时刻做一些希望做的事情,比如更新actionbar菜单等。如果你的activity有actionbar的话,还是建议你用ActionBarDrawerToggle来监听,ActionBarDrawerToggle实现了DrawerListener,所以他能做DrawerListener可以做的任何事情,同时他还能将drawerLayout的展开和隐藏与actionbar的app 图标关联起来,当展开与隐藏的时候图标有一定的平移效果,点击图标的时候还能展开或者隐藏菜单。

 

mDrawerToggle = new ActionBarDrawerToggle(

        this,                  /* host Activity */

       mDrawerLayout,         /*DrawerLayout object */

       R.drawable.ic_drawer,  /* navdrawer image to replace 'Up' caret */

       R.string.drawer_open,  /*"open drawer" description for accessibility */

       R.string.drawer_close  /*"close drawer" description for accessibility */

        ) {

    public voidonDrawerClosed(View view) {

       getActionBar().setTitle(mTitle);

       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()

    }

    public voidonDrawerOpened(View drawerView) {

       getActionBar().setTitle(mDrawerTitle);

       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()

    }

};

mDrawerLayout.setDrawerListener(mDrawerToggle);

另外,读者如果想自己自定义侧滑菜单,可以参考下面这篇博客。

http://blog.csdn.net/lmj623565791/article/details/39185641

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值