项目中需要使用到侧滑菜单,由于一直有点抵触使用第三方库,因为大部分库为了兼容各种需求,封装得大都比较笨重,所以就在网上找有没有自己写的自定义侧滑菜单,还真被我找到了史上最简单粗暴实现侧滑菜单 ,使用这个自定义的SlideMenu确实很轻松的给项目集成了侧滑菜单,然后却存在一些问题,比如我的主页中用到viewpager来实现广告控件,当我拉出侧滑菜单时,由于主页广告bannerView自动切换,我猜想是否是由于焦点问题,这样导致侧滑菜单自动执行了menu.close()操作,体验实在太差 ,不能忍。一开始的解决办法是当侧滑菜单滑出时,暂停bannerView自动切换,虽然有点取巧,但还是解决了那个问题。但是经理要求带滑出动画,以及淡入淡出的效果。时间紧迫,想想还是先把它放下,研究了一下大名鼎鼎的侧滑菜单:SlidingMenu框架
接入过程还是碰到了一些小问题,花了些时间,就此简单记录一下
- 查了下github,该项目好像不支持compile 方式从maven仓库添加,那就从github上面clone下项目,找到library项目
- 打开项目配置:Project Structure --> 左上角加号 --> import gradle project --> 找到对应library(最好改名为slidingMenu,以便一眼可以看出该库)
- 同样在Project Structure中添加Depenencies,添加对该项目的引用,或者可以通过moudle下的gradle文件中加入:
compile project(':slidingMenu')
4.修改slidingMenu gradle文件,大致如下,sdk版本按主项目修改:
如上算是把library成功导入了主项目,接着开始使用slidingMenu
- activity_main.xml布局如下:(slidingMenu里面包含项目主页,左侧菜单栏不放入其中)
<com.jeremyfeinstein.slidingmenu.lib.SlidingMenu xmlns:sliding="http://schemas.android.com/apk/res-auto"
android:id="@+id/slidingMenu"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include layout="@layout/activity_main" />
</com.jeremyfeinstein.slidingmenu.lib.SlidingMenu>
- MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
slidingMenu = new SlidingMenu(this);//创建对象
slidingMenu.setMode(SlidingMenu.LEFT);//设定模式,SlidingMenu在左边
slidingMenu.setBehindOffsetRes(R.dimen.sliding_menu_offset);//配置slidingmenu偏移出来的尺寸
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//全屏都可以拖拽触摸,打开slidingmenu
slidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);//附加到当前的activity上去
leftView = inflate(this, R.layout.drawable_tab, null);
slidingMenu.setMenu(leftView);//也可以直接跟layout id
}
- menu开关操作
menu.toggle();// 动态判断自动关闭或开启SlidingMenu
menu.showContent();// 显示内容
menu.showMenu();// 显示SlidingMenu
大部分情况下还是需要对左侧菜单栏布局进行操作的,监听的话就通过上面的leftView来查找指定的view。
menu开关监听
// 监听menu打开
menu.setOnOpenedListener(new OnOpenedListener() {
@Override
public void onOpened() {
}
});
// 监听menu关闭
menu.setOnClosedListener(new OnClosedListener() {
@Override
public void onClosed() {
}
});