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()函数来设置侧边栏的样式。

在Android中开源类库使用过程中兼容性等问题的讨论的更多相关文章

  1. 转:Oracle中SQL语句执行过程中

    Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...

  2. Android 儿子Activity在启动过程中的流程组件 &amp;&amp; 儿子Activity在一个新的进程组件启动过程

    1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文 ...

  3. 微软BI 之SSIS 系列 - 对于平面文件中 NULL 值处理过程中容易极易混淆的几个细节

    开篇介绍 最近有人问我有关文件处理中空值处理的相关问题: OLE DB Destination 中的 Keep Nulls 如何控制 NULL 值的显示? 为什么选中了 Keep Nulls 但是数据 ...

  4. oracle中自定义type、以及java中传递list到过程中的例子

    在java开发过程中有时候为了处理数据的速度更快,会把要处理的数据组装成list,把list作为过程的一个参数,在过程中批量处理,下面就以一个例子做简单的阐述,以此谨记. --药品目录智能审核 --说 ...

  5. Android无线测试之—Genymotion配置过程中常见问题

    一.前提条件: 已经部署好了Android UiAutomator测试环境. 二.在部署Genymotion时遇到了两类问题: 1.通过eclipse打开一个模拟设备,然后将编译好的jar包push到 ...

  6. EasyPlayer安卓Android流媒体播放器实现直播过程中客户端快照功能

    本文转自:http://blog.csdn.net/jyt0551/article/details/56942795 对于一个裸的RTSP URL,存放在播放列表上略显单调与枯燥.大家可以看到Easy ...

  7. android实现系统电话通话过程中自动感应黑屏

    package com.developmenttools.customui.activity; import java.util.HashSet;import java.util.Set; impor ...

  8. [置顶] NS2中TCP拥塞控制仿真过程中盲点解析

    最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...

  9. C++ 中关于optional 使用过程中遇到的问题

    头文件:#include <boost/optional.hpp> using namespace boost; optional很像一个仅能存放一个元素的容器,它实现了"未初始 ...

随机推荐

  1. mysql 重复数据防止插入:)

    insert into table (id, name, age) values(1, "A", 19) on duplicate key update name=values(n ...

  2. Ubuntu mongodb 安装和配置

    安装 MongoDB sudo apt-get install mongodb sudo apt-get install mongodb 关闭/启动 sudo service mongodb stop ...

  3. 【软件工程】电梯调度的初步实现 李亚文&&郭莉莉

    一.开门见山,代码粘 using System; using System.Collections.Generic; using System.Data; using System.Drawing; ...

  4. asp.net TreeView控件绑定数据库显示信息

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. 构建ASP.NET网站十大必备工具(1)

    最近使用ASP.NET为公司构建了一个简单的公共网站(该网站的地址:http://superexpert.com/).在这个过程中,我们使用了数量很多的免费工具,如果把构建ASP.NET网站的必备工具 ...

  6. 使用ssh-keygen设置ssh无密码登录

    http://lhflinux.blog.51cto.com/1961662/526122 ssh-keygen -t rsa 输入后,会提示创建.ssh/id_rsa.id_rsa.pub的文件,其 ...

  7. jquery :checked(过滤选择器) 和 空格:checked(后代选择器)

    jquery 过滤选择器 和 后代选择器 <%@ page language="java" contentType="text/html; charset=UTF- ...

  8. poj 2239 Selecting Courses (二分匹配)

    Selecting Courses Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8316   Accepted: 3687 ...

  9. Android学习之 Intent详解

    一. Intent 作用 Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯.比如说调用startActivity()来 ...

  10. Photoshop 使用曲线

    曲线表示的是图像的明度, 通过信息办的 HSB 信息可以看到调整曲线时整个图像明度的变化 曲线的左下角表示图片的暗部, 右下角表示图片的高光部 而曲线本身的纵坐标则表示这个部分的明度, 例如将曲线的左 ...