【问题标题】:Backward compatible java code makes compile error向后兼容的java代码导致编译错误
【发布时间】:2014-08-15 09:55:10
【问题描述】:

我是安卓编程新手。 我知道一些函数和类不在第一个 android 版本中,所以我们必须使用不同的代码来处理不同的版本。例如,要设置按钮的背景颜色,我应该使用以下代码:

    // Set button background
    if (Build.VERSION.SDK_INT >= 16) {
        this.setBackground(background);
    } else {
        this.setBackgroundDrawable(background);
    }

我的项目的目标 API 版本是 11,所以 setBackground 会产生编译错误,setBackgroundDrawable 会产生弃用警告,我应该如何更改此代码或清单等以使此应用程序在两个版本上都可以运行?

在清单中:

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="19" />

【问题讨论】:

  • @EDittmer 不,我所知道的关于向后兼容性(在 Android 中!)就是我提到的问题

标签: java android backwards-compatibility


【解决方案1】:

如果您的背景是资源,请务必遵循 Oren 的回答。但是让我们假设您还有一些其他的Drawable 想用作您的背景。

要清除编译错误,您需要针对 API 级别 16 或更高版本进行编译。在 Eclipse 中,即主菜单中的 Project > Properties > Android;在 Android Studio 中,这就是 build.gradle 文件中的 compileSdkVersion 值。

您将不得不忍受这种弃用。

【讨论】:

  • 我正在使用 Eclipse,在项目属性窗口中我有 Android 4.4 API Level=19
  • @MJafarMash:好的,你得到的确切编译错误是什么?如果它抱怨您的 minSdkVersion 太低,您需要将 @TargetApi() 注释添加到您的问题中包含您的代码 sn-p 的方法中。有一个 Eclipse 快速修复(例如,Ctrl-1)应该会为您添加。
【解决方案2】:

您可以(并且应该)使用setBackgroundResource 引用您的背景可绘制资源。从 API 1 开始可用。如:

this.setBackgroundResource(R.drawable.your_backround_resource_id);

【讨论】:

  • 我正在编辑一个开源代码,该代码使用以下签名定义了 updateBackground 函数:private void updateBackground(Drawable background) 所以我无法访问它的 ID AFAIK。
  • 在这种情况下,CommonsWares 的答案是可行的。针对 API 16 或更高版本编译您的代码。并接受弃用。请注意,API 级别 16 还引入了您应该使用的 @targetAPI 注释。
猜你喜欢
  • 1970-01-01
  • 2013-02-10
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2014-04-09
相关资源
最近更新 更多