2012-10-25 17 views
5

setBackgroundDrawable() metoda klasy w obecnie przestarzałe w poziomie API Android SDK View 16.Obejście problemu dla setBackgroundDrawable na Androida?

Nowa metoda jest setBackground() ale oczywiście to jest dostępne tylko w API 16.

Jak mogę obejść, gdybym chcesz, aby moja aplikacja była kompatybilna z poprzednimi poziomami interfejsu API? (przynajmniej API 14)

Celem jest wyeliminowanie wszelkich ostrzeżeń i @SupressWarnings nie jest rozwiązaniem dla mnie.

+0

czy próbowałeś adnotacji "@TargetApi"? (Wydaje się, że sam Lint sugeruje) – sandrstar

+0

@SuppressWarnings * jest * rozwiązaniem. Jeśli kierujesz się interfejsem API 14 i nie potrzebujesz żadnej funkcji nowego interfejsu API, to prawidłowe jest wywoływanie starszego interfejsu API i wyłączanie ostrzeżenia. –

Odpowiedz

15

Zwykłym sposobem jest to jedno:

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

Z drugiej strony można wykorzystać odbicie:

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

IMO ostrzeżenie jest lepsze niż do połowu wyjątek i niepotrzebnego odbicie.

+1

i dlatego mogą używać @SupressWarning w klauzuli else? – Alexis

+1

Dodałem drugi sposób rozwiązania problemu za pomocą refleksji. – keyboardsurfer

+2

Nie ma powodu, aby dodawać dwie ścieżki kodu. Po prostu wywołaj tę nieaktualną metodę, chyba że masz cel 16+ lub potrzebujesz funkcjonalności w nowym interfejsie API. –

3

Można użyć

viewobj.setBackgroundResource(drawble_object); 
0

Ustawianie bitmapę do ImageView.

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

Powiązane problemy