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(); } }