三个步骤使用DrawerLayout实现侧滑Menu

来源:互联网 发布:网络骑士小说怎么样 编辑:程序博客网 时间:2024/04/27 14:16

1.DrawerLayout简介

DrawerLayout是v4包中的,直接继承于ViewGroup。因此DrawerLayout是一个容器类。

2.DrawerLayout使用的简略步骤

DrawerLayout使用可以分成以下四步

1.在布局文件中使用Drawerlayout作为根布局。
2.DrawerLayout下写两个布局,第一个布局为Activity正常显示的内容,第二个布局为侧滑出来的Menu内容。后面笔者会使用Fragemnt写第二个布局
3.进行必要的java代码逻辑处理
4.(可选)进行动画效果完善

3.DrawerLayout的使用

按照上面所说使用DrawerLayout作为根布局,然后DrawerLayout下写两个布局,第一个布局为Activity正常显示的内容,第二个布局为侧滑出来的Menu内容。后面笔者会使用Fragemnt写第二个布局~~
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:id="@+id/drawerLayout_mainactivity"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <RelativeLayout        android:background="#FFFFFF"        android:layout_width="match_parent"        android:layout_height="match_parent" >           </RelativeLayout>    <fragment        android:id="@+id/id_left_menu"        android:name="com.example.cehua.MyFragment"        android:layout_width="200dp"        android:layout_height="match_parent"        android:layout_gravity="left"        android:tag="LEFT"  /></android.support.v4.widget.DrawerLayout>

可以看到第一个布局就是RelativeLayout~~里面没有内容~那是因为笔者偷懒只是设了一个北京颜色上去
第二个是一个fragment,宽度200dp,这个是侧滑出来的menu的宽度~~不一定合适,各位开发的过程中自己衡量要多宽。
才上了几行代码就完成了一大半是不是感觉很简单呢~~
既然上面的包含了一个fragment,那么自然也要有一个fragment的布局啦~~
嘿嘿接下来看Fragemnt布局的代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#000000"    android:orientation="vertical" >    </LinearLayout>
可以看到fragment 的布局文件依然很简洁~~没错~一切都是为了偷懒啊。读者在使用的过程中可以把menu的内容写到该布局文件中~~这里我就不写出来了


下面继续上代码~Fragment的Java文件:
public class MyFragment extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return LayoutInflater.from(getActivity()).inflate(R.layout.fragment_menu, container,false);}}
跟一般的Fragment写法一样,可以在里面处理各种空间响应和逻辑处理

接下来就是最重要的Activity的代码:
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}

呵呵,你tmd在逗我吗~~不就是一个空白的activity文件吗?没错就是空白的!写到这里就完成了,读者可以试试运行一下然后从屏幕最左侧滑向右滑,会发现有一块黑色的长方块划出来。这就是我们的menu~~只是因为笔者没有在布局文件写东西所以只有黑漆漆一片~~

当然以上只是最简单的用法那么我们接下来看看更多的用法。
用过侧滑功能的人都知道除了侧滑可以把左边那块黑不溜秋的东东划出来外,一般在左上角也有一个按钮,点击该按钮也能使menu滑出来~
那么是如何实现的呢~~由于实在太简单啦~所以笔者就简单说说~
主要是通过调用该方法使之弹出来的:
mDrawerLayout.openDrawer(Gravity.LEFT);

既然有了openDrawer自然有closeDrawer,调用closeDrawer可以使menu收回去
mDrawerLayout.closeDrawer(Gravity.LEFT);
有了这两个方法,聪明的读者就知道怎样实现点击左上角的按钮控制menu弹出来和收回去了吧-------就是通过监听左上角的按钮并记录当前的menu状态,点击左上角的按钮的时候如果menu是没有弹出来的那么就调用:
mDrawerLayout.openDrawer(Gravity.LEFT);
如果已经弹出来了就调用:
mDrawerLayout.closeDrawer(Gravity.LEFT);
调用完以上两个方法记得修改记录menu状态的变量。




4.最后说一下

以上实现的都是最简单的效果,那么如果我们想加入点动画效果呢?比如加入缩放什么的应该在哪里写呢?
DrawerLayout提供了一个监听器:
mDrawerLayout.setDrawerListener(new DrawerListener() {@Overridepublic void onDrawerStateChanged(int arg0) {}@Overridepublic void onDrawerOpened(View arg0) {// TODO Auto-generated method stub}@Overridepublic void onDrawerClosed(View arg0) {// TODO Auto-generated method stub}});
相关代码可以在这三个回调中写~

还有,一般开发过程中我们可能不止一个界面需要用到侧滑menu,那么我们是不是每个界面都写一个DrawerLayout呢?肯定是不行的,下篇则为大家介绍为侧滑menu加上动画效果,并优化提取侧滑menu的代码,使得使用menu的时候相对方便一点。








最后提供一下源码:源码下载



0 0