Android - 支持不同的设备 - 支持不同的平台版本
在最新版本的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 - 支持不同的设备 - 支持不同的平台版本的更多相关文章
- Android - 支持不同的设备 - 支持不同的屏幕
Android整体上按照两大类来分类设备屏幕:尺寸和分辨率.app在设备上运行应该考虑大小和分辨率.同样的,你应该包含不同的资源来让app适应不同的屏幕大小和分辨率. 整体上有四种尺寸:小的,正常的, ...
- Android - 支持不同的设备 - 支持不同的语言
把app的字符串放到另外一个文件中是一个好习惯.Android用android工程中的资源文件夹让这件事变的很简单. 如果使用Android SDK Tools创建工程,这个工具会在工程的根目录下创建 ...
- RTSPClient工具EasyRTSPClient支持H.265,支持海思等各种芯片平台
EasyRTSPClient是EasyDarwin开源流媒体团队开发.提供的一套非常稳定.易用.支持重连的RTSPClient工具,接口调用非常简单,再也不用像调用live555那样处理整个RTSP ...
- Android - 支持不同的设备
世界上有各种不一样形状和大小的Android设备.由于有各种不同类型的设备,你的app可能在各种设备上运行.为了在Android上尽可能的成功,你的app需要使配各种不同的设备.最重要的几点需要考虑的 ...
- appcompat v21: 让 Android 5.0 前的设备支持 Material Design
1. 十大Material Design开源项目 2. appcompat v21: 让 Android 5.0 前的设备支持 Material Design 主题 AppCompat已经支持最新的调 ...
- 国际化之Android设备支持的语种
昨天发了关于iOS支持的语种,文章最后也补了安卓支持语种列表.但最后发现安卓设备支持跟它列的有出入,我重新完全手工整理了一遍. 我将对应的语种在安卓的语言列表里的显示,也全部逐一列出来了,方便大家到时 ...
- Android学习路线(十九)支持不同设备——支持不同(Android)平台版本号
当最新的Android版本号为你的应用提供着非常棒的APIs时.你却要在很多其它的设备更新之前继续支持老的系统版本号.这篇课程怎样在继续支持低版本号的系统的情况下使用新版本号的高级API. Platf ...
- 传感器(2)常用api简介及列出当前设备支持的传感器代码
Android SDK提供了Android sensor framework,可以用来访问当前Android设备内置的传感器. ASF提供了很多类和接口,可以帮助我们完成各种与传感器有关的任务. 例如 ...
- 【Android Developers Training】 13. 支持不同平台版本
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- UVA 639 (13.08.25)
Don't Get Rooked In chess, the rook is a piece that can move any number of squaresvertically or ho ...
- 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_2_建立开发环境
本文对应书本5.1.3的内容 书本中通过CVS下载的源码 但是笔者实践的时候发现无法下载...地址已经失效了(也许是笔者的失误输错地址所致) 可以用git下载 地址是: http://git.ecli ...
- js封装好的模仿qq消息弹窗代码
在我们的日常开发中,或者生活中.常常须要用到弹出窗.这里我们就用js模拟一下qq消息一样的弹出窗. 直接贴代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- MVC超链接
<1> return RedirectToAction(Index); //跳转到Index控制器 <%@ Page Language="C#" Inherits ...
- Java学习之道:空指针错误求解救????????????
运行下面这个主方法红色代码的地方就报如下错: https://api.weibo.com/2/users/show.json?access_token=2.00szM9cCc4R_EC6ebcf150 ...
- BNUOJ34973Liserious战队
Liserious战队 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class ...
- jquery validation remote depends 验证触发条件
背景: 1:简介页面的变化: 2:邮箱不能反复 改动页面,邮箱默认带出,但字段上带有remote验证.不能反复,焦点由邮箱输入框失去时.会默认触发remote验证. 介绍完成 watermark/2/ ...
- 【足迹C++primer】40、动态数组
动态数组 C++语言定义了第二种new表达式语法.能够分配并初始化一个对象数组.标准库中包括 一个名为allocator的类.同意我们将分配和初始化分离. 12.2.1 new和数组 void fun ...
- 初识Mongodb之[CURD]-PHP版
行动 在了实践之前,希望大家看一下上面的学习资源,了解一下基本操作. 数据连接初始账号password 账号:admin password:admin 首先我们建立一个文件:mongodb.php,设 ...
- 【leetcode】Candy(python)
题目要求的比它的邻居比自己奖励,因此,我们有最少一个多的.所有我们可以找到所有的坑,凹坑例如,存在以下三种情况. 找到全部的凹点后,我们就能够从凹点处開始向左右两个方向依次查找递增序列.当中每一个高的 ...