2014-11-26 20 views
45

Also meine SDK geht von 15 bis 21 und wenn ich setBackgroundDrawable() anrufen, Android Studio sagt mir, dass es veraltet ist.setBackgroundDrawable() veraltet

Ich dachte an um ihn herum 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 einen Fehler bei "setBackground()".

Also, wie würdest du damit umgehen?

+0

Erhalten Sie einen Fehler oder eine Warnung? –

+0

Welchen Wert haben Sie von min sdk version in manifest? – Manmohan

+3

Verwenden Sie setbackgroundresource (R.drawable.img_wstat_tstorm); für höhere version.setBackgroundDrawable ist in höherer verion depriziert, diese hoffnung hilft dir – prakash

Antwort

56

Es ist ein interessantes Thema. Die Art und Weise, wie Sie es tun, ist offensichtlich korrekt. Es ist eigentlich nur eine Änderung der Namensentscheidung. Wie this answer darauf hinweist, setBackground() nennt nur setBackgroundDrawable():

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

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

Sie this thread für weitere Informationen über all dies sehen.

+12

Sie sollten beachten, dass 'setBackground()' nicht funktioniert für pre API16, eine Alternative könnte 'setBackgroundResource' sein – Mood

2

Sie erhalten einen Fehler, da getResources(). GetDrawable() eine ID (int) akzeptiert, die nicht als Argument gezeichnet werden kann. Versuchen Sie folgendes:

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

+0

setBackground erwartet * Drawable * Id nur –

+0

Sie sind falsch. Aus der API-Dokumentation: android.view.View.setBackground (Drawable background); Parameter: background Die Drawable als Hintergrund verwenden, oder Null, um den Hintergrund zu entfernen. –

13

Es ist lustig, weil diese Methode veraltet ist, aber wenn Sie auf der Android-Quellcode aussehen werden Sie diese 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); 
    } 
14

vielleicht können Sie versuchen, die folgenden Schritte aus:

setBackgroundResource(R.drawable.img_wstat_tstorm); 
0

ich bin mit einem minSdkVersion 16 und targetSdkVersion 23 Das folgende ist für mich arbeiten, verwendet es ContextCompat.getDrawable (Kontext, R.drawable.drawable);

Statt mit: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Vielmehr verwenden:

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

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

+0

Frage wird nach minSdk gestellt 15 –

1

Diese richtige in meinem Fall ist Lösen Sie dieses Problem

imageView.setBackgroundResource(images[productItem.getPosition()]); 
-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem)); 
     getSupportActionBar().setBackgroundDrawable(background); 
+0

Es würde wirklich helfen, wenn Sie in ein paar Worten zusammenfassen würden, was Sie hier versuchen ... – arkascha

Verwandte Themen