setBackgroundDrawable () jest przestarzała

86

Więc mój SDK przechodzi z 15 do 21 i kiedy dzwonię setBackgroundDrawable(), Android Studio mówi mi, że jest przestarzały.

Pomyślałem o obejściu tego za pomocą:

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 potem pojawia się błąd w „setBackground ()”.

Jak więc sobie z tym poradzisz?

Makoto
źródło
Czy pojawia się błąd lub ostrzeżenie?
Bryan Herbst
jaką masz wartość wersji min sdk w manifeście?
Manmohan Badaya
4
użyj setbackgroundresource (R.drawable.img_wstat_tstorm); dla wyższej wersji. setBackgroundDrawable jest pozbawiony w wyższej wersji, ta nadzieja ci pomoże
prakash
Min sdk to 15. Mam "setBackground ()" podkreślone na czerwono, ale aplikacja działa, więc myślę, że jest to ostrzeżenie
Makoto
Musisz otrzymywać Add @SupressWarning
SweetWisher ツ

Odpowiedzi:

105

To ciekawy temat. Sposób, w jaki to robisz, jest najwyraźniej poprawny. W rzeczywistości jest to tylko zmiana decyzji dotyczącej nazewnictwa. Jak wskazuje ta odpowiedź , setBackground()po prostu dzwoni setBackgroundDrawable():

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

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

Możesz zobaczyć ten wątek, aby uzyskać więcej informacji na ten temat.

Alex K.
źródło
20
Należy pamiętać, że setBackground()to nie zadziała dla wersji przed API16, alternatywą może byćsetBackgroundResource
Nastrój
26

może możesz spróbować następujących rzeczy:

setBackgroundResource(R.drawable.img_wstat_tstorm);
jeż
źródło
18

To zabawne, ponieważ ta metoda jest przestarzała, ale jeśli spojrzysz na kod źródłowy Androida, zobaczysz 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);
    }
Joaquin Iurchuk
źródło
12

Stan na 15 sierpnia 2018

Skorzystaj z bibliotek wsparcia

Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null);
ViewCompat.setBackground(layout, drawable);
Stuart Campbell
źródło
7

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

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

David C. Adams
źródło
setBackground oczekuje tylko Drawable Id
SweetWisher ツ
Mylisz się. Z dokumentacji API: android.view.View.setBackground (Drawable background); Parametry: background The Drawable do użycia jako tło lub null do usunięcia tła.
David C Adams
4

Użyj tego:

myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
Malwinder Singh
źródło
3
//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
Eliasz Kubala
źródło
2

W moim przypadku jest to poprawne Rozwiąż ten problem

 imageView.setBackgroundResource(images[productItem.getPosition()]);
Sonu Kumar
źródło
1

Stan na 23 listopada 2018 r

Kotlin:

view.background = resources.getDrawable(R.drawable.ic_image,theme)

Jeśli dołączysz parametr Theme.

Dimitri de Jesus
źródło
0

Używam minSdkVersion 16 i targetSdkVersion 23 Poniższe działa dla mnie, używa ContextCompat.getDrawable (kontekst, R.drawable.drawable);

Zamiast używać: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Raczej użyj:

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

getActivity() jest używany we fragmencie, jeśli dzwonisz z aktywności use this

Vostro
źródło
Pytanie jest zadawane dla minSdk 15
Harish Gyanani
-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);
Vando Sep
źródło
Naprawdę pomogłoby, gdybyś podsumował w kilku słowach to, co próbujesz tutaj zrobić ...
arkascha