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.