zoukankan      html  css  js  c++  java
  • android 抽屉式滑动demo

    下载地址: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);

  • 相关阅读:
    Git windows换行问题
    java之aop使用及自定义注解
    Shiro授权及注解式开发
    Git Gui、Ssh key的使用和ideaui配置使用Git解决冲突(下)
    Git和Github的介绍、简单操作、冲突(上)
    Shiro身份认证、盐加密
    Shiro简介、入门案例、web容器的集成
    SpringMVC入门
    Mybatis之关联关系(一对多、多对多)
    Mybatis整合(Redis、Ehcache)实现二级缓存
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4313920.html
Copyright © 2011-2022 走看看