2013-04-03 25 views
3

我有一个项目,该项目是与Android版本10(GINGERBREAD_MR1)到17(JELLY_BEAN_MR1)兼容不同的代码行。Android的 - 如何根据使用的Android版本

所以,我想使用setBackgroundDrawable从版本16或更低版本到16和setBackground

我已经试过这样:

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

但是,Eclipse的给我:

subMessageFromToLinearLayout.setBackgroundDrawable(null);警告: “从类型视图的方法setBackgroundDrawable(可绘制)已过时”

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

如何解决这个错误,以便我可以使用这两个行,具体取决于运行的Android版本?

在此先感谢。

+0

你设定的目标16+?警告不是问题。我假设你不能建立这个项目? – Doomsknight 2013-04-03 22:06:32

回答

9

一般最稳健的一种方法利用了class lazy loading

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) 
    {...} 
} 
+0

是的,我添加了@TargetApi(Build.VERSION_CODES.JELLY_BEAN)和@SuppressWarnings(“deprecation”)的注释,并让我编译。谢谢! – 2013-04-04 20:36:33

1

你见过

ActionBarSherlock gives tons of "Call requires API level 11 (current min is 7)" errors

Android - set layout background programmatically

你可以用@TargetApi(16)和@SuppressWarnings( “弃用”)将其标记。

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

“啊,我知道了.setBackgroundDrawable(可绘制)方法,但给我的IDE曾与API 16的要求。我使用Eclipse相同的错误,它似乎是一个错误重新打开IDE和清洗后代码有点奏效,比你还要多,为麻烦感到难过“。

+0

谢谢@EntryLevelDev – 2013-04-09 21:52:58

+0

@JorgeGil欢迎 – pt2121 2013-04-10 03:13:09