2012-10-25 14 views
5

şimdi android SDK API düzeyinde önerilmiyor içinde View sınıfının setBackgroundDrawable() yöntem 16.Android'de setBackgroundDrawable için geçici çözüm?

yeni yöntem setBackground() ama tabii ki API yalnızca var 16.

nasıl olursa buna bir çözüm bulmak için Uygulamamın önceki API düzeyleriyle uyumlu olmasını mı istiyorsunuz? (en az API 14)

Amaç, herhangi bir uyarıyı ortadan kaldırmaktır ve @SupressWarnings benim için bir çözüm değildir.

+0

'@TargetApi' açıklamasını denediniz mi? (Lint'in kendisi bu şekilde önerir) – sandrstar

+0

@SuppressWarnings * * çözümdür. API 14'ü hedefliyorsanız ve yeni API'nın işlevselliğine ihtiyacınız yoksa, eski API'yi çağırma ve uyarının bastırılması yapılması gereken doğru şeydir. –

cevap

15

zamanki gibi bu biridir:

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

IMO bir uyarı istisna ve gereksiz bir yansıması yakalamak zorunda daha iyidir: Eğer yansımaları kullanabilirsiniz Öte yandan

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

.

+1

ve bu nedenle diğer maddede @SupressWarning kullanabilir? – Alexis

+1

Sorununuzu yansımaları ile çözmek için ikinci bir yol ekledim. – keyboardsurfer

+2

İki kod yolu eklemenin bir nedeni yok. Hedefiniz 16 veya daha yeni bir API'ye ihtiyacınız yoksa, kullanımdan kaldırılmış yöntemi çağırın. –

3

Sen ImageView bitmap ayarlanması

viewobj.setBackgroundResource(drawble_object); 
0

kullanabilirsiniz.

ImageView imageview = (ImageView) findViewById (R.id.imageSlice4); imageSlice4.setBackground (yeni BitmapDrawable (getResources(), dilimlenmişImagesArrayList.get (3)));

İlgili konular