slidermenu开源库的相关问题

来源:互联网 发布:购买的淘宝音乐怎么用 编辑:程序博客网 时间:2024/05/20 05:07

解决requestFeature() must be called before adding content错误

Android 实现画面全屏(取消标题、取消状态栏):

  //取消标题
  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  
  this.setContentView(R.layout.logo); //Activity样式文件,一定要写在中间

  //取消状态栏
  this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

java.lang.RuntimeException:Unable to start activity ComponentInfo

这是因为:

java的执行顺序有关!目前遇到的这个问题就是因为在系统运行开始的时候就已经调用父类的构造方法,接着调用setContentView方法展示视图界面。R.layout.main是R.java资源类中的一个属性。当你在调用这个方法之后在声明Widget就会报:android.util.AndroidRuntimeException: requestFeature() must be called before adding content

所以前面的那三句中加载Activity的样式的那句代码一定要写在中间。


在Android中开源类库使用过程中兼容性等问题的讨论

1、在Android4.0环境下编译的actionbarsherlockslidingmenu类库,能不能在4.0以下的版本中使用

imageimage

相信很多人跟我一样,都以为在低版本(如Android2.1或2.3版本)编译的应用能够在高版本中运行,但高版本(比如Android3.0或4.0)中编译的应用恐怕就不能在低版本中运行。于是,我们可能就会想方设法地把一些在高版本中编译的代码,改成在低版本的Android SDK中编译,以便兼容。我们一直忽视了在<manifest>文件中关于兼容性的声明,如下面代码段。

<uses-sdk android:minSdkVersion="integer"           android:targetSdkVersion="integer"           android:maxSdkVersion="integer"
/>

android:minSdkVersion就声明了应用可以运行在最小的什么API版本之上。我们如何知道,一个应用可以运行在什么API上面呢?常查Android Reference(API文档)的同学,应该对下面这幅图很熟悉。

image

在API Reference中不仅说明了你调用的函数的功能,也说明了它是在什么版本API中引入的(见红框处)。从而我们需要检查一下自己应用中的系统调用函数的是在什么版本的API中引入的。

image

                     slidingmenu的兼容性声明

image

                   actionbarsherlock的兼容性声明

上面两幅图分别是slidingmenu、actionbarsherlock的兼容性说明。如果我们只使用slidingmenu,那么我们的应用里面的兼容性说明的android:minSdkVersion只要大于5就行了,如果同时使用slidingmenu、actionbarsherlock,那么android:minSdkVersion就必须至少是7。

对于Android高版本中引入的SDK,一般google都会推出相应的兼容包。比如在Android3.0才推出的Fragment相关API,在android-support-v4这个兼容包中就有对应的兼容API,详见创建Fragment。

最后,做一个结论,在高版本的环境下(如Android4.0)编译的应用能不能在低版本的Android系统中运行不是看编译的SDK版本,而是取决于android:minSdkVersion这个最小API版本声明。

当然,你不能声明了android:minSdkVersion是5,结果在引用中使用了android:minSdkVersion为11才引入的API。

 

2、遇到“IllegalStateException: Both setBehindContentView must be called in onCreate in addition to setContentView.”错误

 

这个错误是在一启动,还没见到界面的时候,就爆出的错误。这是因为在代码中,缺少 setBehindContentView(R.layout.menu_frame)。而这个函数主要就是用来决定侧边栏长什么样的。

public class BaseActivity extends SlidingFragmentActivity

而这又是因为我的Activity继承了SlidingFragmentActivity(见下面代码段),这个特殊的Activity本身就带有侧边栏,因此必须在OnCreate函数那里就调用setBehindContentView()函数来设置侧边栏的样式。


1 0
原创粉丝点击