安卓框架——SlidingMenu使用技巧
SlidingMenu的一些常用属性 原文转载http://blog.csdn.net/zwl5670/article/details/48274109 [java] view plain copy //设置侧滑菜单的位置,可选值LEFT,RIGHT,LEFT_RIGHT(两边都有菜单时设置) menu.setMode(SlidingMenu.LEFT_RIGHT); //设置触摸屏幕的模式,可选只MARGIN,CONTENT menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); //根据dimension资源文件的ID来设置阴影的宽度 menu.setShadowWidthRes(R.dimen.shadow_width); //根据资源文件ID来设置滑动菜单的阴影效果 menu.setShadowDrawable(R.drawable.shadow); //这两个都是设置滑动菜单视图的宽度,二选一 //设置SlidingMenu离屏幕的偏移量 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置宽度 menu.setBehindWidth() //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); //设置SlidingMenu与下方视图的移动的速度比,当为1时同时移动,取值0-1 menu.setBehindScrollScale(1.0f); //设置二级菜单的阴影效果 menu.setSecondaryShadowDrawable(R.drawable.shadow); //设置右边(二级)侧滑菜单 menu.setSecondaryMenu(R.layout.right_menu_frame); //为侧滑菜单设置布局 menu.setMenu(R.layout.leftmenu); //把滑动菜单添加进所有的Activity中,可选值SLIDING_CONTENT,SLIDING_WINDOW menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 1、在Activity中通过SlidingMenu构造方法,直接设置侧滑菜单 [java] view plain copy publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SlidingMenumenu=newSlidingMenu(this);//初始化滑动菜单 menu.setMode(SlidingMenu.LEFT);//设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影的宽度 menu.setShadowDrawable(R.drawable.shadow);//设置滑动菜单的阴影效果 //设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); /** *SLIDING_WINDOWwillincludetheTitle/ActionBarinthecontent *sectionoftheSlidingMenu,whileSLIDING_CONTENTdoesnot. */ //把滑动菜单添加进所有的Activity中 menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); //为侧滑菜单设置布局 menu.setMenu(R.layout.leftmenu); } } 2、通过把Activity继承SlidingActivity a、继承SlidingActivity b、然后在onCreate中setBehindContentView(R.layout.leftmenu); 设置侧滑菜单的布局 c、通过getSlidingMenu()得到SlidingMenu对象,然后设置样式 [java] view plain copy publicclassMainActivityextendsSlidingActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setBehindContentView(R.layout.leftmenu); //configuretheSlidingMenu SlidingMenumenu=getSlidingMenu(); menu.setMode(SlidingMenu.LEFT); //设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); //设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); /** *SLIDING_WINDOWwillincludetheTitle/ActionBarinthecontent *sectionoftheSlidingMenu,whileSLIDING_CONTENTdoesnot. */ //menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); //menu.setMenu(R.layout.leftmenu); } } 3、将SlidingMenu当作普通控件 可以把SlidingMenu作为普通的view,然后在布局中声明。 [java] view plain copy <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/id_main_ly" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp"> <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu xmlns:sliding="http://schemas.android.com/apk/res-auto" android:id="@+id/slidingmenulayout" android:layout_width="120dp" android:layout_height="170dp" android:background="#ffffffff" sliding:behindOffset="0dp" sliding:behindScrollScale="1" sliding:fadeDegree="0.3" sliding:fadeEnabled="true" sliding:touchModeAbove="fullscreen" sliding:viewAbove="@layout/pic"/> </LinearLayout> </RelativeLayout> pic布局: [plain] view plain copy <?xmlversion="1.0"encoding="utf-8"?> <ImageViewxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="170dp" android:src="@drawable/zhy"/> MainActivity: [java] view plain copy packagecom.zhy.zhy_slidemenu_demo03; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importcom.jeremyfeinstein.slidingmenu.lib.SlidingMenu; publicclassMainActivityextendsActivity { privateSlidingMenumLeftMenu; @Override protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLeftMenu=(SlidingMenu)findViewById(R.id.slidingmenulayout); //configuretheSlidingMenu //SlidingMenumenu=newSlidingMenu(this); mLeftMenu.setMode(SlidingMenu.LEFT); //设置触摸屏幕的模式 mLeftMenu.setShadowWidthRes(R.dimen.shadow_width); mLeftMenu.setShadowDrawable(R.drawable.shadow); mLeftMenu.setMenu(R.layout.leftmenu); mLeftMenu.setOnClickListener(newOnClickListener() { @Override publicvoidonClick(Viewv) { if(mLeftMenu.isMenuShowing()) mLeftMenu.toggle(); } }); //设置滑动菜单视图的宽度 //设置渐入渐出效果的值 /** *SLIDING_WINDOWwillincludetheTitle/ActionBarinthecontent *sectionoftheSlidingMenu,whileSLIDING_CONTENTdoesnot. */ } } 4、SlidingMenu设置左右侧滑菜单例子 上面3个方法,SlidingMenu的布局中控件的事件都需要写在Activity中,这样代码比较臃肿,一般会使用Fragment作为侧滑菜单的布局容器。 核心代码: · [java] view plain copy FragmentleftMenuFragment=newMenuLeftFragment(); ·setBehindContentView(R.layout.left_menu_frame); ·getSupportFragmentManager().beginTransaction() ·.replace(R.id.id_left_menu_frame,leftMenuFragment).commit(); ·SlidingMenumenu=getSlidingMenu(); ·menu.setMode(SlidingMenu.LEFT_RIGHT); ·//设置触摸屏幕的模式 ·menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 先给侧滑菜单通过 setBehindContentView(R.layout.left_menu_frame); 设置一个布局,此布局中只有一个FrameLayout,然后使用FragmentManager将Fragment替换掉此Fragment,这样这个 Fragment就作为我们侧滑菜单的布局了,我们的事件处理代码也可以写在Fragement中,而不是Activity中。 MenuLeftFragment [java] view plain copy packagecom.zhy.zhy_slidemenu_demo04; importjava.util.Arrays; importjava.util.List; importandroid.os.Bundle; importandroid.support.v4.app.Fragment; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.ArrayAdapter; importandroid.widget.ListAdapter; importandroid.widget.ListView; publicclassMenuLeftFragmentextendsFragment { privateViewmView; privateListViewmCategories; privateList<String>mDatas=Arrays .asList("聊天","发现","通讯录","朋友圈","订阅号"); privateListAdaptermAdapter; @Override publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer, BundlesavedInstanceState){ if(mView==null){ initView(inflater,container); } returnmView; } privatevoidinitView(LayoutInflaterinflater,ViewGroupcontainer){ mView=inflater.inflate(R.layout.left_menu,container,false); mCategories=(ListView)mView .findViewById(R.id.id_listview_categories); mAdapter=newArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,mDatas); mCategories.setAdapter(mAdapter); } } MenuRightFragment packagecom.zhy.zhy_slidemenu_demo04; importandroid.os.Bundle; importandroid.support.v4.app.Fragment; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup; publicclassMenuRightFragmentextendsFragment{ privateViewmView; @Override publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer, BundlesavedInstanceState){ if(mView==null){ mView=inflater.inflate(R.layout.right_menu,container,false); } returnmView; } } MainActivity [java] view plain copy publicclassMainActivityextendsSlidingFragmentActivity{ privateViewPagermViewPager; privateFragmentPagerAdaptermAdapter; privateList<Fragment>mFragments=newArrayList<Fragment>(); @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); //初始化SlideMenu initRightMenu(); //初始化ViewPager initViewPager(); } privatevoidinitViewPager(){ mViewPager=(ViewPager)findViewById(R.id.id_viewpager); MainTab01tab01=newMainTab01(); MainTab02tab02=newMainTab02(); MainTab03tab03=newMainTab03(); mFragments.add(tab01); mFragments.add(tab02); mFragments.add(tab03); /** *初始化Adapter */ mAdapter=newFragmentPagerAdapter(getSupportFragmentManager()){ @Override publicintgetCount(){ returnmFragments.size(); } @Override publicFragmentgetItem(intarg0){ returnmFragments.get(arg0); } }; mViewPager.setAdapter(mAdapter); } privatevoidinitRightMenu(){ FragmentleftMenuFragment=newMenuLeftFragment(); setBehindContentView(R.layout.left_menu_frame); getSupportFragmentManager().beginTransaction() .replace(R.id.id_left_menu_frame,leftMenuFragment).commit(); SlidingMenumenu=getSlidingMenu(); menu.setMode(SlidingMenu.LEFT_RIGHT); //设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); //设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置渐入渐出效果的值 menu.setFadeDegree(0.35f); //menu.setBehindScrollScale(1.0f); menu.setSecondaryShadowDrawable(R.drawable.shadow); //设置右边(二级)侧滑菜单 menu.setSecondaryMenu(R.layout.right_menu_frame); FragmentrightMenuFragment=newMenuRightFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.id_right_menu_frame,rightMenuFragment).commit(); } publicvoidshowLeftMenu(Viewview){ getSlidingMenu().showMenu(); } publicvoidshowRightMenu(Viewview){ getSlidingMenu().showSecondaryMenu(); } } MainActivity继承的是SlidingFragmentActivity ,在Activity中FragmentPagerAdapter和viewPager作为主布局,然后分别初始化SlidingMenu的两边的菜单。