2014-11-26 20 views
45

Tak więc mój sdk przechodzi od 15 do 21, a kiedy zadzwonię pod numer setBackgroundDrawable(), Android Studio mówi, że jest przestarzałe.setBackgroundDrawable() przestarzałe

myślałem dzieje wokół niego, używając:

int sdk = android.os.Build.VERSION.SDK_INT; 

if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
    layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.img_wstat_tstorm)); 
} else { 
    layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm)); 
} 

Ale wtedy pojawia się błąd w "setBackground()".

Jak sobie z tym poradzić?

+0

Czy pojawia się błąd lub ostrzeżenie? –

+0

jaka jest wartość minimalnej wersji sdk w manifeście? – Manmohan

+3

użyj setbackgroundresource (R.drawable.img_wstat_tstorm); dla wyższej wersji.setBackgroundDrawable jest zdeponowana w wyższej wersji, ta nadzieja pomoże ci – prakash

Odpowiedz

56

To interesujący temat. Sposób, w jaki to robisz, jest poprawny. Jest to właściwie zmiana decyzji nazywania. Jak this answer wskazuje setBackground() po prostu wywołuje setBackgroundDrawable():

public void setBackground(Drawable background) { 
    //noinspection deprecation 
    setBackgroundDrawable(background); 
} 

@Deprecated 
public void setBackgroundDrawable(Drawable background) { ... } 

Widać this thread uzyskać więcej informacji o tym wszystkim.

+12

Powinieneś zauważyć, że 'setBackground()' nie działa dla pre API16, alternatywą może być 'setBackgroundResource' – Mood

2

Otrzymujesz błąd, ponieważ getResources(). GetDrawable() przyjmuje jako argument id (int), a nie draw. Spróbuj tego:

layout.setBackground(getResources().getDrawable(R.id.img_wstat_tstorm));

+0

setBackground oczekuje * Drawable * Id only –

+0

Jesteś niepoprawny. Z dokumentacji interfejsu API: android.view.View.setBackground (Tło do rysowania); Parametry: tło Można użyć jako tła lub null, aby usunąć tło. –

13

To zabawne, bo ta metoda jest przestarzałe, ale jeśli spojrzeć na Androida kodu źródłowego znajdziesz to:

/** 
    * Set the background to a given Drawable, or remove the background. If the 
    * background has padding, this View's padding is set to the background's 
    * padding. However, when a background is removed, this View's padding isn't 
    * touched. If setting the padding is desired, please use 
    * {@link #setPadding(int, int, int, int)}. 
    * 
    * @param background The Drawable to use as the background, or null to remove the 
    *  background 
    */ 
    public void setBackground(Drawable background) { 
     //noinspection deprecation 
     setBackgroundDrawable(background); 
    } 
14

może można spróbować wykonać następujące czynności:

setBackgroundResource(R.drawable.img_wstat_tstorm); 
0

Używam minSdkVersion 16 i targetSdkVersion 23 Poniższy pracuje dla mnie, to używa ContextCompat.getDrawable (context, R.drawable.drawable);

Zamiast: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

raczej używać:

layout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.img_wstat_tstorm));

getActivity() stosowany jest we fragmencie, jeśli dzwonisz z użycia działalności this

+0

Pytanie jest zadawane dla minSdk 15 –

1

To jest poprawne w moim przypadku Rozwiąż ten problem

imageView.setBackgroundResource(images[productItem.getPosition()]); 
-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem)); 
     getSupportActionBar().setBackgroundDrawable(background); 
+0

To naprawdę pomogłoby, gdybyś podsumował w kilku słowach, co próbujesz tutaj zrobić ... – arkascha