setBackgroundDrawable () ist veraltet

83

Mein SDK geht also von 15 auf 21 und wenn ich anrufe setBackgroundDrawable(), sagt mir Android Studio, dass es veraltet ist.

Ich dachte daran, es zu umgehen mit:

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

Aber dann bekomme ich eine Fehlermeldung bei "setBackground ()".

Wie würden Sie damit umgehen?

Makoto
quelle
Erhalten Sie einen Fehler oder eine Warnung?
Bryan Herbst
Welchen Wert haben Sie der min sdk-Version im Manifest?
Manmohan Badaya
4
benutze setbackgroundresource (R.drawable.img_wstat_tstorm); für höhere version.setBackgroundDrawable ist in höherer Version beraubt, diese Hoffnung hilft Ihnen
prakash
Min sdk ist 15. Ich habe "setBackground ()" rot unterstrichen, aber die App läuft, also denke ich, es ist eine Warnung
Makoto
Sie müssen Add @SupressWarning
SweetWisher

Antworten:

103

Es ist ein interessantes Thema. Die Art und Weise, wie Sie es tun, ist anscheinend richtig. Es ist eigentlich nur eine Namensentscheidungsänderung. Wie diese Antwort zeigt, setBackground()ruft man einfach an setBackgroundDrawable():

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

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

In diesem Thread finden Sie weitere Informationen zu all dem.

Alex K.
quelle
20
Sie sollten beachten, dass dies setBackground()vor API16 nicht funktioniert. Eine Alternative könnte seinsetBackgroundResource
Mood
25

Vielleicht können Sie Folgendes versuchen:

setBackgroundResource(R.drawable.img_wstat_tstorm);
Igel
quelle
18

Es ist lustig, weil diese Methode veraltet ist, aber wenn Sie sich den Android-Quellcode ansehen, werden Sie Folgendes finden:

   /**
     * 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
quelle
12

Richtig ab dem 15. August 2018

Verwenden Sie die Support-Bibliotheken

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

Sie erhalten eine Fehlermeldung, weil getResources (). GetDrawable () eine ID (int) und keine Drawable als Argument verwendet. Versuche dies:

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

David C Adams
quelle
setBackground erwartet nur Drawable Id
SweetWisher ツ
Du bist falsch. Aus den API-Dokumenten: android.view.View.setBackground (Drawable background); Parameter: Hintergrund Das Drawable, das als Hintergrund verwendet werden soll, oder null, um den Hintergrund zu entfernen.
David C Adams
4

Benutze das:

myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
Malwinder Singh
quelle
2

Dies ist in meinem Fall richtig. Lösen Sie dieses Problem

 imageView.setBackgroundResource(images[productItem.getPosition()]);
Sonu Kumar
quelle
2
//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
Eliasz Kubala
quelle
1

Richtig ab dem 23. November 2018

Kotlin:

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

Wenn Sie den Theme-Parameter einschließen.

Dimitri de Jesus
quelle
0

Ich verwende eine minSdkVersion 16 und eine targetSdkVersion 23. Das Folgende funktioniert für mich, es verwendet ContextCompat.getDrawable (context, R.drawable.drawable);

Anstatt zu verwenden: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Verwenden Sie lieber:

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

getActivity() wird in einem Fragment verwendet, wenn der Aufruf von einer Aktivität verwendet wird this

Vostro
quelle
Frage wird für minSdk 15
Harish Gyanani
-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);
Vando Sep.
quelle
Es würde wirklich helfen, wenn Sie in ein paar Worten zusammenfassen würden, was Sie hier versuchen zu tun ...
Arkascha