所以我们已经见过了预览SDK和新的酷炫功能,例如ActionBar和Fragments。为了使用这些功能,将不可避免地需要进行大量方法调用,那么有什么策略可以维护一个应用程序版本,让我可以使用所有新功能,同时也能在运行Android 2.3或更早版本的设备上工作? 我的应用目前针对1.5-2.3版本。
所以我们已经见过了预览SDK和新的酷炫功能,例如ActionBar和Fragments。为了使用这些功能,将不可避免地需要进行大量方法调用,那么有什么策略可以维护一个应用程序版本,让我可以使用所有新功能,同时也能在运行Android 2.3或更早版本的设备上工作? 我的应用目前针对1.5-2.3版本。
现在可以将相同的Fragment API作为静态库供旧版本的Android使用;它向后兼容到Android 1.6。
有一些技巧可以用来查看您的应用程序是否可用各种新的API。通常情况下,您可能需要创建两套备选的Activities,一套使用新的高级API(ActionBar、Animators等)-另一套则不使用。
以下代码展示了如何使用反射和异常捕获来确定Fragment API的可用性,并使用版本检查来确认其他Honeycomb API是否可用。
private static boolean shinyNewAPIsSupported = android.os.Build.VERSION.SDK_INT > 10;
private static boolean fragmentsSupported = false;
private static void checkFragmentsSupported() throws NoClassDefFoundError {
fragmentsSupported = android.app.Fragment.class != null;
}
static {
try {
checkFragmentsSupported();
} catch (NoClassDefFoundError e) {
fragmentsSupported = false;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent startActivityIntent = null;
if (!shinyNewAPIsSupported)
startActivityIntent = new Intent(this, MainNonActionBarActivity.class);
else
startActivityIntent = new Intent(this, MainActionActivity.class);
startActivity(startActivityIntent);
finish();
}
一般来说,您可以使用相同的布局定义。在可用Fragment的情况下,您将在不同的Fragment中填充每个布局;在没有它们的情况下,您可能需要使用<include>
标签将它们嵌入到更复杂的Activity布局中。
如何编写支持Honeycomb向后兼容的代码的更详细的工作流程可以在这里找到:http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html
谷歌刚刚宣布蜂巢将只用于平板电脑:http://www.pcmag.com/article2/0,2817,2379271,00.asp
因此,如果您的设备仅用于移动设备,则可能根本不是问题。