drawerLayout是谷歌官方提供的Support Library包中实现了侧滑菜单效果的控件,具体效果如下图
具体的实现
1.drawerLayout其实是一个布局控件,跟LinearLayout等控件是一种东西,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果,所以一般把drawerLayout作为最外层的布局。
为了方便直接套在了上一节由CoordinatorLayout布局包裹的AppBarLayout,CollapsingToolbarLayout做的可折叠的toolbar外面,CoordinatorLayout标签的内容可以随便替换成你想要的主页面布局,侧滑页面的布局主要是由下面的NavigationView决定的。其中侧滑菜单的具体样式又是由引用的子布局决定的:
app:headerLayout="@layout/header_just_username" app:menu="@menu/menu_drawer"
其中headerLayout顾名思义是头布局,而 app:menu则是子菜单,这里顺便给出头布局和子菜单的布局:
头布局header_just_username:
子菜单menu_drawer:
好了,看完布局我们再来看一下代码方面的:
在代码里面我自己定义一个名字叫setupDrawerContent方法来设置侧边栏的点击事件,传入的参数是侧边栏的NavigationView
private void setupDrawerContent(NavigationView navigationView)
{
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener()
{
@Override
public boolean onNavigationItemSelected(MenuItem menuItem)
{
//点击响应的事件写在这里
mDrawerLayout.closeDrawers();//这个方法用来关闭侧边栏
return true;
}
});
}
如果你把toolbar设置为Actionbar:
setSupportActionBar(toolbar);
则可以通过给左上角图标设置一个返回图标:
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic)
对应ActionBar.DISPLAY_HOME_AS_UP,对应id是android.R.id.home
还可以在onOptionsItemSelected方法里设置左上角图标的点击事件,这里设置的是打开侧滑菜单:
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if(id == android.R.id.home)
{
mDrawerLayout.openDrawer(GravityCompat.START);//打开侧滑菜单
return true ;
}
return super.onOptionsItemSelected(item);
}