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?
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.
Sie können stattdessen setBackgroundResource()
verwenden, das sich auf API-Ebene 1 befindet.
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.
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
Verwenden Sie ViewCompat.setBackground(view, background);
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!
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);
}
SetBackgroundResource verwenden (R.drawable.xml/png)
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));
}
}