it-swarm.com.de

setBackground vs setBackgroundDrawable (Android)

Ich möchte den Hintergrund für eine Ansicht zeichnen. Dafür gibt es zwei Methoden (soweit ich sehe): setBackground und setBackgroundDrawable

Wenn ich setBackground verwende, heißt es, dass es in API Level 16 hinzugefügt wurde, aber die minimale SDK-Version meines Projekts ist 7. Ich gehe davon aus, dass es unter 16 nicht funktionieren wird, habe ich Recht? Wenn ich setBackgroundDrawable verwende, heißt es, es sei veraltet.

Was soll ich verwenden?

246
Pijusn

Es ist veraltet, funktioniert aber trotzdem, sodass Sie es einfach verwenden können. Aber wenn Sie völlig korrekt sein wollen, nur um die Vollständigkeit zu erreichen ... Sie würden etwa folgendes tun:

int sdk = Android.os.Build.VERSION.SDK_INT;
if(sdk < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
    setBackgroundDrawable();
} else {
    setBackground();
}

Damit dies funktioniert, müssen Sie buildTarget api 16 und min build auf 7 oder ähnliches setzen.

396
Warpzit

Sie können stattdessen setBackgroundResource() verwenden, das sich auf API-Ebene 1 befindet.

107
Ludovic

anscheinend gibt es derzeit keinen Unterschied zwischen den beiden Funktionen, wie im Quellcode (Gutschrift an diesem Beitrag ) gezeigt:

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

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

es handelt sich also nur um eine Namensentscheidung, ähnlich wie bei einem Elternteil mit einem Elternteil zwischen einem Elternteil und einem Elternteil.

55

ich weiß, das ist eine alte Frage, aber ich habe eine ähnliche Situation und meine Lösung war

button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();

und dann können Sie mit "Drawable" spielen, Farbfilter anwenden usw

18
Jose De Gouveia

Verwenden Sie ViewCompat.setBackground(view, background);

13
krawa

sie können stattdessen setBackgroundResource() verwenden, d. h. relativeLayout.setBackgroundResource(R.drawable.back);.

das funktioniert für mich.

Jetzt können Sie eine dieser Optionen verwenden. Und es wird auf jeden Fall funktionieren. Ihre Farbe kann ein HEX-Code sein wie folgt:

myView.setBackgroundResource(ContextCompat.getColor(context, Color.parseColor("#FFFFFF")));

Eine Farbressource wie folgt:

myView.setBackgroundResource(ContextCompat.getColor(context,R.color.blue_background));

Oder eine benutzerdefinierte XML-Ressource wie folgt:

myView.setBackgroundResource(R.drawable.my_custom_background);

Ich hoffe es hilft!

6
Geraldo Neto

Mit Android Studio 1.5.1 erhielt ich folgende Warnungen:

Call requires API level 16 (current min is 9): Android.view.View#setBackground

und die Beschwerden über die Abwertung

'setBackgroundDrawable(Android.graphics.drawable.Drawable)' is deprecated

Mit diesem Format bin ich beides losgeworden:

    if (Android.os.Build.VERSION.SDK_INT < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
        //noinspection deprecation
        layout.setBackgroundDrawable(drawable);
    } else {
        layout.setBackground(drawable);
    }
6
Aksel Willgert

SetBackgroundResource verwenden (R.drawable.xml/png)

0
baburaoS

Das funktioniert für mich:View viewist dein editText, Spinner ... etc. Undint drawableist Ihr Beispiel für eine gezeichnete Route (R.drawable.yourDrawable)

 public void verifyDrawable (View view, int drawable){

        int sdk = Build.VERSION.SDK_INT;

        if(sdk < Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackgroundDrawable(
                    ContextCompat.getDrawable(getContext(),drawable));
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(getResources().getDrawable(drawable));
        }    
    }
0
user0987