slidingmenu阻碍沉浸式实现的原理讲解,demo下载地址在github

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gfg156196/article/details/52986234

demo地址:https://github.com/yugu88/BaoDian

由于在网上找了很久没有可行的解决方案,都是提了一点点就不说了,所以我还是自己跟踪源码研究了一整个晚上,把众多的坑踏平,为了方便以后的人解决沉浸式传了demo。

实现过程有很多的坑,工程源代码已上传github。。。

由于slidingmenu的 jar包library包 包名类名都不同,请在github下载源码slidingmenu,slidingmenu已停止更新,我下载的是最新版本,也可以从我的项目里拷走。。。

代码中有详细的注释……主要是view层级和事件拦截的问题。。slidingmenu包内源码已经优化。

请不要使用网上流传的jar包

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //这里使用的是slidingmenu的第三种用法。
        setContentView(R.layout.slidingmenu_main);
        View view=getLayoutInflater().inflate(R.layout.main_menu_login, null, false);
        // 管理activity
        ActivityUtil.getInstance().addActivity(this);
        //初始化菜单
        initMenu(view);
        top=getTitleTop();

    }

    @Override
    protected void onResume() {
        super.onResume();
        // 判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            ((LinearLayout) findViewById(R.id.sou_s)).setPadding(0, top, 0, 0);
        }
    }

    private int getTitleTop() {
        Class<?> c=null;
        Object obj=null;
        Field field=null;
        int x=0, sbar=0;
        try {
            c=Class.forName("com.android.internal.R$dimen");
            obj=c.newInstance();
            field=c.getField("status_bar_height");
            x=Integer.parseInt(field.get(obj).toString());
            sbar=getResources().getDimensionPixelSize(x);// 状态栏高度
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        Log.e("状态栏高度:", sbar + ":" + x);
        return sbar;
    }

    private void initMenu(View view) {
        mMenu=(SlidingMenu) findViewById(R.id.slidingmenulayout);
        mMenu.setMode(SlidingMenu.LEFT);
        // 设置触摸屏幕的模式
        mMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
        //获取屏幕宽高
        DisplayMetrics dm=new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        // 设置滑动菜单视图的宽度
        mMenu.setBehindWidth(dm.widthPixels * 4 / 5);
        // 设置渐入渐出效果的值
        mMenu.setFadeDegree(0.35f);
        mMenu.setMenu(view);
        initView(view);
    }

猜你喜欢

转载自blog.csdn.net/gfg156196/article/details/52986234