文档章节

Android DrawerLayout 侧滑菜单栏

SRain215
 SRain215
发布于 2016/05/24 17:47
字数 726
阅读 150
收藏 3

一.使用DrawLayou实现:

页面布局:

<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/id_btn1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="1111" />  
    </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>  

说明:

1. 必须把DrawerLayout作为布局的跟标签。

2. 然后在跟标签中添加一个包含内容的视图,就是当抽屉完全隐藏的时候显示的内容布局。

3. 添加一个抽屉布局,这个布局可以按照需求自己定义,我的demo中是一个listview。

4. 抽屉布局中,需要指定android:layout_gravity属性,官方说明是用start代替left。

5. 抽屉布局的宽度最好不要超过320dp,这样做为了当抽屉完全显示的时候,不至于把内容布局全部遮挡。

初始化listview

mLv = (ListView) findViewById(R.id.id_lv);  
str = new String[] { "item1", "item2", "item3"};  
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, str);  
mLv.setAdapter(adapter);  
mLv.setOnItemClickListener(this); 

设置抽屉导航的监听事件。添加监听器的时候有三种方式。

1. 设置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("drawer", "drawer的状态:" + arg0);  
	}  
	/** 
	 * 当抽屉被滑动的时候调用此方法 
	 * arg1 表示 滑动的幅度(0-1) 
	 */  
	@Override  
	public void onDrawerSlide(View arg0, float arg1) {  
		Log.i("drawer", arg1 + "");  
	}  
	/** 
	 * 当一个抽屉被完全打开的时候被调用 
	 */  
	@Override  
	public void onDrawerOpened(View arg0) {  
		Log.i("drawer", "抽屉被完全打开了!");  
	}  
	/** 
	 * 当一个抽屉完全关闭的时候调用此方法 
	 */  
	@Override  
	public void onDrawerClosed(View arg0) {  
		Log.i("drawer", "抽屉被完全关闭了!");  
	}  
});

2. 设置DrawerListener的子类SimpleDrawerListener,使用这个类的时候不必实现全部的回调函数,可以根据自己的需要重写相应的方法。

mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {  
	@Override  
	public void onDrawerClosed(View drawerView) {  
		super.onDrawerClosed(drawerView);  
	}  
	@Override  
	public void onDrawerOpened(View drawerView) {  
		super.onDrawerOpened(drawerView);  
	}  
}); 

3. 使用DrawerListener的子类ActionBarDrawerToggle。一般与ActionBar结合使用。

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,  
                R.drawable.ic_drawer, R.string.drawer_open,  
                R.string.drawer_close) {  
@Override  
public void onDrawerClosed(View drawerView) {  
    getActionBar().setTitle(mTitle);  
    invalidateOptionsMenu();  
}  
@Override  
public void onDrawerOpened(View drawerView) {  
    getActionBar().setTitle(mDrawerTitle);  
    invalidateOptionsMenu();  
    }  
};  
mDrawerLayout.setDrawerListener(mDrawerToggle);  

4.禁止使用滑动展开侧边栏

mDraLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

5.设置侧边栏展开后,布局外的颜色。

mDraLayout.setScrimColor(this.getResources().getColor(R.color.transparent));

 

© 著作权归作者所有

SRain215
粉丝 18
博文 144
码字总数 89414
作品 0
扬州
Android工程师
私信 提问
Android 之 Material Design(三)—DrawerLayout+NavigationView+Toolbar(点击icon打开关闭侧滑菜单)

前言 关于Material Design相关的控件,前两篇文章已经介绍了一些常用的控件了,这篇文章主要介绍一下DrawerLayout+NavigationView+Toolbar。这样Material Design的也介绍的差不多了,剩下Rec...

AFinalDream
2017/06/22
0
0
侧滑菜单(抽屉效果)DrawerLayout实现原理

DrawerLayout是android support包新增的侧滑菜单控件,在Android Studio中可以很方便的创建一个带有侧滑菜单的页面。今天,我们来分析DrawerLayout它的实现原理,来加深对它的了解。为了能让...

Ihesong
2017/10/15
0
0
DrawerLayout+NavigationView仿摩拜单车主界面

曾经的侧滑菜单通常是使用SlidingMenu,但是用起来设置属性太多,使用繁琐。后来官方出来DrawerLayout,使侧滑控件得以转正,功能效果更佳。这里是我用DrawerLayout+NavigationView仿摩拜单车...

翻滚吧李博
2017/12/27
0
0
Android基础控件——MaterialDesign所有组件前来报到,搭建5.0项目开始的第一步

前言 眼看Android8.0要出啦,Android5.0的知识是时候找一天的时间终结一下了,本文最低支持Android5.0的版本,老版本的适配就留给各位实现吧。这里只是带着大家入门一下主要的一些控件,只是...

qq_30379689
2017/11/14
0
0
【压岁干货】精彩技术博客+优秀源码集锦

虽然2015年已经过了一月有余,但在中国,好像只有过了春节才算进入新的一年。眼看着这也春节倒计时了,大家好像又都忙了起来,赶项目赶项目…… 从DevStore整理了一些优秀的技术博客和源码作...

牵着蜗牛去西藏
2015/02/04
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

FPGA 设备 USB Platform Cable USB

lsusbFuture Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC

MtrS
今天
4
0
lua web快速开发指南(6) - Cache、DB介绍

"数据库"与"缓存"的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 "数据库"是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中, 我们经常会用到文件柜、书桌等等数...

水果糖的小铺子
今天
5
0
Oracle分页查询语句的写法

Oracle分页查询语句的写法 Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,Oracle分页查询语句基本上可以按本文给出的格式来进行套用。   Oracle分...

康师傅
昨天
5
0
java并发图谱

1527
昨天
2
0
Mybatis之拦截器Interceptor

使用mybatis时用PageHelper进行分页,用到了PageInterceptor,借此了解下mybatis的interceptor。Mybatis的版本是3.4.6,MybatisHelper的版本是5.1.3。 1、PageInterceptor 先上一段代码,如下...

克虏伯
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部