DrawerLayout案例

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawerlayout"

    tools:context="com.cmx.week7.MainActivity">

    <!--放主页布局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffff00">

    </LinearLayout>

<!--
android:layout_gravity="right"可以决定在做还是右
-->
    <LinearLayout
        android:id="@+id/linearlayout2"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:background="#45b97c"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/lv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:divider="#CD853F"
            android:dividerHeight="2dp" >
        </ListView>
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>

Activity.java

package com.cmx.week7;

import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    private ListView mLv;

    private String[] str;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    //初始化控件
    private void initView() {
        mDrawerLayout= (DrawerLayout) findViewById(R.id.drawerlayout);
        mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
            /**
             * 当抽屉被滑动的时候调用此方法
             * slideOffset 表示 滑动的幅度(0-1)
             * drawerView 抽屉侧滑菜单栏
             */
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {

                Log.e("drawer","===="+slideOffset+"====");
            }
            /**
             * 当一个抽屉被完全打开的时候被调用
             */
            @Override
            public void onDrawerOpened(View drawerView) {

                Log.i("drawer", "抽屉被完全打开了!");

            }
            /**
             * 当一个抽屉被完全关闭的时候被调用
             */
            @Override
            public void onDrawerClosed(View drawerView) {

                Log.i("drawer", "抽屉被完全关闭了!");

            }
            /**
             * 当抽屉滑动状态改变的时候被调用
             * 状态值是STATE_IDLE(闲置--0), STATE_DRAGGING(拖拽的--1), STATE_SETTLING(固定--2)中之一。
             * 抽屉打开的时候,点击抽屉,drawer的状态就会变成STATE_DRAGGING,然后变成STATE_IDLE
             */
            @Override
            public void onDrawerStateChanged(int newState) {

                Log.i("drawer", "drawer的状态:" + newState);

            }
        });
        mLv = (ListView) findViewById(R.id.lv);
        str = new String[] { "item1", "item2", "item3"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, str);
        mLv.setAdapter(adapter);

    }
}
/**
 * 1. 必须把DrawerLayout作为布局的跟标签。
 * 2. 然后在跟标签中添加一个包含内容的视图,就是当抽屉完全隐藏的时候显示的内容布局。
 * 3. 添加一个抽屉布局,这个布局可以按照需求自己定义。
 * 4. 抽屉布局中,需要指定android:layout_gravity属性,right.
 * 5. 抽屉布局的宽度最好不要超过360dp,这样做为了当抽屉完全显示的时候,不至于把内容布局全部遮挡。
 */
原文地址:https://www.cnblogs.com/muyuge/p/6152147.html