在最新版本的Android为app提供很好的新API时,也应该继续支持旧版本的Android直到大部分设备已经更新了。这里将要介绍如何在使用最新API带来的优点的同时继续支持老版本。

Dashboard for Platform Versions会经常更新来展示每个Android版本的活跃设备,是根据访问Google Play Store的设备数量统计出来的。整体上,在app支持支持最新的版本同时,支持90%以上的活跃设备是一个很好的体验。

提示:为了在多个Android版本中提供最好的特性和功能,应该在app中使用Android Support Library,它可以让你在旧版本上可以使用多个最新版本的API。

指定最低和最高API等级

在AndroidManifest.xml中描述了app的详细信息同时也说明了支持哪些Android版本。特别是<uses-sdk元素中的minSdkVersion和targetSdkVersion属性,他们定义了app能兼容的最低API等级和最高的API等级。

例如:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
...
</manifest>

当新版的Android发布后,一些属性和行为可能会改变。为了让app在使用新的属性同时保证app适应每个用户的设备,应该设置targetSdkVersion来指定最高支持的Android版本。

在Runtime时查看系统版本

Android在Build常量类中为每个版本地同了一个唯一的编码。在app中使用这些代码来保证那些依赖高版本的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属性,不用担心老版本遇到这些代码时会挂掉。例如,如果设置targetSdkVersion="11",app会默认在Android3.0和更高版本中包含ActionBar。然后如果要在action bar中加菜单项,需要在菜单xml资源中设置android:showAsAction="ifRoom"。在多个版本的xml文件中这样做是安全的,因为就老本的Android会直接忽视showAsAction属性(也就是说,不需要单独版本的res/menu-v11/)。

使用平台样式和主题

Android提供了一些用户体验相关的主题可以让app看起来和系统一样。这些主题可以通过manifest文件应用到app中。通过使用自带的样式和主题,app就会和每个Android系统看起来有一样的样式和感觉。

让activity看起来像一个dialog box:

 <activity android:theme="@android:style/Theme.Dialog">

让activity有一个透明的背景:

 <activity android:theme="@android:style/Theme.Translucent">

应用在/res/values/styles.xml中自定义的样式:

 <activity android:theme="@style/CustomTheme">

要把一个样式应用到整个app中(所有的activity),就在<application>元素中增加android:theme属性:

 <application android:theme="@style/CustomTheme">

更多关于创建和使用样式的信息,查看Style and Themes

Android - 支持不同的设备 - 支持不同的平台版本的更多相关文章

  1. Android - 支持不同的设备 - 支持不同的屏幕

    Android整体上按照两大类来分类设备屏幕:尺寸和分辨率.app在设备上运行应该考虑大小和分辨率.同样的,你应该包含不同的资源来让app适应不同的屏幕大小和分辨率. 整体上有四种尺寸:小的,正常的, ...

  2. Android - 支持不同的设备 - 支持不同的语言

    把app的字符串放到另外一个文件中是一个好习惯.Android用android工程中的资源文件夹让这件事变的很简单. 如果使用Android SDK Tools创建工程,这个工具会在工程的根目录下创建 ...

  3. RTSPClient工具EasyRTSPClient支持H.265,支持海思等各种芯片平台

    EasyRTSPClient是EasyDarwin开源流媒体团队开发.提供的一套非常稳定.易用.支持重连的RTSPClient工具,接口调用非常简单,再也不用像调用live555那样处理整个RTSP ...

  4. Android - 支持不同的设备

    世界上有各种不一样形状和大小的Android设备.由于有各种不同类型的设备,你的app可能在各种设备上运行.为了在Android上尽可能的成功,你的app需要使配各种不同的设备.最重要的几点需要考虑的 ...

  5. appcompat v21: 让 Android 5.0 前的设备支持 Material Design

    1. 十大Material Design开源项目 2. appcompat v21: 让 Android 5.0 前的设备支持 Material Design 主题 AppCompat已经支持最新的调 ...

  6. 国际化之Android设备支持的语种

    昨天发了关于iOS支持的语种,文章最后也补了安卓支持语种列表.但最后发现安卓设备支持跟它列的有出入,我重新完全手工整理了一遍. 我将对应的语种在安卓的语言列表里的显示,也全部逐一列出来了,方便大家到时 ...

  7. Android学习路线(十九)支持不同设备——支持不同(Android)平台版本号

    当最新的Android版本号为你的应用提供着非常棒的APIs时.你却要在很多其它的设备更新之前继续支持老的系统版本号.这篇课程怎样在继续支持低版本号的系统的情况下使用新版本号的高级API. Platf ...

  8. 传感器(2)常用api简介及列出当前设备支持的传感器代码

    Android SDK提供了Android sensor framework,可以用来访问当前Android设备内置的传感器. ASF提供了很多类和接口,可以帮助我们完成各种与传感器有关的任务. 例如 ...

  9. 【Android Developers Training】 13. 支持不同平台版本

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. Android从raw、assets、SD卡中获取资源文件内容

    先顺带提一下,raw文件夹中的文件会和project一起经过编译,而assets里面的文件不会~~~   另外,SD卡获取文件需要权限哦! //从res文件夹中的raw 文件夹中获取文件并读取数据 p ...

  2. xcode target

    A target specifies a product to build and contains the instructions for building the product from a ...

  3. Creating Contextual Menus创建上下文菜单

    A contextual menu offers actions that affect a specific item or context frame in the UI. You can pro ...

  4. JS验证身份证的合法性

    //验证身份证的合法性 function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:&quo ...

  5. VS2010添加默认路径,库以及Lib

    下面以OpenCV为例,不需要每次打开VS2010都手动添加OpenCV的库和lib,具体方法如下: VC++目录 步骤一:用任意文本编辑器打开:  VS安装目录中的\VC\VCWizards\def ...

  6. Shell split character line by line

    while read line      do            account=`echo "$line"| cut -c1-9`'|'            account ...

  7. ThinkPHP 连接Oracle的配置写法,(使用Oci扩展而非PDO的写法)

    測试了非常多遍,TP官网根本就没有给出正确的写法,并且网上搜索到的全都是错误的. 跟踪代码.终于找出了正确的配置写法,备份例如以下.(by default7#zbphp.com) 'DB_TYPE' ...

  8. robot framework 使用四:分层设计和截图以及注意事项

    再说一下眼下的主要环境信息和版本号: 操作系统:win7 64位 python版本号:2.7.6 RIDE版本号:1.2.3 selenium2library:1.5.0 selenium:2.40. ...

  9. 我写了一起 Makefile(一)

    我写了一起 Makefile  陈皓 概述—— 什么是makefile?也许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作.但我认为要作一个好的和pro ...

  10. Uva11464 开关问题

    给一个n×n的01矩阵,你的任务是将尽量少的0变成1,是的每个元素的上下左右的位置(如果存在的话)的之和均为偶数.1<=n<=15. 如果暴力整个矩阵,那么时间复杂度是O(2^(n*n)) ...