对不同平台版本的支持

Android系统版本不断的在更新,最新的版本可以提供更好的APIs,但是在更多的设备更新之前,仍然需要在app中对旧版本提供支持。

Google提供了一个仪表盘显示不同Android版本以及不同屏幕尺寸的设备的相对数量:dashboard

指定最低和目标API Level

AndroidManifest.xml文件描述了你的app细节并且确认该app支持的Android版本。特别是标签中minSdkVersiontargetSdkVersion这两个属性确定了你的app兼容的最低API和最高API。

例如:


    
    ...

当最新的Android版本发布时,一些样式和行为可能发生更改。为了允许你的app能够使用这些更改并确保你的app能够适配每个用户设备的样式,你应该将targetSdkVersion的值设置为可用的最新的Android版本。

在运行时检查系统版本

Android在Build常量类中为每个平台版本提供了一个唯一的code。在你的app中使用这些code构建条件语句来确保依赖于更高版本API的代码仅能在这些API能适用于当前系统的条件下才能够运行。

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

注意:当解析XML资源的时候,Android会忽略掉当前设备不支持的XML属性。所以你可以安全的使用只被更新的版本支持的XML属性而不必担心旧版本遇到这些代码时会中断。举个例子,如果你设置targetSdkVersion=11,你的app包含Android 3.0以及更高版本默认的ActionBar。为了继续给action bar添加menu item,你需要在你的XML文件menu中设置android:showAsAction=”ifRoom”。在跨版本的XML文件中这样做是安全的,因为Android旧版本简单的忽略showAsAction这个属性(所以,你不需要在res/menu-v11/中有版本区分)。

使用平台样式和主题

Android提供用户体验主题,为应用程序提供底层操作系统的外观和感觉。这些主题可以通过manifest文件应用到你的app中。通过使用样式和主题的构建,你的app会自然的体现Android每个新版本的外观和感觉。

使你的activity看起来像一个对话框:


使你的activity有透明的背景:


应用你在/res/values/styles.xml中自定义的主题:


应用一个主题到你的整个app(所有的activity),添加android:theme属性到标签:


更多关于主题构建和使用:Styles and Themes guide