Android SlidingMenu 開源項目 側拉菜單的使用(詳細配置)

SlidingMenu作爲最常用到的幾個開源項目之一,最初,這個是在IOS上有的,之後被應用到了android上,在google自己原生態的側拉菜單NavigationDrawer沒出現之前,這個效果已經被很多應用所使用。比如今日頭條,網易新聞,人人客戶端等等。

由於最近項目用到,所以把相關使用和配置記錄下來。

Github上的下載地址爲:下載地址


國外用到該庫的應用APP:
使用方法:
一.首先導入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這個控件:
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. public SlidingMenu initSlidingMenu(Activity activity) {  
  2.         SlidingMenu localSlidingMenu = new SlidingMenu(activity);  
  3.         localSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT);//設置左右滑菜單  
  4.         localSlidingMenu.setTouchModeAbove(SlidingMenu.LEFT);//設置要使菜單滑動,觸碰屏幕的範圍  
  5.         //localSlidingMenu.setTouchModeBehind(SlidingMenu.RIGHT);  
  6.         localSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);//設置陰影圖片的寬度  
  7.         localSlidingMenu.setShadowDrawable(R.drawable.shadow);//設置陰影圖片  
  8.         localSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//設置劃出時主頁面顯示的剩餘寬度  
  9. <span style="white-space:pre">      </span>localSlidingMenu.setFadeEnabled(true);//設置滑動時菜單的是否漸變     <span style="white-space:pre">              </span>localSlidingMenu.setFadeDegree(0.35F);//<span style="font-family: Helvetica, arial, freesans, clean, sans-serif;">設置</span>滑動時的漸變程度  
  10.         localSlidingMenu.attachToActivity(activity, SlidingMenu.RIGHT);//使SlidingMenu附加在Activity右邊  
  11. //      localSlidingMenu.setBehindWidthRes(R.dimen.left_drawer_avatar_size);//設置SlidingMenu菜單的寬度  
  12.         localSlidingMenu.setMenu(R.layout.left_drawer_fragment);//設置menu的佈局文件  
  13.         localSlidingMenu.toggle();//動態判斷自動關閉或開啓SlidingMenu  
  14.         localSlidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {  
  15.                     public void onOpened() {  
  16.                           
  17.                     }  
  18.                 });  
  19.         return localSlidingMenu;  
  20.     }  
配置設定方法中 setMode() 是常用屬性有:
1)SlidingMenu.LEFT    左測菜單
2)SlidingMenu.RIGHT   右側菜單
3)SlidingMenu.LEFT_RIGHT    左右2測菜單 
注意:如果是1)或則  2) 的話,menu界面只用setMenu()就可以設定了
   如果是3)的話,必須在加上setSecondaryMenu()這個方法
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <span style="white-space:pre">      </span>localSlidingMenu.setMenu(R.layout.left_drawer_fragment);//設置左測menu的佈局文件  
  2.         localSlidingMenu.setSecondaryMenu(R.layout.profile_drawer_right);<span style="font-family: Helvetica, arial, freesans, clean, sans-serif;">//設置右測menu的佈局文件</span>  
  3.         localSlidingMenu.setSecondaryShadowDrawable(R.drawable.shadowright);//設置右側陰影文件  
配置設定方法中 setTouchModeAbove() 是常用屬性有:
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    
配置設定中以下方法的效果是一樣的,可是實現方式不一樣:
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <span style="white-space:pre">  </span>localSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);//設置陰影圖片的寬度  
  2.     localSlidingMenu.setShadowWidth(100);//設置陰影圖片的寬度  
第一個是從資源文件中獲取 ,第二種是直接設定給它,注意,第二種設定的是像素,所以一般建議用第一種方式,其它有的方法結構一樣也是類似,以此類推。

這樣便配置完成了SlidingMenu,之後你可以去調用以下方法實現SlidingMenu的動作效果:
1)localSlidingMenu.showContent();  //隱藏Menu菜單
2)localSlidingMenu.showMenu();  //顯示Menu菜單
3)localSlidingMenu.showSecondaryMenu();  //顯示Menu第2個菜單
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方法去實現。
下面是我找到的一個相關帖子,我這裏就不做總結了,裏面有怎麼去用Fragment實現menu.點我

上面講好了用代碼的方式去實現menu側拉菜單,下面說說如何在佈局xml文件中實現類似的效果。

其實就是把SlidingMenu作爲一個view,在佈局文件中配置實現。
[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu  
  2.     xmlns:sliding="http://schemas.android.com/apk/res-auto"  
  3.     android:id="@+id/slidingmenulayout"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     sliding:viewAbove="@layout/YOUR_ABOVE_VIEW"  
  7.     sliding:viewBehind="@layout/YOUR_BEHIND_BEHIND"  
  8.     sliding:touchModeAbove="margin|fullscreen"  
  9.     sliding:behindOffset="@dimen/YOUR_OFFSET"  
  10.     sliding:behindWidth="@dimen/YOUR_WIDTH"  
  11.     sliding:behindScrollScale="@dimen/YOUR_SCALE"  
  12.     sliding:shadowDrawable="@drawable/YOUR_SHADOW"  
  13.     sliding:shadowWidth="@dimen/YOUR_SHADOW_WIDTH"  
  14.     sliding:fadeEnabled="true|false"  
  15.     sliding:fadeDegree="float"  
  16.     sliding:selectorEnabled="true|false"  
  17.     sliding:selectorDrawable="@drawable/YOUR_SELECTOR"/>  
類似於這樣,它的相關屬性配置和代碼是一樣的,只是換成了佈局中設定相關屬性而已。


使用過程中發現的問題:
1)設置了這個屬性後localSlidingMenu.setTouchModeBehind(SlidingMenu.RIGHT);
會發生測拉菜單按鈕等的焦點被奪走或失效,所以這個屬性最好不好設了。
2)關於SlidingMenu的引發的原生動畫不流暢的問題
slidingmenu會不間斷進行全局重繪,所以如果動畫多了就卡
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章