Android简易锁屏(四)--SlidingMenu的使用

为了让我的程序更加的现代一点,所以我想到了SlidingMenu Lib,这个库我相信大家都不陌生的,即使你没有接触过Android开发,但是只要你玩过人人、Facebook等等app,你就已经在使用它了。 SlidingMenu是一种比较新颖的菜单效果,可以从当前界面的左或者右滑动出现其设置菜单,便于节省屏幕空间,并且具有良好的用户体验 SlidingMenu的官方库地址在这里,它是基于ActionBarSherlock 由于它仅仅是一个开源库,而不是一个完整的项目,因此我们需要把它作为libary引入到自己的工程当中。

导入方法

  • 在上面的官方库地址下载该libary
  • 在Eclipse里面import这个库
  • 在你自己的项目里面右键->Properties打开属性(快捷键为Alt+Enter
  • Android->Library Add这个slidingmenu_library库
  • 注意:可能这个时候你的项目已经飘红,原因就是support_v4.jar这个包,所以在你导入这个库之前,最好删除其lib目录里面的这个v4的包

实现

我这次主要的需求就是想做一个和人人侧边栏一样的一个模仿。 (原谅我现在没有找到好一点的图床,自己的vps若上图的话可能压力有点大,暂时不会上图) 大概讲解一下需求: * 要有一个top,用来显示用户头像、用户名、积分以及返回按钮 * 中间是一个ListView,主要用来基本的菜单选项 * 下面又是一个LIstView,主要用于设置 这个基本的思想有了,我就开始搭建我的menu_top--这个相对而言比较简单,一个ImageView展示头像,3个TextView显示用户名和积分,再用一个ImageView展示返回按键。 在主要的fragment,我将menu_top include进来,然后为下面的menu预留两个ListView,分别为了以后动态的载入相应的菜单项目 由于是动态加载的,所以我们需要建立一个FrameLayout来先占用这一片空白。 之后只需要在MainActivity里面初始化一下就好了
    private void initSlidingMenu(Bundle saveInstanceState) {
        setBehindContentView(R.layout.menu_frame);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.menu_frame, new LeftMenuBottomFragment())
                .commit();

        SlidingMenu sMenu = getSlidingMenu();

        sMenu.setShadowWidthRes(R.dimen.shadow_width);
        sMenu.setShadowDrawable(R.drawable.shadow);
        sMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        sMenu.setFadeDegree(0.35f);
        sMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

    }
从上面的代码就能看出,先加载一个空的menu_frame,然后用布局好的新的Layout去加载 至于参数什么的,可以去下载官方的这个Demo 里面有很多可以设置的选项,每一个选项设置后,都可以立马看到效果 ,很好的一个Demo。 To Be Continue
吐槽一下,今天早上,中午和下午分别遇到一个Bug。 1.早上的源自于initSlidingMenu,App死活找不到入口,一直提示入口Activity无法被找到,上网搜索了很久,大家大部分都说是Activity未在AndroidManifest中注册。但我确实已经将其添加进来,包路径也对,但就是报错。经过一步一步的排查,找到了initSlidingMenu->setBehindContentView,发现它载入的是正确的空白layout,而下面在进行replace的时候,错把FrameLayout的id写成了该layout,导致app在加载过程中就一直失败。 我奏 2.中午的也源自于initSlidingMenu,上面的问题好不容易发现了,接下来运行后,发现侧边菜单是空白一片,很是奇怪,检查了布局xml没有问题,什么都没有问题呢?后来研究了好大一会才发现,传递的偏移的像素值是setBehindOffsetRes(R.dimen.slidingmenu_offset);改完以后就好了。 呵呵,呵呵,呵呵,太马虎了!! 3.下午的来自侧滑菜单数据的绑定(明天会说到这里),app进入的主界面就报指针为Null的错误,设置了几个断点,也单步调式了很久,依然发现不了问题。最后,在小伙伴的共同帮助下,发现原来ListView的id指向到了它们单独的layout上面了,而不是真正在menu_fragment里的ListView控件的id。。。。 What can I say,想死的心都有了,今天这状态。。