源码介绍Android上的菜单显示样式各不相同,其中用的最多也是体验最好的是左右滑动显示隐藏菜单,android-menudrawer是一种滑动样式菜单实现,允许用户在应用程序中实现无缝导航。该项目有多种菜单显示效果,其中最常见的是通过拖动屏幕边缘或点击操作栏上的“向上”按钮来显示。源代码运行截图源代码段packagenet.simonvt.menudrawer.samples;importnet.simonvt.menudrawer.MenuDrawer;importnet.simonvt.menudrawer.Position;importandroid.os.Build;importandroid.os.Bundle;importandroid.support.v4.app.Fragment;importandroid.support.v4.app.FragmentManager;importandroid.support.v4.app.FragmentTransaction;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.TextView;publicclassFragmentSampleextendsBaseListSample{privatestaticfinalStringSTATE_CURRENT_FRAGMENT="net.simonvt.menudrawer.samples.FragmentSample";privateFragmentManagermFragmentManager;privateFragmentTransactionmFragmentTransaction;privateStringmCurrentFragmentTag;@OverrideprotectedvoidonCreate(BundleinState){super.onCreate(inState);mFragmentManager=getSupportFragmentManager();if(inState!=null){mCurrentFragmentString=inStateSTATE_CURRENT_FRAGMENT);}else{mCurrentFragmentTag=((Item)mAdapter.getItem(0)).mTitle;attachFragment(mMenuDrawer.getContentContainer().getId(),getFragment(mCurrentFragmentTag),mCurrentFragmentTag);commitTransactions();}if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.ICE_CREAM_SANDWICH){getActionBar().setDisplayHomeAsUpEnabled(true);}mMenuDrawer.setOnDrawerStateChangeListener(newMenuDrawer.OnDrawerStateChangeListener(){@OverridepublicvoidonDrawerStateChange(intoldState,intnewState){if(newState==MenuDrawer.STATE_CLOSED){commitTransactions();}}@OverridepublicvoidonDrawerSlide(floatopenRatio,intoffsetPixels){//Donothing}});}@OverrideprotectedvoidonSaveInstanceState(BundleoutState){super.onSaveInstanceState(outState);outState.putString(STATE_CURRENT_FRAGMENT,mCurrentFragmentTag);}@OverrideprotectedvoidonMenuItemClicked(intposition,Itemitem){if(mCurrentFragmentTag!=null)detachFragment(getFragment(mCurrentFragmentFragment());mCurrentFragmentFragment());attach.getContentContainer().getId(),getFragment(item.mTitle),item.mTitle);mCurrentFragmentTag=item.mTitle;mMenuDrawer.closeMenu();}@OverrideprotectedintgetDragMode(){returnMenuDrawer.MENU_DRAG_WINDOW;}@OverrideprotectedPositiongetDrawerPosition(){returnPosition.LEFT;}protectedFragmentTransactionensureTransaction(){if(mFragmentTransaction==null){mFragmentTransaction=mFragmentManager.beginTransaction();mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);}returnmFragmentTransaction;}privateFragmentgetFragment(Stringtag){Fragmentf=mFragmentManager.findFragmentByTag(tag);if(f==null){f=SampleFragment.newInstance(tag);}returnf;}protectedvoidattachFragment(intlayout,Fragmentf,Stringtag){if(f!=null){if(f.isDetached()){ensureTransaction();mFragmentTransaction.attach(f);}elseif(!f.isAdded()){ensureTransaction();mFragmentTransaction.add(layout,f,tag);}}}protectedvoiddetachFragment(Fragmentf){if(f!=null&&!f.isDetached()){ensureTransaction();mFragmentTransaction.detach(f);}}protectedvoidcommitTransactions(){if(mFragmentTransaction!=null&&!mFragmentTransaction.isEmpty()){mFragmentTransaction.commit();mFragmentTransaction=null;}}publicstaticclassSampleFragmenttextendsFragment{privatestaticfinalStringARG_TEXT="net.simonvt.menudrawer.samples.SampleFragment.text";publicstaticSampleFragmentnewInstance(Stringtext){SampleFragmentf=newSampleFragment();Bundleargs=newBundle();args.putString(ARG_TEXT,text);f.setArguments(args);returnf;}@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){Viewv=inflater.inflate(R.layout.fragment_sample,容器,假);((TextView)v.findViewById(R.id.text)).setText(getArguments().getString(ARG_TEXT));returnv;}}}源码链接:http://down.51cto.com/data/1968347
