android开发游记:DrawerLayout 实现抽屉效果的导航菜单

早期的android sdk中没有可用的侧滑菜单的支持,所以很多时候都是使用的SlidingMenu。使用的侧滑菜单应用越来越多,以至于已经成为了app页面导航的标准,google也意识到侧滑菜单的必要,于是在后期版本中加入了对侧滑菜单的支持:DrawerLayout 。这个功能组件内置于版本支持拓展包v4中,开发者可以非常便捷地使用。

效果图:
这里写图片描述 这里写图片描述

使用方法:

首先保证自己工程里导入了v4包

然后使用v4包中的DrawerLayout 作为视图文件的根布局:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    ...
</android.support.v4.widget.DrawerLayout>

DrawerLayout中只能存在2个子View,DrawerLayout默认第一个View是底层视图,第二个是侧滑视图。开发者文档上推荐底层视图需要使用FrameLayout,但是实际测试发现其他布局也可以。我就使用了常规的RelativeLayout;第二个视图侧滑视图一般是一个ListView,为了符合自定义各种布局效果,使用了其他布局也可以,这里使用了LinearLayout:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF" >
    </RelativeLayout>


    <LinearLayout
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:orientation="vertical"
        android:background="#111">
    </LinearLayout>


</android.support.v4.widget.DrawerLayout>

侧滑视图中有个重要的属性android:layout_gravity,可以为start、end、left、right,标示了菜单从哪个方向滑出来。

这样就可以运行看一下了,内置了侧滑手势的处理,不需要添加任何java代码。

你可以在侧滑的视图布局中添加更多的布局来实现各种自定义效果,增加事件监听器等方式都一样。
如果你需要在代码中控制侧滑视图的打开关闭,可以使用下面的2个方法:

    DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer);

    drawer.openDrawer(Gravity.LEFT);     //从左边打开
    drawer.closeDrawer(Gravity.LEFT);    //从左边关闭

如果需要监听侧滑菜单的打开关闭事件,需要添加一个行为监听器:

drawer.setDrawerListener(new DrawerListener(){
    @Override  
    public void onDrawerOpened(View drawerView) {// 打开drawer  
    }  

    @Override  
    public void onDrawerClosed(View drawerView) {// 关闭drawer  
    }  


    @Override  
    public void onDrawerSlide(View drawerView, float slideOffset) {// drawer滑动的回调  
    }  


    @Override  
    public void onDrawerStateChanged(int newState) {// drawer状态改变的回调  
    }  
});

DrawerLayout作为google官方的侧滑组件,使用非常方便,google也推荐使用DrawerLayout作为页面导航组件。为开发者提供了许多编辑的编辑接口,用户可以自由地自定义它来实现各种效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值