2012-10-25 50 views
5

在現在採用的是Android SDK API級別棄用View類的setBackgroundDrawable()方法16.android上setBackgroundDrawable的解決方法?

的新方法是setBackground()但當然這只是在API可用16

我怎樣才能解決辦法,如果我希望我的應用程序與以前的API級別兼容? (至少API 14)

目標是消除任何警告和@SupressWarnings不是我的解決方案。

+0

你試過'@TargetApi'註釋嗎? (看起來林特本身就是這樣建議的) – sandrstar

+0

@SuppressWarnings *是解決方案。如果您的目標是API 14,並且您不需要新API的任何功能,那麼調用較舊的API並抑制警告是正確的。 –

回答

15

通常的方法是這樣的一個:

if (android.os.Build.VERSION.SDK_INT >= 16) 
    setBackground(...); 
else 
    setBackgroundDrawable(...); 

在另一方面,你可以使用感言:

try { 
    Method setBackground = View.class.getMethod("setBackground", Drawable.class); 
    setBackground.invoke(myView, myDrawable); 
} catch (NoSuchMethodException e) { 
    setBackgroundDrawable(myDrawable); 
} 

IMO警告是不是有捕捉異常和不必要的反射更好。

+1

因此可以在else子句中使用@SupressWarning? – Alexis

+1

我已經添加了第二種方法來通過反射來解決您的問題。 – keyboardsurfer

+2

沒有理由添加兩個代碼路徑。只要調用已棄用的方法,除非您的目標是16+或者實際上需要新API中的功能。 –

3

您可以使用

viewobj.setBackgroundResource(drawble_object); 
0

設置位圖到ImageView的。

ImageView imageView =(ImageView)findViewById(R.id.imageSlice4); imageSlice4.setBackground(new BitmapDrawable(getResources(),slicedImagesArrayList.get(3)));

相關問題