android.support.v4.widget.DrawerLayout,抽屉功能,可以实现左侧滑动菜单效果
* 布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<!--这里是嵌入ToolBar布局文件,包含了内容显示布局文件-->
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- 左侧滑动菜单 -->
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
<!--控制抽屉弹出方向,可选值为left,right,start和end -->
android:layout_gravity="start"
android:fitsSystemWindows="true"
<!-- 抽屉头部的显示布局 -->
app:headerLayout="@layout/nav_header_main"
<!-- 抽屉下部的显示布局 -->
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
- nav_header_main布局文件内容
<?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"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
app:srcCompat="@android:drawable/sym_def_app_icon" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="Android Studio"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android.studio@android.com" />
</LinearLayout>
- activity_main_drawer布局文件内容
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Import" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow" />
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="Tools" />
</group>
<item android:title="Communicate">
<menu>
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
android:title="Share" />
<item
android:id="@+id/nav_send"
android:icon="@drawable/ic_menu_send"
android:title="Send" />
</menu>
</item>
</menu>
- 初始化抽屉控件代码
private void initDrawerLayout() {
drawer1 = (DrawerLayout) findViewById(R.id.drawer_layout);
//开关:关联DrawerLayout和Toolbar,需要配合使用
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this,
drawer1,
toolbar,
//这两个参数可以不指定
R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
//drawer.setDrawerListener(toggle); 已经过时
drawer1.addDrawerListener(toggle);
// 同步DrawerLayout和Toolbar的状态
toggle.syncState();
}
- 初始化侧面菜单
private void initNavigationView() {
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override // 点击菜单项,回调此方法
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_gallery) {
Toast.makeText(MainActivity.this, "gallery", Toast.LENGTH_SHORT).show();
}
// 关闭侧滑菜单
drawer.closeDrawer(GravityCompat.START);
return true;
}
});
}