码迷,mamicode.com
首页 > 其他好文 > 详细

DrawerLayout + Toolbar中摁下退回键关闭应用而不是菜单的解决办法。

时间:2015-05-04 22:17:49      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:toolbar + drawerlayo

首先,关于DrawerLayout的一些了解,他是可以用于制作菜单的一个view,其中他的第一个view‘是内容区域,然后他还可以有两个view,根据他们的layout_gravity属性决定是右侧还是左侧菜单,其中等于left是左侧,等于right是右侧菜单。一般菜单都是一个listview。

我们使用ToolBar代替原来的ActionBar,让他和DrawerLayout一起使用。点击ToolBar的Navigation的图标的时候可以显示或者隐藏菜单,还有炫的效果,类似知乎APP,然后有一个问题,当我们点击显示出菜单的时候,假如点击返回键,那么他就会推出应用而不是关闭菜单,这不是我们想要的结果,解决它有两个办法。

一,我们是通过ActionBarDrawerToggle来监听DrawerLayout的打开关闭的,所以,我们可以重写ActionBarDrawerToggleonDrawerClosed和onDrawerOpend方法,然后重写onKeyDown方法,设置一个flag。具体代码如下:

mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar,
		    R.string.open, R.string.close)
		{
			@Override
			public void onDrawerClosed(View drawerView)
			{
				super.onDrawerClosed(drawerView);
				flag = false;
			}
			@Override
			public void onDrawerOpened(View drawerView)
			{
				super.onDrawerOpened(drawerView);
				flag = true;
			}
		};
		mActionBarDrawerToggle.syncState();
		mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);

public boolean onKeyDown(int keyCode, KeyEvent event)
	{
	  if(flag)
	  {
	  	mDrawerLayout.closeDrawers();
	  	return true;
	  }
		
	  return super.onKeyDown(keyCode, event);
	}

这样就可以解决这个问题了。

第二种解决方法,由于我们的左侧菜单(我的是)是使用Fragment来制作的,所以可以通过他的hid和show方法实现。

具体代码如下:

mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar,
		    R.string.open, R.string.close)
		{
			@Override
			public void onDrawerClosed(View drawerView)
			{
				super.onDrawerClosed(drawerView);
				flag = false;
			}
			@Override
			public void onDrawerOpened(View drawerView)
			{
				super.onDrawerOpened(drawerView);
				FragmentManager fm = getSupportFragmentManager();
		  	fm.beginTransaction().show(mLeftMenuFragment).commit();
				flag = true;
			}
		};
		mActionBarDrawerToggle.syncState();
		mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);

public boolean onKeyDown(int keyCode, KeyEvent event)
	{
	  if(flag)
	  {
	  	FragmentManager fm = getSupportFragmentManager();
	  	fm.beginTransaction().hide(mLeftMenuFragment).commit();
	  	return true;
	  }
	  return super.onKeyDown(keyCode, event);
	}


建议使用第一种,个人测试第二种会有卡顿,点击返回键再点击菜单按钮,菜单内容会一会儿才出现,第一种就不会。


DrawerLayout + Toolbar中摁下退回键关闭应用而不是菜单的解决办法。

标签:toolbar + drawerlayo

原文地址:http://blog.csdn.net/liweijie_chengxuyuan/article/details/45484973

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!