向后兼容的java代码导致编译错误

向后兼容的java代码导致编译错误,java,android,backwards-compatibility,Java,Android,Backwards Compatibility,我是android编程新手。 我知道有些函数和类不在最初的android版本中,所以我们必须在不同的版本上使用不同的代码。例如,要设置按钮的背景色,我应该使用以下代码: // Set button background if (Build.VERSION.SDK_INT >= 16) { this.setBackground(background); } else { this.setBackgroundDrawable(backgr

我是android编程新手。 我知道有些函数和类不在最初的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" />

您可以(也应该)引用您的后台可绘制资源。从API 1开始提供。例如:

this.setBackgroundResource(R.drawable.your_backround_resource_id);

如果你的背景是资源,一定要遵循奥伦的答案。但是让我们假设您有一些其他的
可绘制的
,您希望将其用作您的背景

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


你将不得不忍受这种不推荐。

@EDittmer不,我所知道的关于向后兼容性(在Android中!)的一切就是我在问题中提到的。我正在编辑一个开源代码,它定义了
updateBackground
函数,并带有以下签名:
private void updateBackground(可绘制背景)
所以我暂时无法访问它的ID。在这种情况下,Commonware的答案是正确的。根据API 16或更高版本编译代码。并忍受着这种嘲笑。请注意,API级别16还引入了注释,您应该使用它=19@MJafarMash:好的,您得到的确切编译错误是什么?如果它抱怨您的
minSdkVersion
太低,您需要将
@TargetApi()
注释添加到包含问题代码片段的方法中。有一个Eclipse快速修复程序(例如,
Ctrl
-
1
)应该为您添加它。