在AndroidStudio中导入SlidingMenu并使用

          虽然听说SlidingMenu作者已经不推荐使用并且不再维护这个项目了,但是我觉得SlidingMenu相对于DrawableLayout还是比较优雅一些,也许有的小伙伴需要用到这个SlidingMenu,看需求吧,其实两者都不错的,今天就先讲解如何导入并且使用slidingMenu。
          第一步,导入slidingmenu.File->Import module
从你已经下好的Slidingmenu-master中导入,注意要看到build.gradle

完成后点击finish后,同步工程。同步完成后,一般都会报错,然后这个时候就要去Project目录下修改slidingMenu的build.gradle与你APP的build.gradle一致,然后再同步一次项目,有一些方法过时了,用最新的方法替换就可以了。
好了,项目导入完成了,接下来就可以看看如何使用了,接下来会详细介绍slidingMenu的使用方法和对他的常用属性做一个详细的介绍。

1.继承SlidingFragmentActivity(这个是我最常使用的方式,因为我觉得这样写的代码很美观,主Activity不会太冗杂,同时附上slidingMenu的一些常用的方法)。这里我使用了单左菜单的模式。
public class MainActivity extends SlidingFragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main_act);
        //设置侧边栏布局文件
        setBehindContentView(R.layout.layout_slidingmenu);
        //获取Slidingmenu对象
        SlidingMenu slidingMenu=getSlidingMenu();
        /**侧滑菜单附加在activity上的模式:全屏模式和actionBar不覆盖模式
         * Attaches the SlidingMenu to an entire Activity
         *
         * @param activity the Activity
         * @param slideStyle either SLIDING_CONTENT or SLIDING_WINDOW
         * @param actionbarOverlay whether or not the ActionBar is overlaid(actionBar是否覆盖)
         */
        //如果activity继承了SlidingFragmentActivity,菜单附加模式的方法就不要调用,否则会报错
//        This SlidingMenu appears to already be attached
//        slidingMenu.attachToActivity(MainActivity.this,SlidingMenu.SLIDING_WINDOW);
        /**侧滑菜单滑出后屏幕的预留宽度
         * Sets the behind offset.
         *
         * @param i The margin, in pixels, on the right of the screen that the behind view scrolls to.
         */
        slidingMenu.setBehindOffset(200);
        /**设置触摸模式,这里有三种模式,全屏触摸,边缘触摸,触摸无效。一般选择全屏触摸
         * Controls whether the SlidingMenu can be opened with a swipe gesture.
         * Options are {@link #TOUCHMODE_MARGIN TOUCHMODE_MARGIN}, {@link #TOUCHMODE_FULLSCREEN TOUCHMODE_FULLSCREEN},
         * or {@link #TOUCHMODE_NONE TOUCHMODE_NONE}
         *
         * @param i the new touch mode
         */
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        /**三种菜单模式,左右侧滑菜单,单左菜单,单右菜单
         * Sets which side the SlidingMenu should appear on.
         * @param mode must be either SlidingMenu.LEFT or SlidingMenu.RIGHT
         */
        slidingMenu.setMode(SlidingMenu.LEFT);
        /**设置菜单出入阴影
         * Sets how much the SlidingMenu fades in and out. Fade must be enabled, see
         * {@link #setFadeEnabled(boolean) setFadeEnabled(boolean)}
         *
         * @param f the new fade degree, between 0.0f and 1.0f
         */
        slidingMenu.setFadeDegree(0.5f);

        initFragment();
    }
    public void initFragment(){
        FragmentManager fragmentManager=getFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.main_fl_content,new MainFragment());
        //这里能够直接调用别的资源文件的ID,是因为我们在之前调用了setBehindContentView(R.layout.layout_slidingmenu);
        fragmentTransaction.replace(R.id.slidingmenu_fl_content,new LeftFragment());
        fragmentTransaction.commit();
    }
    private void slidingMenuFunc(){
        //设置阴影图效果,参数int resId,Drawable
        getSlidingMenu().setShadowDrawable(0);
        //设置阴影宽度,参数int px
        getSlidingMenu().setShadowWidth(0);
        //设置阴影宽度,参数int resId
        getSlidingMenu().setShadowWidthRes(0);
        //设置二级菜单布局文件,推荐该文件里只含有一个Frame,通过Fragment去替换布局文件,
        // 逻辑都可以在fragment处理,不让主Activity代码冗杂。
        getSlidingMenu().setSecondaryMenu(0);
        //展开左侧菜单
        getSlidingMenu().showMenu();
        //展开右侧菜单
        getSlidingMenu().showSecondaryMenu();
        //监听器
//        getSlidingMenu().setSecondaryOnOpenListner();
//        getSlidingMenu().setOnOpenListener();//打开时
//        getSlidingMenu().setOnOpenedListener();//打开后
//        getSlidingMenu().setOnCloseListener();
//        getSlidingMenu().setOnClosedListener();
    }
}
然后接下来是四个布局文件,为什么是四个布局文件?因为我使用了单左菜单的模式,不论是activity还是leftMenu,都采用了fragment替换FrameLayout的方式。如果是左右双开菜单,那么我就会有六个布局文件。虽然布局文件是多了一点,但是MainActivity的代码将会非常的简洁,很多逻辑代码都可以在fragment中处理,对于fragment不熟悉的开发者,可以移步看看我的另一篇博客 Fragment的简单学习与使用.接下来就贴上四个布局文件的代码,首先是原先的左菜单布局和主活动布局。






然后是两个fragment的布局,都是空的,具体界面就由开发者自己来实现了。








然后是fragment的代码
public class LeftFragment extends BaseFragment{
    public View rootView;
    @Override
    public View initViews() {
        rootView=View.inflate(activity, R.layout.frag_left_main,null);
        return rootView;
    }
}

public class MainFragment extends BaseFragment {
    public View view;
    @Override
    public View initViews() {
        view=View.inflate(activity, R.layout.frag_main_main,null);
        return null;
    }
}

好了,一个完整的SlidingMenu就可以使用了,但是值得注意的是,SlidingMenu实现沉浸式并没有那么容易,想实现沉浸式的小伙伴可以google一下。

你可能感兴趣的:(在AndroidStudio中导入SlidingMenu并使用)