前面总结中多次提到过SlidingMenu,自己也对这个开源控件的使用简单的学习了一下,至于控件的编写,作为小菜的我由于水平有限,暂时没考虑去研究,先用着呗,当然要感谢这些大牛们在开源社区的贡献。废话不多说,直接看代码吧(该项目的Lib库依赖ActionBarSherlock的Lib库)
今天主要看在PropertiesActivity这个类,因为其中几乎包含了对SlidingMenu所有属性进行设置的方式方法:
首先,Activity要继承自SlidingFragmentActivity,而SlidingFragmentActivity又继承自SherlockFragmentActivity并实现SlidingActivityBase接口提供相应方法,这个我们先不仔细研究,只要我们的Activity继承自SlidingFragmentActivity就行了。
在BaseActivity中将SlidingMenu默认设置左面菜单,全屏可拉动及其他一些属性,下面看代码:
// 设置menu布局,根据模式决定是从左侧还是右侧拉出 setBehindContentView(R.layout.menu_frame); FragmentTransaction t = this.getSupportFragmentManager() .beginTransaction(); mFrag = new SampleListFragment(); t.replace(R.id.menu_frame, mFrag); t.commit(); //SlidingMenu控件的初始化 SlidingMenu sm = getSlidingMenu(); sm.setShadowWidthRes(R.dimen.shadow_width);//阴影宽度 sm.setShadowDrawable(R.drawable.shadow);//阴影Drawable sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//拉开后离边框距离 sm.setFadeDegree(0.35f); //颜色渐变比例 sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); //拉动事件区域 --全屏 getSupportActionBar().setDisplayHomeAsUpEnabled(true); //ActionBar返回启用通过设置SlidingMenu的模式:
// 设置左侧menu sm.setMode(SlidingMenu.LEFT);
// 设置右侧menu sm.setMode(SlidingMenu.RIGHT);当设置左右两侧时要注意,因为前面只添加了一个菜单布局,所以这里我们要另外再设置一个:
// 设置左右侧都有 sm.setMode(SlidingMenu.LEFT_RIGHT); // 此时要再次添加布局菜单,上一个为左侧,这个为右侧 sm.setSecondaryMenu(R.layout.menu_frame_two); getSupportFragmentManager() .beginTransaction() .replace(R.id.menu_frame_two, new SampleListFragment()).commit(); sm.setSecondaryShadowDrawable(R.drawable.shadowright);
switch (checkedId) { case R.id.touch_above_full: // 设置触摸拖动模式--全屏 getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_FULLSCREEN); break; case R.id.touch_above_margin: // 设置触摸拖动模式--边缘 getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_MARGIN); break; case R.id.touch_above_none: // 设置触摸拖动模式--关闭 getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_NONE); break; }
// 放缩比例 getSlidingMenu().setBehindScrollScale( (float) seekBar.getProgress() / seekBar.getMax());
// 菜单宽度(源码中作者把该操作隐藏) getSlidingMenu().setBehindWidth( (int) (percent * getSlidingMenu().getWidth())); getSlidingMenu().requestLayout();
if (isChecked) // 是否有阴影 getSlidingMenu() .setShadowDrawable( getSlidingMenu().getMode() == SlidingMenu.LEFT ? R.drawable.shadow: R.drawable.shadowright); else getSlidingMenu().setShadowDrawable(null);
// 设置阴影宽度 getSlidingMenu().setShadowWidth(width); getSlidingMenu().invalidate();
getSlidingMenu().setFadeEnabled(isChecked);
// 颜色渐变比例 getSlidingMenu().setFadeDegree( (float) seekBar.getProgress() / seekBar.getMax());