SlidingMenu 是一个Android端滑动菜单组件,功能强大而且经过简单的设置,就能实现两侧滑动菜单,还可以设置菜单的阴影、渐变色、划动模式等。 SlidingMenu 是github 上Android开源项目 能用于快速集成 Android 侧滑菜单效果 Slidingmenu 里面可以包含多种组件 fragment viewpager listview 等。
include ‘:sliding_menu’ 4. 在build.gradle(Module:app)中添加依赖 compile PRoject(‘:sliding_menu’) dependencies { compile fileTree(include: [‘*.jar’], dir: ‘libs’) compile ‘com.android.support:appcompat-v7:21.0.2’ compile project(‘:sliding_menu’) } 5. 第4步结束后我这边就提示有错误了,修改sliding_menu的build.gradle中的一些参数,如compileSdkVerdion、buildToolsVersion与你AS相匹配(可参照app的build.gradle 中的设置)
Build/Make Project(到这步SlidingMenu就已经添加成功了)1 初始化Slidingmenu: SlidingMenu menu = getSlidingMenu();
2 setMode //设置滑动模式 设置是左滑还是右滑,还是左右都可以滑 menu.setMode(SlidingMenu.LEFT);//设置左滑菜单 menu.setMode(SlidingMenu.LEFT_RIGHT);//设置左右都可滑动 menu.setMode(SlidingMenu.TOUCHMODE_NONE);//不能手势滑动
3 设置SlidingMenu阴影 menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度 menu.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源 menu.setShadowDrawable(R.drawable.shadow);//设置左侧菜单阴影图片
4 设置SlidingMenu边框距离 menu.setBehindOffsetRes();//SlidingMenu滑出时距离边框的剩余宽度 menu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5); // getWindowManager().getDefaultDisplay().getWidth() / 5 表示 距离屏幕宽度 1/5
5 设置SlidingMenu渐变 menu.setFadeEnabled(true);/是否有渐变 menu.setFadeDegree(0.35f);//设置渐变比率
6 设置SlidingMenu布局
sm = getSlidingMenu(); setBehindContentView(R.layout.main_menu_frame); sm.setSecondaryMenu(R.layout.main_menu_frame_two); messageFragment = new MessageFragment(); profileFragment = new ProfileFragment(); getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame, messageFragment).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame_two, profileFragment).commit();设置布局有3个方法 :
setContentView(R.layout.main); //设置slidingmenu中间的布局 setBehindContentView(R.layout.main_menu_frame);//设置左侧的布局 sm.setSecondaryMenu(R.layout.main_menu_frame_two);//设置右侧的布局
使用的是左右两侧 我一般设置为 fragment getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame,messageFragment).commit(); 表示为替换 fragment
7 设置SlidingMenu滑动的拖拽效果 slidingMenu.setBehindScrollScale(0);
8 设置SlidingMenu判断打开状态 并 自动关闭或开启 menu.toggle(); 如果SlidingMenu 它是open的,它会被关闭,反之亦然。
9 设置SlidingMenu触碰屏幕的范围 menu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 设置菜单滑动,触碰屏幕的范围setTouchModeAbove
10 设置SlidingMenu关闭器监听 监听主要分2种 open 和 close
open: menu.setOnOpenedListener(onOpenListener);//监听slidingmenu打开之后调用 menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开时调用
close: 两个监听器 注意看了 一个是 closed 一个是 close menu.setOnClosedListener(listener); menu.setOnCloseListener(listener);
这两个的区别就是 menu.OnCloseListener(OnClosedListener);//监听Slidingmenu关闭时事件 menu.OnClosedListener(OnClosedListener);//监听Slidingmenu关闭后事件
11 设置SlidingMenu是否淡入/淡出 menu.setFadeEnabled(true);
**重点内容**12 其它 menu.showMenu();//显示SlidingMenu menu.showContent();//显示内容 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上 menu.setMenu(R.layout.menu);//设置menu的布局文件
提示不支持getSupportActionBar等类似的方法
解决方案:修改SlideMenu中的SlidingFragmentActiviyt类,让其继承SherlockFragmentActivity 如 class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase
运行之后,一直提示找不到相关类
解决方案:这个问题一直困扰我一上午,由于每个开源库中都是用了android-support-v4.jar,所以我们需要将最新版本的这个.jar包分别考入到workplace中的libs文件夹中,统一他们的版本。
1、在Activity中通过SlidingMenu构造方法,直接设置侧滑菜单
package com.zhy.zhy_slidemenu_demo; import android.app.Activity; import android.os.Bundle; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // configure the SlidingMenu SlidingMenu menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); // 设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); // 设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // 设置渐入渐出效果的值 menu.setFadeDegree(0.35f); /** * SLIDING_WINDOW will include the Title/ActionBar in the content * section of the SlidingMenu, while SLIDING_CONTENT does not. */ menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); //为侧滑菜单设置布局 menu.setMenu(R.layout.leftmenu); } }2、通过把Activity继承SlidingActivity a、继承SlidingActivity b、然后在onCreate中setBehindContentView(R.layout.leftmenu); 设置侧滑菜单的布局 c、通过getSlidingMenu()得到SlidingMenu对象,然后设置样式
package com.zhy.zhy_slidemenu_demo02; import android.os.Bundle; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity; public class MainActivity extends SlidingActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setBehindContentView(R.layout.leftmenu); // configure the SlidingMenu SlidingMenu menu = getSlidingMenu(); menu.setMode(SlidingMenu.LEFT); // 设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); // 设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // 设置渐入渐出效果的值 menu.setFadeDegree(0.35f); } }3、将SlidingMenu当作普通控件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/id_main_ly" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp" > <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu xmlns:sliding="http://schemas.android.com/apk/res-auto" android:id="@+id/slidingmenulayout" android:layout_width="120dp" android:layout_height="170dp" android:background="#ffffffff" sliding:behindOffset="0dp" sliding:behindScrollScale="1" sliding:fadeDegree="0.3" sliding:fadeEnabled="true" sliding:touchModeAbove="fullscreen" sliding:viewAbove="@layout/pic" /> </LinearLayout> </RelativeLayout>我们SlidingMenu作为普通View在布局文件中设置了布局,并且设置了viewAbove的值为另一个布局。 下面看pic布局:
<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="170dp" android:src="@drawable/zhy" />就是一张妹子图片。 最后看主Activity: package com.zhy.zhy_slidemenu_demo03;
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
public class MainActivity extends Activity { private SlidingMenu mLeftMenu;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLeftMenu = (SlidingMenu) findViewById(R.id.slidingmenulayout); // configure the SlidingMenu // SlidingMenu menu = new SlidingMenu(this); mLeftMenu.setMode(SlidingMenu.LEFT); // 设置触摸屏幕的模式 mLeftMenu.setShadowWidthRes(R.dimen.shadow_width); mLeftMenu.setShadowDrawable(R.drawable.shadow); mLeftMenu.setMenu(R.layout.leftmenu); mLeftMenu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mLeftMenu.isMenuShowing()) mLeftMenu.toggle(); } }); // 设置滑动菜单视图的宽度 // 设置渐入渐出效果的值 }新闻热点
疑难解答