转载请注意: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