SlidingMenu使用(二) Demo

接着我们上一篇blog继续。如果还不清楚如何将SlidingMenu导入Android Studio中的话,可以先看下上一篇博客SlidingMenu使用(一) 导入SlidingMenu

同样,效果图镇楼(ps:虽然是coding的网上大神的demo)

1.SlidingMenu是通过代码初始化来实现的
2.CircleImageView从效果图可以看到,这里用到了一个简单的圆角图片自定义控件
3.关键是初始化SlidingMenu,切换Fragment的方法

实现,开始粘贴代码了。主页面我们用了include标签,include的使用应该是比较简单的,如果想深入了解的可以去问下度娘,一大把。

MainActivity 继承自SlidingFragmentActivity

activity_main:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity">

    <include layout="@layout/main_head"/>
    <FrameLayout  android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent"/>

</LinearLayout>

MainActivity中初始化侧边栏,在setContentView(R.layout.activity_main);后调用

 /** * 初始化侧边栏 * @param */
    private void initSlidingMenu(Bundle savedInstanceState){
        //如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment
        if(savedInstanceState!=null){
            mContent=getSupportFragmentManager().getFragment(
                    savedInstanceState,"mContent");
        }

        if(mContent==null){
            mContent=new TodayFragment();
        }

        // 设置左侧滑动菜单
        setBehindContentView(R.layout.menu_frame_left);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.menu_frame, new LeftFragment()).commit();

        // 实例化滑动菜单对象
        SlidingMenu sm = getSlidingMenu();
        // 设置可以左右滑动的菜单
        sm.setMode(SlidingMenu.LEFT);
        // 设置滑动阴影的宽度
        sm.setShadowWidthRes(R.dimen.shadow_width);
        // 设置滑动菜单阴影的图像资源
        sm.setShadowDrawable(null);
        // 设置滑动菜单视图的宽度
        sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        // 设置渐入渐出效果的值
        sm.setFadeDegree(0.35f);
        // 设置触摸屏幕的模式,这里设置为全屏
        sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        // 设置下方视图的在滚动时的缩放比例
        sm.setBehindScrollScale(0.0f);

    }

初始化的时候注意,我们先setBehindContentView(R.layout.menu_frame_left);给了它一个容器layout(menu_frame_left)。然后将这个容器内容替换成一个确定的Fragment(LeftFragment),通过getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, new LeftFragment()).commit();实现

MainActivity提供的切换Fragment的方法

/** * 切换Fragment * * @param fragment */
    public void switchConent(Fragment fragment, String title) {
        mContent = fragment;
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.content_frame, fragment).commit();
        getSlidingMenu().showContent();
        topTextView.setText(title);
    }

LeftFragment中其实就是通过点击item切换不同的Fragment,这里的几个Fragment也相当简单

 @Override
    public void onClick(View v) {
        Fragment newContent = null;
        String title = null;
        switch (v.getId()) {
            case R.id.tvToday: // 今日
                newContent = new TodayFragment();
                title = getString(R.string.today);
                break;
            case R.id.tvLastlist:// 往期列表
                newContent = new LastListFragment();
                title = getString(R.string.lastList);
                break;
            case R.id.tvDiscussMeeting: // 讨论集会
                newContent = new DiscussFragment();
                title = getString(R.string.discussMeetting);
                break;
            case R.id.tvMyFavorites: // 我的收藏
                newContent = new MyFavoritesFragment();
                title = getString(R.string.myFavorities);
                break;
            case R.id.tvMyComments: // 我的评论
                newContent = new MyCommentsFragment();
                title = getString(R.string.myComments);
                break;
            case R.id.tvMySettings: // 设置
                newContent = new MySettingsFragment();
                title = getString(R.string.settings);
                break;
            default:
                break;
        }
        if (newContent != null) {
            switchFragment(newContent, title);
        }
    }

关键是切换Fragment的方法,在LeftFragment中

/** * 切换fragment * @param fragment */
    private void switchFragment(Fragment fragment, String title) {
        if (getActivity() == null) {
            return;
        }
        if (getActivity() instanceof MainActivity) {
            MainActivity fca = (MainActivity) getActivity();
            fca.switchConent(fragment, title);
        }
    }

SlidingMenu的功能远远不止这些,实现的方式也不一定必须是上面的方式。

源码下载: 猛戳这里
http://download.csdn.net/detail/u014733374/8820295

你可能感兴趣的:(SlidingMenu使用(二) Demo)