DrawerLayout在高版本(Android4.4以及以上)的v4包中
侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性)
有几点
1.drawerLayout其实是一个布局控件,跟LinearLayout等控件是一种东西,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能
有侧滑的效果。其中:DrawerLayout最好为界面的根布局,
菜单可添加到左边或右边
2.drawerLayout左侧菜单(或者右侧)的展开与隐藏可以被DrawerLayout.DrawerListener的实现监听到,这样你就可以在菜单展开与隐藏反生的时刻做一些希望做的事情,比如更新actionbar菜单等。如果你的activity有actionbar的话,还是建议你用ActionBarDrawerToggle来监听,ActionBarDrawerToggle实现了DrawerListener,所以他能做DrawerListener可以做的任何事情,同时他还能将drawerLayout的展开和隐藏与actionbar的app 图标关联起来,当展开与隐藏的时候图标有一定的平移效果,点击图标的时候还能展开或者隐藏菜单。
3.何为侧边菜单。
侧边菜单其实只是一个普通的View,一般里面装的是ListView,看起来就像菜单,他完全可以是一个button,textView等等。虽然称为菜单,但跟Activity的菜单形式是两码事,Activity的菜单只需要在资源文件中定义好,就能按照固定的形式显示出来。而drawerLayout的侧边菜单显示成什么样完全是取决于你自己,同样点击事件也完全由你自己去写。如下代码所示我们的侧边菜单是一个ListView显示的:
4.在代码中主动展开与隐藏侧边菜单。
在点击侧边菜单选项的时候我们往往需要隐藏菜单来显示整个菜单对应的内容。DrawerLayout.closeDrawer方法用于隐藏侧边菜单,DrawerLayout.openDrawer方法用于展开侧边菜单(参见第3点中的代码部分)
<!--菜单添加到左边则添加属性:-->
layout_gravity="start/left"
<!--菜单添加到右边则添加属性:-->
layout_gravity="end/right"
使用
布局----DrawerLayout包裹两个布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--主界面--主界面在下面因此先写-->
<include layout="@layout/layout_main" />
<!--菜单界面-->
<!--android:layout_gravity="left"---不提示自己写-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@color/colorPrimaryDark">
<include layout="@layout/menu_list" />
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
与toolbar结合
Andriod应用头部历程:TitleBar->ActionBar->ToolBar
**添加ActionBar: **
让当前应用的theme继承自v7中定义的主题Theme.AppCompat.Light
Activity需要继承AppCompatActivity或者ActionBarActivity
显示汉堡按钮
//1.取出ActionBar对象
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(getString(R.string.app_name));
//2.启用home按钮
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
//3.显示汉堡包按钮(默认是箭头)
//参1activity 参2drawerLayout 参3参4(打开和关闭字符串的id--没用传0)
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 0, 0);
点击home按钮--切换
//同步状态,同步ActionBar和DrawerLayout的状态
drawerToggle.syncState();
//汉堡包按钮与箭头切换动画:
//4.给drawerLayout设置滑动监听器--drawerToggle类实现了DrawerListener
drawerLayout.addDrawerListener(drawerToggle);
//这行代码执行--就实现了汉堡与箭头随着drawerLayout滑动而进行切换
//因此只需设置home 按钮的点击事件--打开关闭menu菜单即可
home按钮的点击事件
/**
* * 当点击Actionbar的home按钮的时候会调用onOptionsItemSelected方法
*
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//这个方法实现效果同上
drawerToggle.onOptionsItemSelected(item);
return super.onOptionsItemSelected(item);
}