抽屉菜单(DrawerLayout)

先上代码:

布局文件

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/id_drawerlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <!-- 主界面 -->
    <FrameLayout
        android:id="@+id/id_framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <Button
            android:id="@+id/btn_open_drawer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="打开抽屉" />
    </FrameLayout>
     <!-- 抽屉 -->
    <LinearLayout
        android:id="@+id/id_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#E0EEE0"
        android:orientation="vertical" >
            <ListView
            android:id="@+id/id_lv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:divider="#CD853F"
            android:dividerHeight="2dp" >
        </ListView>
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>  

初始化DrawerLayout

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

设置DrawerLayout.DrawerListener作为监听器类,里面包含四个回调函数

mDrawerLayout.setDrawerListener(new DrawerListener() {
        /**
         * 当抽屉滑动状态改变的时候被调用
         * 状态值是STATE_IDLE(闲置--0), STATE_DRAGGING(拖拽的--1), STATE_SETTLING(固定--2)中之一。
         * 抽屉打开的时候,点击抽屉,drawer的状态就会变成STATE_DRAGGING,然后变成STATE_IDLE
        */
        @Override
        public void onDrawerStateChanged(int arg0) {
            Log.i("info", "drawer的状态:" + arg0);
        }
        /**
         * 当抽屉被滑动的时候调用此方法
         * arg1 表示 滑动的幅度(0-1)
         */
        @Override
        public void onDrawerSlide(View arg0, float arg1) {
            Log.i("info", arg1 + "");
        }
        /**
         * 当一个抽屉被完全打开的时候被调用
         */
        @Override
        public void onDrawerOpened(View arg0) {
            Log.i("info", "抽屉被完全打开了!");
        }
        /**
         * 当一个抽屉完全关闭的时候调用此方法
         */
        @Override
        public void onDrawerClosed(View arg0) {
            Log.i("info", "抽屉被完全关闭了!");
        }
    });  

设置按钮的监听器,点击可打开抽屉

/**
* 打开抽屉
*/
findViewById(R.id.btn_open_drawer).setOnClickListener(new              OnClickListener() {
        @Override
        public void onClick(View v) {
            // 按钮按下,将抽屉打开
            mDrawerLayout.openDrawer(Gravity.LEFT);
            }
        });
时间: 2024-11-05 21:42:41

抽屉菜单(DrawerLayout)的相关文章

[UI]抽屉菜单DrawerLayout分析(三)

在[UI]抽屉菜单DrawerLayout分析(一)和[UI]抽屉菜单DrawerLayout分析(二)中分别介绍了DrawerLayout得基本框架结构和ViewDragerHelper的作用以及手势分发,本文一起来分析其中的Scroller的使用情况. 在ViewDragerHelper中可以发现private ScrollerCompat mScroller;说明抽屉菜单的具体滑动也是依赖于Scroller的使用,检索一下mScroller的引用,定位到forceSettleCapture

[UI]抽屉菜单DrawerLayout分析(一)

侧拉菜单作为常见的导航交互控件,最开始在没有没有android官方控件时,很多时候都是使用开源的SlidingMenu,一直没机会分析侧拉菜单的实现机理,本文将分析android.support.v4.widget.DrawerLayout的使用及实现.     官方介绍 DrawerLayout acts as a top-level container for window content that allows for interactive "drawer" views to

Android抽屉菜单DrawerLayout的实现案例

(1)项目布局文件 activity_main.xml <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="

[UI]抽屉菜单DrawerLayout分析(二)

继续分析DrawerLayout的手势分发部分 谈到手势分发,这本身就是个好话题,DrawerLayout作为继承自ViewGroup得布局他可以拦截手势也可以分发给子view,也就是在 onInterceptTouchEvent中做的操作,但是他的下面还有一个onTouchEvent方法,先看哪个呢?追溯代码我们可以知道 ViewGroup继承自View,而onTouchEvent是View的方法 我们还是先花点时间把两者的关系先确认再继续. onInterceptTouchEvent和onT

android 5.X Toolbar+DrawerLayout实现抽屉菜单

前言 ?android5.X新增的一个控件Toolbar,这个控件比ActionBar更加自由,可控,因为曾经的ActionBar的灵活性比較差,所以google逐渐使用Toolbar替代ActionBar,所以Toolbar也能够说是超级ActionBar. 这篇文章不具体介绍ToolBar的使用(定制),主要是介绍Toolbar使用的一个样例.即Toolbar结合DrawerLayout实现抽屉菜单. 使用这个两个控件须要引入对应的库依赖: dependencies { compile fi

Android使用DrawerLayout创建左右两个抽屉菜单

在android support.v4 中有一个抽屉视图控件DrawerLayout.使用这个控件,可以生成通过在屏幕上水平滑动打开或者关闭菜单,能给用户一个不错的体验效果. 最近在项目中,设计中有用到这个效果,但是是左右两边都能划出这样的一个菜单效果.经过使用发现,在xml布局中和代码中,几乎是添加添加同样的代码,就可以实现这种作用两种菜单的效果. 效果图如下: 左边拉出菜单: 右边拉出菜单效果: 具体的实现方法如下,结合代码文件,跟大家分享一下: 主页布局文件: <?xml version=

Android侧滑菜单DrawerLayout(抽屉布局)实现

应用场景: 由于侧滑菜单有更好的用户体验效果,所以更多的App使用侧滑抽屉式菜单列表,如网易客户端.百度影音.爱奇艺等等.至此,侧滑菜单有了更多的使用需求. 知识点介绍: 实现侧滑菜单功能的方法有很多,如果开源的项目SlidingMenu,下载地址为https://github.com/jfeinstein10/SlidingMenu.该开源项目依赖于另一个开源项目ActionBarSherlock,下载地址为https://github.com/JakeWharton/ActionBarShe

Android侧滑菜单DrawerLayout

侧滑菜单控件DrawerLayout是Support Library包中实现了侧滑菜单效果的控件,也许是因为第三方控件如MenuDrawer等的出现之后,Google借鉴而出现的产物.DrawerLayout分为侧边菜单和主内容两部分,侧边菜单可以根据手势展开与隐藏(DrawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化,内容就要自己去实现啦. 下面的例子主要是根据官方文档移植过来的,简单的改动: -----------------------界面布局------------

侧滑菜单DrawerLayout

侧滑菜单.............. 布局:<android.support.v4.widget.DrawerLayout android:id="@+id/drawer" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android

UIScrollView实现抽屉菜单效果

抽屉菜单看起来比较高端的样子,但实现起来并不难. 简单效果图如下(为了简单,颜色部分使用的是纯色): 图1 图2 实现原理(本例): 初始化一个刚好能水平容纳两个视图的UIScrollView,左侧视图为屏幕大小,右侧略窄与屏幕大小. 初始化各种事件,在处理程序中修改UIScrollView的contentOffset. 但是实际应用时一般还要在显示右侧视图时禁用左侧视图的内容以免出现误操作. 简单实现如下(只保留了关键代码): - (void)viewDidLoad { [super view