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

Platform Versions 仪表板展示了最新的活跃设备上执行的Android系统版本号的分布。基于设备訪问Google Play商店的次数。

通常情况下,支持90%的活跃设备同一时候使用最新版本号作为target是一个好习惯。

贴士: 为了在不同的Android版本号上提供最好的特性和功能,你应该在你的应用中使用Android Support Library ,它可以同意你在老版本号的系统上使用一些近期版本号的APIs。

指定最小以及目标API级别


AndroidManifest.xml 文件描写叙述了你的应用的详情以及它支持的系统版本号。 特别的。<use-sdk元素的minSdkVersion 和targetSdkVersion 属性分别指定了应用最低兼容的API级别以及你为应用所设计以及測试的最高API级别。

比如:

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

因为新版的Android系统公布,一些样式和行为肯能改变。为了同意你的应用利用这些改变而且确保你的应用使用每一个用户的设备,你须要将targetSdkVersion 的值设置为最低可用的Android版本号。

在执行时检查系统版本号


Android为每一个平台版本号在Build 常量类中提供了唯一的标识码。在你的应用中使用这个标识码来创建条件确保仅仅有在系统版本号支持的情况下运行高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",你的应用在默认情况下再Android 3.0或更高版本号中包括ActionBar。然后要为action
bar加入菜单项目。你须要在你的menu下的资源文件里设置android:showAsAction="ifRoom" 。在一个跨版本号的XML文件里这样做也是全然没问题的,由于老版本号的Android直接忽略了这个属性(这种话。你就没有必要分开创建一个res/menu-v11/文件夹)。

使用平台的样式和主题


Android为用户提供了用户体验主题,它赋予应用底层操作系统的界面和感觉。这些主题能够在你的应用的清单文件里被应用。通过设用这些内置的样式和主题,你的应用就会具有每一个公布版本号的界面和感觉。

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

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

让你的activity背景透明:

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

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

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

要让主题应用到整个应用中(全部的activity),在 <application>元素中加入android:theme属性:

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

很多其它关于创建和使用主题。请參阅Styles and Themes向导。

Android学习路线(十九)支持不同设备——支持不同(Android)平台版本号的更多相关文章

  1. android 学习随笔十九(对话框、样式、主题、国际化 )

    1.对话框 package com.itheima.dialog; import android.os.Bundle; import android.app.Activity; import andr ...

  2. Android学习(十九)Dialog对话框

    一.什么是Dialog对话框 对话框是当前页面中弹出的一个小窗口,用于显示重要的提示信息,提示用户输入信息,确认信息,或者显示某种状态,如下载进度,退出提示等等.用户需要与对话框进行交互,才能回到原窗 ...

  3. Android学习路线(二十四)ActionBar Fragment运用最佳实践

    转载请注明出处:http://blog.csdn.net/sweetvvck/article/details/38645297 通过前面的几篇博客.大家看到了Google是怎样解释action bar ...

  4. Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment

    你能够把fragment看成是activity的模块化部分.它拥有自己的生命周期,接受它自己的输入事件,你能够在activity执行时加入或者删除它(有点像是一个"子activity&quo ...

  5. 学习笔记:CentOS7学习之十九:Linux网络管理技术

    目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...

  6. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  7. 十一、Android学习第十天——项目开始(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...

  8. Android学习路线指南

    看到这位大牛的博文,不禁得感概,我最近也遇到了很多问题,内心彷徨不堪,转载大牛这篇博文,是为了更好的勉励自己.原文地址在最后面. 前言 看到一篇文章中提到"最近几年国内的初级Android程 ...

  9. (转)Android学习路线总结,绝对干货

    一.前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知.懂的越多的时候你才会发现懂的越少. 如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大. ...

  10. python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法

    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...

随机推荐

  1. java中的缓存技术该如何实现

    1缓存为什么要存在?2缓存可以存在于什么地方?3缓存有哪些属性?4缓存介质? 搞清楚这4个问题,那么我们就可以随意的通过应用的场景来判断使用何种缓存了. 1. 缓存为什么要存在?一 般情况下,一个网站 ...

  2. ArrayList 和 LinkedList 区别。

    1. ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用.他们都可以对元素的增删改查进行操作. 2. ArrayList是实现了基于动态数组的数据结构,L ...

  3. java用XSSFWorkbook实现读写Excel

    /** * 读取Excel文件的内容 * @param inputStream excel文件,以InputStream的形式传入 * @param sheetName sheet名字 * @retu ...

  4. 在不使用ssr的情况下解决Vue单页面SEO问题

    遇到的问题: 近来在写个人博客的时候遇到了大家可能都会遇到的问题 Vue单页面在SEO时显得很无力,尤其是百度不会抓取动态脚本 Vue-Router配合前后端分离无法让meta标签在蜘蛛抓取时动态填充 ...

  5. 条款20:宁以pass-by-reference-to-const替换pass-by-value(Prefer pass-by-reference-to-const to pass-by-value)

    NOTE: 1.尽量以pass-by-reference-to-const 替换pass-by-value.前者通常比较高效,并可避免切割问题(slicing problem). 2.以上规则并不适用 ...

  6. 【HIHOCODER 1052 】基因工程(贪心)

    链接 问题描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段DNA上最前面的K个碱基组成的序列与最后面的K个碱基组成的序列完全一致. 例如对于序列"A ...

  7. Haproxy配置文件详解

    #/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st `cat /var/run/haproxy.pid` ################ ...

  8. 阿里巴巴集团加入W3C,成为W3C会员

    根据W3C官方推特最新消息:阿里巴巴集团正式加入W3C,成为W3C会员. W3C官方推特:https://twitter.com/w3c/status/566244180372889601 同时可以在 ...

  9. BZOJ 2561: 最小生成树【最小割/最大流】

    Description 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v), ...

  10. hdu 1565 状态压缩dp

    #include<stdio.h> #include<string.h> int Max(int a,int b) { return a>b?a:b; } int dp] ...