这篇文章主要是说明一下自己开发中使用eclipse新建navigation drawer项目后遇到的问题,就是如何代码控制drawer,抽屉的滑入滑出,说一下自己的分析过程,其实答案就在NavigationDrawerFragment.java中。
在NavigationDrawerFragment.java中可以看到关键的代码,在setUp函数中:
// If the user hasn't 'learned' about the drawer, open it to introduce
// them to the drawer,
// per the navigation drawer design guidelines.
if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
mDrawerLayout.openDrawer(mFragmentContainerView);
}
这里很明显说明了使用openDrawer便能够控制drawer的打开,然后看一下mDrawerLayout和mFragmentContainerView。
private DrawerLayout mDrawerLayout;
private View mFragmentContainerView;
上面是声明部分,再看看初始化的部分,还是在setUp函数。
public void setUp(int fragmentId, DrawerLayout drawerLayout) {
mFragmentContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
// 其余代码不再复制出来
}
所以,现在只需要找到setUp的调用语句便能给这两个变量赋值了。在MainActivity.java中,onCreate方法:
// Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
已经很明显了,直接上答案吧。
MainActivity.java
public MainActivity extends Activity {
// 用于控制drawer
private DrawerLayout mDrawerLayout;
private View mFragmentContainerView;
@Override
public void onCreate(Bundle savedInstanceState) {
mFragmentContainerView = findViewById(R.id.navigation_drawer);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
}
}
这样赋值之后,在想要控制drawer的地方使用代码mDrawerLayout.openDrawer(mFragmentContainerView)打开或mDrawerLayout.closeDrawer(mFragmentContainerView)关闭drawer。
最后提供一个使用菜单键控制drawer的代码。
<pre name="code" class="java">@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU
&& event.getAction() == KeyEvent.ACTION_DOWN) {
// 菜单键控制drawer
if (mDrawerLayout.isDrawerOpen(mFragmentContainerView))
mDrawerLayout.closeDrawer(mFragmentContainerView);
else
mDrawerLayout.openDrawer(mFragmentContainerView);
return true;
}
return super.onKeyDown(keyCode, event);
}