android 抽屉式滑动demo

来源:互联网 发布:世纪佳缘程序员被骗 编辑:程序博客网 时间:2024/04/29 12:47

下载地址:https://github.com/asijack/AndroidDrawerDemo

直接上效果图如下:

是不是还不错的样子。

先看看布局文件吧

<android.support.v4.widget.DrawerLayout    android:id="@+id/drawer_layout"    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:text="@string/app_description"/>    </RelativeLayout>    <ListView        android:id="@+id/navdrawer"        android:layout_width="@dimen/navdrawer_width"        android:layout_height="match_parent"        android:layout_gravity="start"        android:background="@android:color/white"        android:choiceMode="singleChoice"        android:divider="@android:color/transparent"        android:dividerHeight="0dp"        android:drawSelectorOnTop="false">    </ListView></android.support.v4.widget.DrawerLayout>

需要注意一下几点:
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);

 

代码下载地址:下载地址:https://github.com/asijack/AndroidDrawerDemo

用Eclipse可直接导入运行

android studio 也可以导入,可能gradle版本第一点需要改下配置文件。哪里不足望指教3q

0 0
原创粉丝点击