1、在Android4.0環境下編譯的actionbarsherlock、slidingmenu類庫,能不能在4.0以下的版本中使用
相信很多人跟我一樣,都以為在低版本(如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文檔)的同學,應該對下面這幅圖很熟悉。
在API Reference中不僅說明了你調用的函數的功能,也說明了它是在什么版本API中引入的(見紅框處)。從而我們需要檢查一下自己應用中的系統調用函數的是在什么版本的API中引入的。
slidingmenu的兼容性聲明
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()函數來設置側邊欄的樣式。
文章列表