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?


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.


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

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

12

Richtig ab dem 15. August 2018

Verwenden Sie die Support-Bibliotheken

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

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


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)

2

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

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

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

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

1

Richtig ab dem 23. November 2018

Kotlin:

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

Wenn Sie den Theme-Parameter einschließen.


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


Frage wird für minSdk 15
Harish Gyanani

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

Es würde wirklich helfen, wenn Sie in ein paar Worten zusammenfassen würden, was Sie hier versuchen zu tun ...
Arkascha
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.