转载请保留原文出处“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”,谢谢