码迷,mamicode.com
首页 > 其他好文 > 详细

第三方库SlidingMenu的使用

时间:2015-06-10 01:11:42      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

使用开发工具:IntelliJ社区版

SlidingMenu下载:https://github.com/jfeinstein10/SlidingMenu

整体过程如下:

File->Import Module导入三个工程

SlidingMenu example工程引用了ActionBarSherlock 里的Themestyle,所以需要将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

 

另:一开始使用第三方库不太熟悉,所以尝试了个笨办法,经试验是可用的。将libraryActionBarSherlock 这两个库中用到的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_framenew 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();
}

拷贝drawablevalues目录下的资源文件到自己的工程对应目录下

拷贝想要使用的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);//设置右侧菜单阴影的图片资源
//右侧SlidingMenuFragment
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;
}

 

 

第三方库SlidingMenu的使用

标签:

原文地址:http://blog.csdn.net/worst_hacker/article/details/46434329

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!