Android SlidingMenu 側拉菜單的使用(詳細配置)
SlidingMenu作為最常用到的幾個開源項目之一,最初,這個是在IOS上有的,之後被應用到了android上,在google自己原生態的側拉菜單NavigationDrawer沒出現之前,這個效果已經被很多應用所使用。比如今日頭條,網易新聞,人人客戶端等等。由於最近項目用到,所以把相關使用和配置記錄下來。
Github上的下載地址為:下載地址
國外用到該庫的應用APP:

配置設定方法中 setMode() 是常用屬性有:
配置設定方法中 setTouchModeAbove()
是常用屬性有:
第一個是從資源文件中獲取 ,第二種是直接設定給它,注意,第二種設定的是像素,所以一般建議用第一種方式,其它有的方法結構一樣也是類似,以此類推。
類似於這樣,它的相關屬性配置和代碼是一樣的,隻是換成了布局中設定相關屬性而已。
- Foursquare
- Zappos
- Rdio
- Evernote Food
- Plume
- VLC for Android
- ESPN ScoreCenter
- MLS MatchDay
- 9GAG
- Wunderlist 2
- The Verge
- MTG Familiar
- Mantano Reader
- Falcon Pro (BETA)
- MW3 Barracks
使用方法:
一.首先導入SlidingMenu這個庫文件
eclipse中的流程:菜單第一項 File --Import --選擇庫所在位置 導入
可以看到庫的結構為:

你可以直接繼承app這個包中的SlidingActivity,SlidingFragmentActivity,SlidingListActivity等這幾個類去實現這個效果,
或則直接在你的項目中的主類文件中初始化SlidingMenu,並進行配置後使用。
在SlidingMenu類的源碼中,

你可以看到,它實際上是繼承了RelativeLayout之後去賦予你給定的layout布局,然後置於你項目的左側或則右側。
蠻多大神都是自己定義一個這樣的VIEW自己去實現這個效果,這個庫就是提供了一個方便的途徑。
二.在你的項目中引入SlidingMenu這個庫
eclipse中的流程:右擊你的項目
-- Properties -- Android -- Add 選擇SlidingMenu庫
注意:可能這時你的項目會出錯或則運行時候出錯,原因就是SlidingMenu庫中已經帶有了android-support-v4.jar這個官方架包,如果你在自己的項目中也帶有這個架包的話,可能就會造成版本衝突,如果衝突了,你可以把自己項目中libs文件夾中的這個架包給刪除了。
三.在你的項目中使用這個SlidingMenu
我喜歡把SlidingMenu自定義成一個類,之後去初始化,這樣可以減少主要activity中的代碼份量,維護起來會方便的。
用代碼實現SlidingMenu這個控件:
- public SlidingMenu initSlidingMenu(Activity activity) {
- SlidingMenu localSlidingMenu = new SlidingMenu(activity);
- localSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT);//設置左右滑菜單
- localSlidingMenu.setTouchModeAbove(SlidingMenu.LEFT);//設置要使菜單滑動,觸碰屏幕的範圍
- //localSlidingMenu.setTouchModeBehind(SlidingMenu.RIGHT);
- localSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);//設置陰影圖片的寬度
- localSlidingMenu.setShadowDrawable(R.drawable.shadow);//設置陰影圖片
- localSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//設置劃出時主頁麵顯示的剩餘寬度
- <span style="white-space:pre"> </span>localSlidingMenu.setFadeEnabled(true);//設置滑動時菜單的是否漸變 <span > </span>localSlidingMenu.setFadeDegree(0.35F);//<span >設置</span>滑動時的漸變程度
- localSlidingMenu.attachToActivity(activity, SlidingMenu.RIGHT);//使SlidingMenu附加在Activity右邊
- // localSlidingMenu.setBehindWidthRes(R.dimen.left_drawer_avatar_size);//設置SlidingMenu菜單的寬度
- localSlidingMenu.setMenu(R.layout.left_drawer_fragment);//設置menu的布局文件
- localSlidingMenu.toggle();//動態判斷自動關閉或開啟SlidingMenu
- localSlidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
- public void onOpened() {
- }
- });
- return localSlidingMenu;
- }
1)SlidingMenu.LEFT 左測菜單
2)SlidingMenu.RIGHT 右側菜單
3)SlidingMenu.LEFT_RIGHT 左右2測菜單
注意:如果是1)或則
2) 的話,menu界麵隻用setMenu()就可以設定了
如果是3)的話,必須在加上setSecondaryMenu()這個方法
- <span style="white-space:pre"> </span>localSlidingMenu.setMenu(R.layout.left_drawer_fragment);//設置左測menu的布局文件
- localSlidingMenu.setSecondaryMenu(R.layout.profile_drawer_right);<span style="font-family: Helvetica, arial, freesans, clean, sans-serif;">//設置右測menu的布局文件</span>
- localSlidingMenu.setSecondaryShadowDrawable(R.drawable.shadowright);//設置右側陰影文件
1)SlidingMenu.LEFT 在左測進行拖動才會相應MENU的拖動效果
2)SlidingMenu.RIGHT 在右測進行拖動才會相應MENU的拖動效果
3)SlidingMenu.TOUCHMODE_FULLSCREEN 全屏可以拖動
配置設定方法中 attachToActivity(Activity activity, int slideStyle)中slideStyle常用屬性有:
1)SlidingMenu.LEFT
2)SlidingMenu.RIGHT
3)SlidingMenu.ABOVE
配置設定中以下方法的效果是一樣的,可是實現方式不一樣:
- <span style="white-space:pre"> </span>localSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);//設置陰影圖片的寬度
- localSlidingMenu.setShadowWidth(100);//設置陰影圖片的寬度
這樣便配置完成了SlidingMenu,之後你可以去調用以下方法實現SlidingMenu的動作效果:
1)localSlidingMenu.showContent();
//隱藏Menu菜單
2)localSlidingMenu.showMenu();
//顯示Menu菜單
3)localSlidingMenu.showSecondaryMenu();
//顯示Menu第2個菜單
4)localSlidingMenu.setOnOpenListener(OnOpenListener listener); 設置Menu菜單的打開監聽
4)localSlidingMenu.setOnOpenListener(OnOpenListener listener); 設置Menu菜單的打開監聽
5)localSlidingMenu.setOnCloseListener(OnCloseListener
listener); 設置Menu菜單的關閉時候的監聽(when)
6)localSlidingMenu.setOnClosedListener(OnClosedListener
listener);; 設置Menu菜單的關閉後的監聽(after ,和方法4是有區別的)
和一些判斷:
和一些判斷:
1)Boolean
類型:localSlidingMenu.isMenuShowing(); 判斷menu菜單是否是顯示的,顯示的話返回true,反之false。
localSlidingMenu.isSecondaryMenuShowing(); 判斷menu的第2個菜單是否是顯示的,顯示的話返回true,反之false。
上麵的流程設定的menu是通過設定layout給定的布局文件,而有的人喜歡把側拉菜單使用塊Fragment去管理,那麼可以繼承架包中的SlidingFragmentActivity方法去實現。
localSlidingMenu.isSecondaryMenuShowing(); 判斷menu的第2個菜單是否是顯示的,顯示的話返回true,反之false。
上麵的流程設定的menu是通過設定layout給定的布局文件,而有的人喜歡把側拉菜單使用塊Fragment去管理,那麼可以繼承架包中的SlidingFragmentActivity方法去實現。
下麵是我找到的一個相關帖子,我這裏就不做總結了,裏麵有怎麼去用Fragment實現menu.點我
上麵講好了用代碼的方式去實現menu側拉菜單,下麵說說如何在布局xml文件中實現類似的效果。
其實就是把SlidingMenu作為一個view,在布局文件中配置實現。
- <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu
- xmlns:sliding="https://schemas.android.com/apk/res-auto"
- android:id="@+id/slidingmenulayout"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- sliding:viewAbove="@layout/YOUR_ABOVE_VIEW"
- sliding:viewBehind="@layout/YOUR_BEHIND_BEHIND"
- sliding:touchModeAbove="margin|fullscreen"
- sliding:behindOffset="@dimen/YOUR_OFFSET"
- sliding:behindWidth="@dimen/YOUR_WIDTH"
- sliding:behindScrollScale="@dimen/YOUR_SCALE"
- sliding:shadowDrawable="@drawable/YOUR_SHADOW"
- sliding:shadowWidth="@dimen/YOUR_SHADOW_WIDTH"
- sliding:fadeEnabled="true|false"
- sliding:fadeDegree="float"
- sliding:selectorEnabled="true|false"
- sliding:selectorDrawable="@drawable/YOUR_SELECTOR"/>
使用過程中發現的問題:
1)設置了這個屬性後localSlidingMenu.setTouchModeBehind(SlidingMenu.RIGHT);
會發生測拉菜單按鈕等的焦點被奪走或失效,所以這個屬性最好不好設了。
2)關於SlidingMenu的引發的原生動畫不流暢的問題
slidingmenu會不間斷進行全局重繪,所以如果動畫多了就卡
最後更新:2017-04-03 08:26:26