下载地址:https://github.com/asijack/AndroidDrawerDemo
直接上效果图如下:
是不是还不错的样子。
先看看布局文件吧
需要注意一下几点:
1、主要内容的视图(TextView)必须是DrawLayout的第一个子元素, 因为导航抽屉是在主要内容视图的上面. 2、主要内容视图设置为匹配父视图的宽度和高度, 因为它代表了整个界面导航抽屉是隐藏的. 3、抽屉视图(ListView)必须指定其水平重力与android:layout_gravity属性。 支持从右到左(RTL)语言,指定值与 "start" 代替 "left"(所以抽屉里出现在布局的右侧当布局是RTL时). 4、抽屉视图指定其宽度用dp单位和高度匹配父视图。抽屉里的宽度不能超过320 dp, 所以用户总是可以看到主要内容视图的一部分.
在来看看代码,代码算是比较容易看懂的。下面讲一下需要注意的几个地方
1、onOptionsItemSelected
//当一个可标记项目被选中时,系统将调用特定的项目选择方法比如 :onOptionsItemSelected @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { if (mDrawerLayout.isDrawerOpen(mDrawerList)) { mDrawerLayout.closeDrawer(mDrawerList); } else { mDrawerLayout.openDrawer(mDrawerList); } } return super.onOptionsItemSelected(item); }
当抽屉被打开或者说被选中时会调用这个方法。
2、OnPostCreate
//如果Activity实例是第一次启动,则不调用,以后的每次重新启动都会调用 @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); }
这个方法用的用的还是比较少的。官方的解释是:
"Called when activity start-up is complete (after onStart() and onRestoreInstanceState(Bundle) have been called).
"就是说,当Activity彻底运行起来后回调onPostCreate方法
通常我们所熟知的activity的生命周期如下:其实详细一点的生面周期如下
onCreate onStart onPost onCreate onResume onPostResume
跳转下一个activity onPause onStop
毕竟这里不是详细讲生命周期
还有跟多的Activity生命期状态相关的回调函数还有这个onNewIntent也是比较少见的,
关于这个方法onPostCreate
可以用在获取当前Activity窗口view的宽高是一个比较好的选择
言归正传本demo需要注意的第三点
3、onConfigurationChanged
我们知道在改变屏幕方向、弹出软件盘和隐藏软键盘等类似操作时,如果没有设置AndroidManifest.xml 程序是会再次执行onCreate方法的。在AndroidManifest.xml 里面设置了android:onConfigurationChanged属性后就不会再次执行onCreate方法,而会执行 onConfigurationChanged这个方法
而且首行必须是super.onConfigurationChanged(xx);