2012-10-25 13 views
5

今のAndroid SDKのAPIレベルで推奨されていませんでViewクラスのsetBackgroundDrawable()方法16.androidのsetBackgroundDrawableの回避策ですか?

新しい方法がsetBackground()ですが、もちろんそれはAPIでのみ利用可能です16.

は、どのように私は私があればそれを回避することができます 私のアプリケーションを以前のAPIレベルと互換性を持たせたいのですか? (少なくともAPI 14)

目標は警告を排除することで、@SupressWarningsは私の解決策ではありません。

+0

あなたは '@TargetApi'アノテーションを試しましたか? (Lint自身がその方法を示唆していると思われる) – sandrstar

+0

@SuppressWarnings * is the solution。 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

2つのコードパスを追加する理由はありません。ターゲットが16以上でないか、実際には新しいAPIで機能が必要な場合を除き、廃止予定のメソッドを呼び出してください。 –

3

あなたはImageViewのにビットマップを設定する

viewobj.setBackgroundResource(drawble_object); 
0

を使用することができます。

ImageView imageView =(ImageView)findViewById(R.id.imageSlice4);imageSlice4.setBackground(新しいBitmapDrawable(getResources()、slicedImagesArrayList.get(3))));