android - 蜂窝和向后兼容性的策略

标签 android backwards-compatibility android-3.0-honeycomb

所以我们已经看到了预览版 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/

相关文章:

android - 如何使用 Holo Theme 更改 Android 中按钮的背景颜色?

java - Android NetworkOnMainThreadException 异常

java - 将 JSON 对象反序列化为对象数组以进行 Retrofit

android - 来自 ListFragment 的 startActivityForResult 似乎没有调用 onActivityResult

android - 自定义首选项,targetSdkVersion ="11": missing indent?

ios - IBOutlets 在 iOS 8 设备上为零,但在 iOS 9 (Swift) 上工作正常

java - Android - 如何检测是否已设置闹钟(alarmmanager)

android - 从 github 导入克隆到 Eclipse 并构建路径错误

ios - 弱链接 - 检查一个类是否存在并使用该类

assembly - 为什么 32 位应用程序可以在 64 位 x86 CPU 上运行?