Android杂谈(20)DrawerLayout实践

来源:互联网 发布:mac win7 编辑:程序博客网 时间:2024/06/14 10:18

转载请注意:http://blog.csdn.net/wjzj000/article/details/53929870

本菜开源的一个自己写的Demo,希望能给Androider们有所帮助,水平有限,见谅见谅…
https://github.com/zhiaixinyang/PersonalCollect (拆解GitHub上的优秀框架于一体,全部拆离不含任何额外的库导入)
https://github.com/zhiaixinyang/MyFirstApp(Retrofit+RxJava+MVP)


写在前面

在杂谈系列里边基本上都是记录些简单的用法。
这次记录一个关于DrawerLayout,也就是我们常说的侧滑。
个人对侧滑不是很感冒,所以就算是简单的记一记吧。


先看一下效果:

这里写图片描述

  • 这里不要把目光集中在左上角的那个箭头那。那不是我们这次的重点,以后会写关于它的详细使用。
  • 上边的那个效果,我们直接上代码:
<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:orientation="vertical"    android:layout_height="match_parent">    <!-- 模拟的AcitonBar的效果,暂时无视就好了 -->    <FrameLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@color/black"        >        <ImageView            android:id="@+id/drawer_indicator"            android:layout_width="50dp"            android:layout_height="50dp"            android:scaleType="centerInside"            android:background="@drawable/drawer_selector"            android:layout_gravity="start"            />        <TextView            android:id="@+id/indicator_style"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="DrawerLayout"            android:paddingLeft="12dp"            android:paddingRight="12dp"            android:layout_gravity="center_vertical|end"            android:textStyle="bold"            android:textColor="@color/white"            />    </FrameLayout>    <android.support.v4.widget.DrawerLayout        android:id="@+id/drawer_layout"        android:layout_width="match_parent"        android:layout_height="match_parent">        <!-- 作为主要内容视图,下面的视图消耗整个             空间可用在两个维度中使用match_parent。 -->        <fragment            android:id="@+id/content_frame"            android:name="com.example.mbenben.studydemo.view.nav.TabFragment"            android:layout_width="match_parent"            android:layout_height="match_parent" />        <!-- android:layout_gravity =“start”        告诉DrawerLayout将它当作左侧(从左到右)的滑动抽屉,        右侧(从右到左)的语言。 抽屉以dp给定固定宽度并且延伸容器的整个高度。        实体背景用于与内容视图形成对比。 -->        <fragment            android:id="@+id/left_drawer"            android:layout_width="240dp"            android:layout_height="match_parent"            android:layout_gravity="start"            android:name="com.example.mbenben.studydemo.view.nav.TabFragment"            android:choiceMode="singleChoice"            android:background="@color/white"/>    </android.support.v4.widget.DrawerLayout></LinearLayout>
  • 这里要注意的地方就是DrawerLayout标签下的俩个布局。第一个代表我们正常显示的内容,第二个表示侧滑内容。
  • 在这里我使用的是用一个Fragment,其实用啥都行,自己定义就好。

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);        ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,mDrawerLayout,R.string.drawer_open,R.string.drawer_close);        mDrawerLayout.addDrawerListener(actionBarDrawerToggle);
  • 这里的监听直接使用的是ActionBarDrawerToggle
  • 当然我们也可以通过new的方式:
mDrawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {            @Override            public void onDrawerSlide(View drawerView, float slideOffset) {                super.onDrawerSlide(drawerView, slideOffset);            }            @Override            public void onDrawerOpened(View drawerView) {                super.onDrawerOpened(drawerView);            }            @Override            public void onDrawerClosed(View drawerView) {                super.onDrawerClosed(drawerView);            }            @Override            public void onDrawerStateChanged(int newState) {                super.onDrawerStateChanged(newState);            }        });
  • 那么这样我们就可以直接在特定的回调方法里写我们自己的逻辑了。

  • 因为在布局之中我们可以直接加载Fragment,所以我们可以随意布局我们的Fragment,然后通过静态加载的方法写进DrawerLayout的布局之中即可。所以在这里就不多展开。因为我们的布局可以在对应的Fragment的布局中随便搞,并且相关的逻辑也可以再Fragment中随表弄。而我们的Activity只需要处理回调即可。

PS:相关源码基本都存放于我的这个开源项目之中:
https://github.com/zhiaixinyang/PersonalCollect


尾声

OK,关于DrawerLayout的用法就简单写这么多,下篇内容就是关于那个可以变化的箭头!

最后希望各位看官可以star我的GitHub,三叩九拜,满地打滚求star:
https://github.com/zhiaixinyang/PersonalCollect
https://github.com/zhiaixinyang/MyFirstApp

1 0