SlidingMenu

方法1:直接在activity中SlidingMenu构造方法,设置侧滑菜单,代码如下

 

public class Acty1 extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.acty1);
		//构造SlidingMenu
		SlidingMenu menu = new SlidingMenu(this);
		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_WINDOW:菜单栏里不包括ActionBar或标题
         * SLIDING_CONTENT:菜单栏里包括ActionBar或标题
         */  
        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);  
        //为侧滑菜单设置布局  
        menu.setMenu(R.layout.leftmenu);  
	}
}

 

 

方法2:通过activity继承SlidingActivity来实现侧滑菜单,代码如下:

 

public class Acty2 extends SlidingActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.acty2);
		setBehindContentView(R.layout.leftmenu);

		// configure the SlidingMenu
		SlidingMenu menu = 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);
	}
}

 然后细心的你就会发现,方法2少了两句 :

 

menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); 

 menu.setMenu(R.layout.leftmenu);  

另外,下面是两个方法实现的效果对比图:

 方法一:   方法二:

 可以看到,方法2即使没有设置:

menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); 

也会默认为“菜单栏里包括ActionBar或标题”这个效果,那么问题来了

为什么呢?

 

在此之前,如果在方法2中加上方法1中最后设置的两句代码:

 

        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);  
        menu.setMenu(R.layout.leftmenu); 

 结果是报错:

 


 通过分析源代码我们可以找到抛出这个异常的语句在这里:

 

	/**
	 * 把滑动菜单添加进所有的Activity中
	 * 
	 * @param activity the Activity
	 * @param slideStyle either SLIDING_CONTENT or SLIDING_WINDOW
	 * @param actionbarOverlay whether or not the ActionBar is overlaid
	 */
	public void attachToActivity(Activity activity, int slideStyle, boolean actionbarOverlay) {
		if (slideStyle != SLIDING_WINDOW && slideStyle != SLIDING_CONTENT)
			throw new IllegalArgumentException("slideStyle must be either SLIDING_WINDOW or SLIDING_CONTENT");

		if (getParent() != null)
			throw new IllegalStateException("This SlidingMenu appears to already be attached");

//后面的代码无关,不贴出

 这里getParent()不为空,也就是说当你创建SlidingMenu这个对象的时候,你已经设置了SlidingMenu.SLIDING_WINDOW。

 

那么,解决问题的关键就要从方法2的getSlidingMenu()方法里去寻找了。

 

		// configure the SlidingMenu
		SlidingMenu menu = getSlidingMenu();

 ctrl+左键getSlidingMenu()方法,可以找到:

 

 

	/* (non-Javadoc)
	 * @see com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivityBase#getSlidingMenu()
	 */
	public SlidingMenu getSlidingMenu() {
		return mHelper.getSlidingMenu();
	}

 再顺藤摸瓜找下去:

 

 

	/**
	 * Gets the SlidingMenu associated with this activity.
	 *
	 * @return the SlidingMenu associated with this activity.
	 */
	public SlidingMenu getSlidingMenu() {
		return mSlidingMenu;
	}

 可以看到,进入了SlidingActivityHelper这个类,这个类是SlidingActivity的帮助类,里面封装了一些初始化的方法和参数,在它的onPostCreate(Bundle savedInstanceState)方法中,我们可以看到如下代码:

 

 

		mSlidingMenu.attachToActivity(mActivity, 
				mEnableSlide ? SlidingMenu.SLIDING_WINDOW : SlidingMenu.SLIDING_CONTENT);
		

 由此可以得知,两种模式取决于mEnableSlide的值, 查看mEnableSlide的属性可以看到:

 

private boolean mEnableSlide = true;

 可以看到,mEnableSlide的默认值为true,由此可以得知,默认值状态下的SlidingMenu是设置为SLIDING_WINDOW模式的,也就解决了之前所碰到的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值