DrawerLayout的使用

一、使用认知:

会将其中的FrameLayout,当做抽屉,并隐藏在左侧(封装了动画和事件)

二、注意事项:

  1. 在容器属性上设置:
   android:fitsSystemWindows="true"
    tools:openDrawer="start"
  1. 在FrameLayout上设置:
android:layout_gravity="start"

三、示例:

<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">
  <!-- 其它组件 -->
    <FrameLayout
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="start">
         <!-- 其它组件 -->
    </FrameLayout>
</android.support.v4.widget.DrawerLayout>

三、改进

针对“抽屉”的布局,使用了android.support.design.widget.NavigationView进行优化,其特点如下:

  1. 是FrameLayout的子类
  2. 配置当中出现了两个特殊的属性
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"
  1. 示例:
    <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" />

四、NavigationView的事件处理

  1. activity需要实现NavigationView.OnNavigationItemSelectedListener
  2. 在其接口方法中完成处理:
public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {
            // Handle the camera action
        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }
    //关闭Drawer
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

推荐阅读更多精彩内容