SlideMenu实现沉浸式效果

SlideMenu实现沉浸式效果

SlideMenu是一个在Android上被广泛使用的开源库,它是一个仿照IOS左滑菜单开发的类似效果。 
SlideMenu开源库GuiHub地址如下: 
SlideMenu GitHub

在项目中导入SlideMenu有两种方式,一种是将SlideMenu作为Library库,然后在自己的项目中右键点击Properties–>android–>在右下方Library选项将开源库添加进来,点击apply即可;第二种方式是将SlideMenu项目中的lib包直接复制到我们的项目中(这里存在第三种方式,可以自己打Jar,略过不谈),之后如何开始利用SlideMenu添加菜单呢? 
第一步,我们一般可以写个自定义控件继承SlideMenu,其主要代码如下:

    private final Activity activity;
    SlidingMenu localSlidingMenu;

    public MySlideMenu(Activity activity) {
        this.activity = activity;
    }

    public SlidingMenu initSlidingMenu() {
        localSlidingMenu = new SlidingMenu(activity);
        localSlidingMenu.setMode(SlidingMenu.LEFT);//设置左右滑菜单
        localSlidingMenu.setTouchModeAbove(SlidingMenu.SLIDING_WINDOW);//设置要使菜单滑动,触碰屏幕的范围
        //localSlidingMenu.setTouchModeBehind(SlidingMenu.SLIDING_CONTENT);
        localSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
        localSlidingMenu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
        localSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
        localSlidingMenu.setFadeDegree(0.35F);//SlidingMenu滑动时的渐变程度
        localSlidingMenu.attachToActivity(activity, SlidingMenu.SLIDING_WINDOW);//使SlidingMenu附加在Activity右边
        localSlidingMenu.setMenu(R.layout.left_drawer_fragment);//设置menu的布局文件
        localSlidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
                    public void onOpened() {

                    }
                });
        localSlidingMenu.setOnClosedListener(new OnClosedListener() {

            @Override
            public void onClosed() {
                // TODO Auto-generated method stub

            }
        });
        return localSlidingMenu;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

其中菜单的布局文件大家可以自己设置,之后在我们的Activity的OnCreate中添加如下代码:

    MySlideMenu slide=new MySlideMenu(this);
    slide.initSlidingMenu();
  • 1
  • 2
  • 1
  • 2

这样左滑菜单即可成功导入,效果如下(来自仿今日头条源码):

SlideMenu实现沉浸式效果_第1张图片

那么,实现沉浸式菜单栏该怎么做呢: 
在Activity设置了布局文件之后加入如下代码:

if (Environment.getInstance().getOSVersionCode() >= VERSION_CODES.KITKAT) {
            getWindow().addFlags(   WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(           WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            }
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

因为沉浸式状态栏是在Android4.4才被Google引用的,所以需要先判断SDK的版本是否超过了KITKAT。在布局文件的代码中加入如下两句:

 android:clipToPadding="true"
 android:fitsSystemWindows="true"
  • 1
  • 2
  • 1
  • 2

这里是使得控件布局顶到状态栏去。 
那么在SlideMenu中加入沉浸式会是什么效果呢?请看下图: 
SlideMenu实现沉浸式效果_第2张图片 
图中显示,控件无法实现沉浸式效果。可真的是如此么?仔细观察可以发现,状态栏的颜色确实是改变了,而且变成了白色,那么说明状态栏是沉浸了的,只是下面的控件无法“顶”上去而已,那么该如何解决呢? 
通过扒SlideMenu的源码可知,SlideMenu是利用ViewGroup来作为ViewAbove和ViewBehind的容器,而这里的ViewAbove和ViewBehind就是分别代表我们的主界面布局文件和菜单布局文件。而通过查阅资料我们发现,沉浸式状态栏是仅仅支持Layout和TextView等几种控件的沉浸效果的,而且如果Layout里面的第一个控件为ImageView,沉浸效果也是无法实现的,所以,笔者这里提供两个解决方案: 
方案一:修改SlideMenu源码 (最简单实现)
SlideMenu实现沉浸式效果_第3张图片

方案二:参考http://blog.csdn.net/zf19921020/article/details/46840383

你可能感兴趣的:(Android)