使用开发工具:IntelliJ社区版
SlidingMenu下载:https://github.com/jfeinstein10/SlidingMenu
整体过程如下:
File->Import Module导入三个工程
SlidingMenu 的example工程引用了ActionBarSherlock 里的Theme和style,所以需要将ActionBarSherlock 的工程导入。ActionBarSherlock下载:https://github.com/JakeWharton/ActionBarSherlock
添加引用:example工程使用了其他的两个库,在设置中(点右键open module settings)添加引用。
example工程添加v4包引用,这儿需要注意的是example工程和、library库和ActionBarSherlock 库使用的support包是必须是一样的,那么就需要在添加引用v4的时候使用的是同一个位置的v4包。
其他两个项目同样需要添加v4包,一样的操作。
基于上面给出的原因,将library库中的libs目录下的v4包删除。
ActionBarSherlock 库中添加了测试,所以如果不需要的话可以将test目录删除。
最后一步:
com.jeremyfeinstein.slidingmenu.exampleBaseActivity类中53行(不同的版本可能不一样)这一句:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
会报错,所以需要修改libray库中的
com.jeremyfeinstein.slidingmenu.lib.app包下的SlidingFragmentActivity(快捷键是按两下shift进行搜索),让它继承于SherlockFragmentActivity。
另:一开始使用第三方库不太熟悉,所以尝试了个笨办法,经试验是可用的。将library和ActionBarSherlock 这两个库中用到的res目录下的资源文件和src下的类文件拷贝到example中,但是因为不同的库的类中使用的资源文件目录(即R文件的目录)不一样了,所以手动需要修改的地方很多......囧
附:两个第三方库下载解压后的目录如下:
SlidingMenu-master文件夹下目录:
ActionBarSherlock-master文件夹下目录:
在自己的项目中简单使用:
添加成员变量
private Fragment mContent;
在onCreate()方法中加入
if (savedInstanceState != null)
mContent = getSupportFragmentManager().getFragment(savedInstanceState, "mContent");
if (mContent == null)
mContent = new ColorFragment(R.color.red);
和如下代码
setBehindContentView(R.layout.menu_frame);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.menu_frame, new ColorMenuFragment())
.commit();
getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
getSlidingMenu().setBehindOffsetRes(R.dimen.slidingmenu_offset);
重写方法
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "mContent", mContent);
}
定义如下方法
public void switchContent(Fragment fragment) {
mContent = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.main, fragment)
.commit();
getSlidingMenu().showContent();
}
拷贝drawable和values目录下的资源文件到自己的工程对应目录下
拷贝想要使用的fragment类文件和对应的布局文件到自己的工程中。
设置actionbar是否也移动
setSlidingActionBarEnabled(false);
SlidingMenu 常用属性介绍:
menu.setMode(SlidingMenu.LEFT);//设置左滑菜单
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动
menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度
menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
menu.setMenu(R.layout.menu_layout);//设置menu的布局文件
menu.toggle();//动态判断自动关闭或开启SlidingMenu
menu.showMenu();//显示SlidingMenu
menu.showContent();//显示内容
menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开
关于关闭menu有两个监听,简单的来说,对于menu close事件,一个是when,一个是after
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭时事件
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭后事件
左右都可以划出SlidingMenu菜单只需要设置
menu.setMode(SlidingMenu.LEFT_RIGHT);属性,然后设置右侧菜单的布局文件
menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片
设置SlidingMenu属性
sm = getSlidingMenu();
//如果只显示左侧菜单就是用LEFT,右侧就RIGHT,左右都支持就LEFT_RIGHT
sm.setMode(SlidingMenu.LEFT_RIGHT);//设置菜单滑动模式,菜单是出现在左侧还是右侧,还是左右两侧都有
sm.setShadowDrawable(R.drawable.shadow);//设置阴影的图片资源
sm.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
//sm.setBehindWidth(200);//设置菜单的宽
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的区域
支持右侧划出菜单:
//SlidingMenu可以同时支持划出左右两侧的菜单,互不冲突,而且动画优美,体验良好。
sm.setSecondaryMenu(R.layout.menu_frame2);//设置右侧菜单
sm.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源
//右侧SlidingMenu的Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, new SampleListFragment()).commit();
slidingMenu = getSlidingMenu();
//设置是左滑还是右滑,还是左右都可以滑
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
//设置阴影宽度
slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() / 40);
//设置左菜单阴影图片
slidingMenu.setShadowDrawable(R.drawable.shadow);
//设置右菜单阴影图片
slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow);
//设置菜单占屏幕的比例
slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5);
//设置滑动时菜单的是否淡入淡出
slidingMenu.setFadeEnabled(true);
//设置淡入淡出的比例
slidingMenu.setFadeDegree(0.4f);
//设置滑动时拖拽效果
slidingMenu.setBehindScrollScale(0);
//设置要使菜单滑动,触碰屏幕的范围
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
SlidingFragmentActivity中一些方法被重写成final的,所以在自己创建的Actvitiy中重写Activity的方法时,重写的是SlidingFragmentActivity中的方法。
例如
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
com.actionbarsherlock.view.MenuInflater menuInflater = getSupportMenuInflater();
menuInflater.inflate(R.menu.menu_main, menu);
return true;
}