侧滑菜单可以很好的利用有限的屏幕空间来加载更多的内容,在DrawerLayout还没有出现之前都是使用SlidinglMenu来实现的,但是效果并不是很好所以今天我们就来用最新DrawerLayout和NavigationView来实现侧滑菜单
1.如果使用的是Android Studio的用户就有福利了,只需几部变可快速实现,在创建项目的时候选择带侧滑菜单的模版,在这里我们抱着学习的心态所以就来手写实现了。
2.添加degisn库的支持
compile 'com.android.support:design:23.4.0'
3.看一下一键创建的效果图
修改后的效果图(个人还是比较喜欢这种,也是费了很大劲才改好)
4.布局引入控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context="com.example.drawlayout.MainActivity">
<!-- app:popupTheme 弹出菜单的样式-->
<!-- app:theme ToolBar的样式-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ToolbarPopupTheme"
app:theme="@style/ToolBarTheme" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start">
<include layout="@layout/content_main" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
5.NavigationView的属性
app:headerLayout=""//添加头部布局,就是效果图蓝色部分
app:menu=""//添加底部的一些菜单
//设置头部布局
navigationView.addHeaderView();
//添加菜单
navigationView.inflateMenu();
6.获取头部布局的事件
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
//使用java代码添加头部布局,那么布局中我们就要删除app:headerLayout=""
View headView = getLayoutInflater().inflate(R.layout.nav_header_main, null);
navigationView.addHeaderView(headView);
navigationView.setNavigationItemSelectedListener(this);
ImageView imageView = (ImageView) headView.findViewById(R.id.imageView);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了头像", Toast.LENGTH_SHORT).show();
}
});
7.自定义ToolBar的样式
<!--toolbar标题文字颜色-->
<style name="ToolBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
<item name="android:textColorPrimary">@android:color/white</item>
</style>
<!-- toolbar弹出菜单样式 -->
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat">
<item name="android:colorBackground">@android:color/white</item>
<item name="android:textColorPrimary">@android:color/black</item>
</style>
8.实现NavigationView.OnNavigationItemSelectedListener
来获取侧滑菜单Item的点击事件
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_camera:
Toast.makeText(this, "点击了设置import", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_gallery:
Toast.makeText(this, "点击了设置Gallery", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_slideshow:
break;
case R.id.nav_manage:
break;
case R.id.nav_share:
break;
case R.id.nav_send:
break;
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}