接着我们上一篇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