drawerLayout

1.声明drawerLayout

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/home_activity_drawerroot"
    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:background="@drawable/splash_bg_red"
    tools:context="cc.hent.www.ramo_cmedcial.activity.HomeActivity">
<FrameLayout
    android:id="@+id/home_activity_drawer_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</FrameLayout>
   <FrameLayout
       android:id="@+id/home_activity_drawer_drawer"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
//这里声明为start,证明是左拉菜单,声明end,证明是右拉菜单,两者可以同时 声明
android:layout_gravity="start">

   </FrameLayout>

</android.support.v4.widget.DrawerLayout>

2.drawerLayout左侧菜单(或者右侧)的展开与隐藏可以被DrawerLayout.DrawerListener的实现监听到,这样你就可以在菜单展开与隐藏反生的时刻做一些希望做的事情,比如更新actionbar菜单等。如果你的activity有actionbar的话,还是建议你用ActionBarDrawerToggle来监听,ActionBarDrawerToggle实现了DrawerListener,所以他能做DrawerListener可以做的任何事情,同时他还能将drawerLayout的展开和隐藏与actionbar的app 图标关联起来,当展开与隐藏的时候图标有一定的平移效果,点击图标的时候还能展开或者隐藏菜单。

mDrawerToggle = new ActionBarDrawerToggle(
        this,                  /* host Activity */
        mDrawerLayout,         /* DrawerLayout object */
        R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
        R.string.drawer_open,  /* "open drawer" description for accessibility */
        R.string.drawer_close  /* "close drawer" description for accessibility */
        ) {
    public void onDrawerClosed(View view) {
        getActionBar().setTitle(mTitle);
        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
    }
    public void onDrawerOpened(View drawerView) {
        getActionBar().setTitle(mDrawerTitle);
        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
    }
};
mDrawerLayout.setDrawerListener(mDrawerToggle);

3.开启,关闭 drawer

 homeActivityDrawerRoot.openDrawer(Gravity.START);
        //关闭
        homeActivityDrawerRoot.closeDrawers();

4.drawerlayout点击事件穿透问题,当drawerlayout侧拉出现的时候,下方依然可以被点击,解决办法,

   homeActivityDrawerRoot.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide (View drawerView, float slideOffset) {
                
            }

            @Override
            public void onDrawerOpened (View drawerView) {
                //这里添加
                drawerView.setClickable(true);
                
            }

            @Override
            public void onDrawerClosed (View drawerView) {

            }

            @Override
            public void onDrawerStateChanged (int newState) {

            }
        });

 5.activity的返回键处理

 @Override
    public void onBackPressed () {
        if (homeActivityDrawerRoot.isDrawerOpen(GravityCompat.START)) {
            homeActivityDrawerRoot.closeDrawer(GravityCompat.START);
        }else{
            super.onBackPressed();
        }

    }

 

posted @ 2018-01-02 15:10  贺长寿  阅读(208)  评论(0编辑  收藏  举报