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?


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.


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);

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);
    }

12

Stan na 15 sierpnia 2018

Skorzystaj z bibliotek wsparcia

Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null);
ViewCompat.setBackground(layout, drawable);

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));


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


3
//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)

2

W moim przypadku jest to poprawne Rozwiąż ten problem

 imageView.setBackgroundResource(images[productItem.getPosition()]);

1

Stan na 23 listopada 2018 r

Kotlin:

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

Jeśli dołączysz parametr Theme.


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


Pytanie jest zadawane dla minSdk 15
Harish Gyanani

-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);

Naprawdę pomogłoby, gdybyś podsumował w kilku słowach to, co próbujesz tutaj zrobić ...
arkascha
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.