`
南瓜猿
  • 浏览: 45151 次
  • 性别: Icon_minigender_1
  • 来自: 长沙市
社区版块
存档分类
最新评论

使用SlidingMenu的过程中碰到的问题以及解决方式

阅读更多

 最近在钻研各种android控件方面的知识,感觉挺有意思的。

今天在学SlidingMenu的时候碰到了一个小问题,在此记下

首先这里有两种方式来使用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模式的,也就解决了之前所碰到的问题。

好吧说了这么多感觉这个问题也不算什么问题- -希望看过的大神们轻喷。。。

回头想想其实自己只要多看看源码就能轻松解决了,所以以后在使用控件的时候还是应该先分析清楚源码再使用,就不会耽误自己的时间辣~

 

 

 

 


 

  • 大小: 18.4 KB
  • 大小: 17 KB
  • 大小: 3.2 KB
1
0
分享到:
评论

相关推荐

    SlidingMenu修正

    在Android应用开发中,`SlidingMenu`是一个非常常见的组件,它允许用户通过侧滑屏幕来展示或隐藏一个菜单,这种设计模式常被用于模仿许多移动应用中的抽屉导航效果。`SlidingMenu`通常与主内容视图一同工作,当用户...

    SlidingMenu+ViewPage+ViewPage嵌套(类似网易 ) 滑动时冲突问题解决

    总的来说,处理SlidingMenu与ViewPager的滑动冲突是一项挑战,但通过理解Android触摸事件的处理机制,以及合理利用现有的库和组件,我们可以有效地解决这些问题,实现流畅的用户体验。在实际开发中,不断学习和实践...

    SlidingMenu和Listview冲突解决方案

    然而,在实际应用中,这两个组件的组合使用有时会遇到冲突问题,导致用户体验下降。本文将详细讲解如何解决SlidingMenu与ListView的冲突。 首先,理解问题的根源。SlidingMenu通常是通过覆盖主布局的一半或全部来...

    SlidingMenu 左右滑动 按钮点击滑动

    在Android应用开发中,SlidingMenu是一个非常流行的库,它为开发者提供...在实际开发中,你可能会遇到更多复杂的需求,如滑动速度控制、菜单内容动态加载等,但有了SlidingMenu的基础,解决这些问题都将变得更为容易。

    android slidingmenu demo 可以直接应用库文件

    这可能是指提供了一些在线资源,如GitHub仓库、开发者博客或者官方文档链接,帮助开发者解决在集成或使用SlidingMenu过程中遇到的问题。 6. **详细说明**: SlidingMenu通常与主Activity关联,通过监听触摸事件来...

    android 滑动菜单SlidingMenu的实现

    在实际使用过程中,可能会遇到编码问题,如编码格式问题导致的乱码。此时,确保你的项目编码格式统一为UTF-8,或者在读取文件时指定正确的字符编码,即可解决此类问题。 总的来说,SlidingMenu是一个强大且灵活的库...

    Slidingmenu-MenuDemo

    3. **集成与调试**:"Slidingmenu-MenuDemo"项目的重点在于集成和调试过程,这通常涉及到处理版本兼容性、导入依赖、设置布局以及处理可能的冲突。这个项目提供的修复和改进对于那些初次接触Slidingmenu或者遇到集成...

    SlidingMenu官方实例

    在实际使用中,开发者可能会遇到一些问题,如滑动冲突、菜单滑动速度过快等。这些问题可以通过调整SlidingMenu的配置参数或自定义手势处理来解决。 五、总结 SlidingMenu为Android应用提供了强大的侧滑菜单功能,...

    Github开源项目侧滑菜单SlidingMenu完美运行版

    本文将详细介绍如何在自己的项目中完美运行GitHub上的SlidingMenu项目,并解决可能遇到的问题。 首先,让我们了解一下SlidingMenu的基本原理。SlidingMenu是一个自定义视图,它通过覆盖主活动的左右边缘,当用户...

    slidingmenu侧滑菜单

    8. **开源社区支持**:作为开源项目,SlidingMenu拥有活跃的社区,开发者可以在这里找到示例代码、问题解答和持续的更新,有助于解决开发过程中遇到的问题。 在实际应用中,开发者可以结合Android的Fragment组件来...

    安卓SlidingMenu各种菜单侧滑菜单相关-新手侧滑菜单例子.rar

    这通常会包括关键类的解释、主要函数的作用以及可能遇到的问题和解决方案。 "点这里查看更多优质源码~.url"可能是一个链接,指向更多的Android开发资源或示例项目,对于想要扩展学习的开发者来说,这是一个宝贵的...

    Android slidingmenu修复无法侧滑沉浸式状态栏

    然而,在实际应用中,当开发者尝试将SlidingMenu与沉浸式状态栏结合时,可能会遇到一些问题。所谓的沉浸式状态栏是指状态栏与应用内容无缝融合,使整体视觉效果更加统一和沉浸。 在描述中提到的问题是,当主界面...

    安卓SlidingMenu各种菜单侧滑菜单相关-仿slidingmune的app左滑菜单效果.rar

    2. "本源码使用帮助.txt" - 这个文件可能包含了使用该源码包的指南,包括如何导入项目、理解代码结构以及可能遇到的问题和解决方法。 3. "免费下载更多源码.url" - 这是一个链接,可能指向一个网站,提供更多的免费...

    安卓SlidingMenu各种菜单侧滑菜单相关-android一款强大的侧栏菜单.rar

    - 遇到问题时,查阅SlidingMenu的官方文档或在线资源,解决运行错误或功能缺失。 7. **注意事项**: - 由于未验证所有代码,可能存在部分功能不可用的情况,需要开发者自行调整和修复。 - 学习过程中,可以参考...

    百度地图集成侧滑菜单解决黑屏问题

    在Android应用开发中,集成第三方库常常能提升开发效率,但同时也可能会遇到各种问题,比如在本案例中提到的“百度地图集成SlidingMenu后,菜单闪屏黑屏的问题”。SlidingMenu是一款流行的Android侧滑菜单库,它允许...

    安卓SlidingMenu各种菜单侧滑菜单相关-MetaballMenu实现menu点击切换动画.rar

    如果遇到问题,比如程序无法正常运行,需要根据说明文件进行调试,或者查阅Android官方文档和开发者社区的资源来解决。同时,部分代码可能需要根据实际项目需求进行调整和优化,以适应不同的应用场景。 `下载更多...

    SildingMenu

    在使用SlidingMenu的过程中,可能会遇到一些常见问题,如“library那里报错”,这可能是由于版本兼容性、依赖冲突或导入错误导致的。解决这些问题通常需要检查项目的依赖配置,确保所有库的版本与项目的最低API级别...

    tabhost案例

    通过分析源代码和资源文件,我们可以更深入地了解这种结合使用的方式,以及在实际开发中可能遇到的问题和解决方案。 总结来说,"slidingmenu与tabhost的结合使用"案例展示了如何在Android应用中构建一个多层级、多...

    侧滑菜单与ViewPager结合

    常见的实现方式包括使用第三方库如Android-Support-v4中的SlidingPaneLayout或者独立的SlidingMenu库。这些库提供了处理滑动逻辑的API,使得我们可以轻松地将菜单集成到应用中。 接着,我们来看ViewPager。...

    滑动菜单初步尝试失败

    下面我们将深入探讨滑动菜单的原理、常见实现方式以及可能遇到的问题,希望能帮助你解决困扰。 1. **滑动菜单原理**: 滑动菜单的核心在于监听用户的滑动手势并根据手势调整菜单的状态。通常,这涉及到对触摸事件的...

Global site tag (gtag.js) - Google Analytics