所以我们已经看到了预览版 sdk 以及 ActionBar 和 Fragments 等简洁的新东西。使用这些方法不可避免地会进行大量方法调用,那么有什么策略可以维护应用程序的 1 个版本,这将让我可以使用所有时髦的新东西,但也可以在运行 2.3 或更低版本的设备上工作?我的应用程序目前的目标是 1.5 - 2.3。
最佳答案
相同的 fragment API 现在可用作 static library用于旧版本的 Android;它与 Android 1.6 兼容。
您可以使用一些技巧来查看各种新 API 是否可用于您的应用。一般来说,您可能想要创建两组可选的 Activity ,一组使用花哨的新 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 中膨胀每个布局,在没有 fragment 的地方,您可能想要使用 <include>
标签将其中的几个嵌入到更复杂的 Activity 布局中。
关于如何编写代码以支持 Honeycomb 的向后兼容性的更详细的工作可以在此处找到:http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html
关于android - 蜂窝和向后兼容性的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832262/