轉載請保留原文出處「http://my.oschina.net/gluoyer/blog/214399」,謝謝!php
您能夠到博客的「友情連接」中,「程序猿媛(最新下載)*.*」下載最新版本,持續更新!當前版本,也可直接點擊「當前1.6版本」下載。java
你們常會碰到造輪子的問題。已經存在的輪子,咱們沒必要再本身去造一個。只需考慮如何讓輪子更方便使用,更高效轉動。git
本文介紹了經過SlidingMenu,側滑欄做爲導航,Fragment展現頁面的功能實現:github
slidingmenu,想來你們都比較熟悉了。源碼地址:https://github.com/jfeinstein10/SlidingMenuide
一樣,在項目中使用時,碰到的各類包引用等異常,仍是比較惱人的。所以,將源碼部分剝離,修改。整理成lib包,以便更方便得引用、複用。佈局
固然,只是最基礎版本的整理,夠用便可,在應用的 libs/gl_third_lib.jar。.net
本文旨在應用,不贅述。您也可整理本身的lib庫,提升複用效率而已。code
在前面也有篇介紹導航欄實現方式的博文:程序猿媛二:Android底部導航欄(選項卡),有須要的能夠看一下。orm
本文則是介紹的另一種導航方式,先看一下運行效果:xml
實現思路以下:
在MainActivity中,集成集成庫中的SlidingFragmentActivity,併爲其設置contentView
private void setContentViews() { // customize the SlidingMenu SlidingMenu sm = getSlidingMenu(); sm.setShadowWidthRes(R.dimen.shadow_width); sm.setShadowDrawable(R.drawable.slide_menu_shadow); sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); sm.setFadeDegree(0.35f); sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); sm.setMode(SlidingMenu.LEFT_RIGHT); // 設置左側滑欄,並經過LeftMenuFragment設定初始顯示頁面 // set the Above View setContentView(R.layout.slide_menu_content_frame); LeftMenuFragment lmf = new LeftMenuFragment(); getSupportFragmentManager() .beginTransaction() .replace(R.id.content_frame, lmf.getDefaultFragment(), lmf.getDefaultTag()) .addToBackStack(lmf.getDefaultTag()) .commit(); // set the Behind View setBehindContentView(R.layout.slide_menu_frame); getSupportFragmentManager() .beginTransaction() .replace(R.id.menu_frame, lmf) .commit(); // 設置右側滑欄,如不須要,直接屏蔽便可 // set the second Behind View sm.setSecondaryMenu(R.layout.slide_menu_frame_two); sm.setSecondaryShadowDrawable(R.drawable.slide_menu_shadowright); getSupportFragmentManager() .beginTransaction() .replace(R.id.menu_frame_two, new RightMenuFragment()) .commit(); }
OK,初步的slidingmenu的調用代碼就這些了。對應的佈局xml,dimens設置,根據實際需求,自定調整便可。
從前面的圖示中可看出,左側添加了三個功能模塊:「簡介」,「工做筆記整理」,「第三方lib整理」。點擊不一樣項,中間部分顯示不一樣內容,即實現功能導航。原理上,與底部導航一致:經過Fragment的替換,顯示不一樣功能頁面。
LeftMenuFragment即上面代碼中,設置的左側滑欄的載體。其中,記錄管理着各功能模塊,實現頁面的替換。同時,定義了onLeftMenuItemClickListener,由MainActivity實現,以處理點擊事件。固然,須要注意,處理點擊時,是否爲當前顯示頁面,直接滑動到中部顯示,或者替換顯示頁面。好比,點擊簡介時:
@Override public void onLeftMenuIntroClick(String tag) { if(null == tag) { // 當前即顯示簡介頁面,滑動便可 getSlidingMenu().showContent(); } else { // 頁面改變,經過tag獲取新頁面的Fragment Fragment frg = getSupportFragmentManager().findFragmentByTag(tag); if(null == frg) { // tag爲null,頁面Fragment第一次建立 frg = new IntroFragment(); } // 切換頁面 switchContent(frg, tag); } }
右側導航欄,本次實現,點擊直接顯示,故直接在RightMenuFragment中處理。不詳述。
如有更多需求,好比說,兩側導航欄,點擊均顯示新頁面到中部內容。這次未實現,初步想來,能夠添加MenuFragment父類,將如今LeftMenuFragment中的 mSelectViewMap,及tag相關,點擊接口等,提到該父類中,同時管理兩側內容,便可。
全文完,但願對您有幫助,謝謝!
應用下載:「http://mail.sina.com.cn/netdisk/download.php?id=1aa1180fd6c1b6594ed9e56b9a19620428」
轉載請保留原文出處「http://my.oschina.net/gluoyer/blog」,謝謝