3

我有一个与 10(GINGERBREAD_MR1) 到 17(JELLY_BEAN_MR1) 的 Android 版本兼容的项目。

所以,我想使用setBackgroundDrawable低于 16setBackground的版本和 16 或更高的版本。

我试过这个:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    subMessageFromToLinearLayout.setBackgroundDrawable(null);
} else {
    subMessageFromToLinearLayout.setBackground(null);
}

但是,Eclipse 给了我:

警告subMessageFromToLinearLayout.setBackgroundDrawable(null);“视图类型的方法 setBackgroundDrawable(Drawable) 已弃用”

并且出现错误subMessageFromToLinearLayout.setBackground(null);“调用需要 API 级别 16(当前最小值为 10):android.widget.LinearLayout#setBackground”

如何修复此错误,以便我可以根据正在运行的 Android 版本使用这两条线?

提前致谢。

4

2 回答 2

9

一般来说,最强大的方法是使用类延迟加载

static boolean isSDK17()
{
   return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
}


if (isSDK17())
    xyMode_SDK17.setXyMode(context, mode);
else
    xyMode_SDK8.setXyMode(context, mode);


@TargetApi(17)
public class xyMode_SDK17
{
  static void setXyMode(Context context, boolean mode)
  {...}
}


public class xyMode_SDK8
{
  @SuppressWarnings("deprecation")
  static void setXyMode(Context context, boolean mode)
   {...}
}
于 2013-04-04T20:14:05.553 回答
1

你见过吗

ActionBarSherlock 给出了大量“调用需要 API 级别 11(当前最小值为 7)”错误

Android - 以编程方式设置布局背景

你可以用@TargetApi(16) 和@SuppressWarnings("deprecated") 来标记它。

如果错误仍然存​​在,请尝试清理项目或重新启动 eclipse。

“啊,我知道 .setBackgroundDrawable(Drawable) 方法,但对我来说,IDE 与 api 16 要求有相同的错误。我正在使用 Eclipse,在重新打开 ide 并清理代码后它似乎是一个错误。非常非常抱歉,麻烦您了”。

于 2013-04-03T22:16:26.257 回答