Je veux mettre en arrière-plan dessinable d'une vue. Il existe deux méthodes pour cela (autant que je sache): setBackground
et setBackgroundDrawable
.
Lorsque j'utilise setBackground
, il est indiqué qu'il a été ajouté dans API de niveau 16 , mais que la version minimale du kit SDK de mon projet est 7. J'imagine que cela ne fonctionnera pas si la valeur est inférieure à 16, n'est-ce pas? Mais lorsque j'utilise setBackgroundDrawable, il est obsolète.
Qu'est-ce que je suis supposé utiliser?
Il est déconseillé, mais cela fonctionne toujours, vous pouvez donc l'utiliser. Mais si vous voulez être complètement correct, juste pour l'exhaustivité ... Vous feriez quelque chose comme suit:
int sdk = Android.os.Build.VERSION.SDK_INT;
if(sdk < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
setBackgroundDrawable();
} else {
setBackground();
}
Pour que cela fonctionne, vous devez définir buildTarget api 16 et min build à 7 ou quelque chose de similaire.
Vous pouvez utiliser setBackgroundResource()
à la place de l'API de niveau 1.
semble qu'il n'y a actuellement aucune différence entre les 2 fonctions, comme indiqué sur le code source (crédit de ce post :
public void setBackground(Drawable background) {
//noinspection deprecation
setBackgroundDrawable(background);
}
@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }
il s’agit donc simplement d’une décision de nommage, similaire à celle avec parent de remplissage vs parent de correspondance.
je sais que c’est une vieille question, mais j’ai une situation similaire, et ma solution a été
button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();
et puis vous pouvez jouer avec le "Drawable", appliquer des filtres de couleur, etc.
Utilisez ViewCompat.setBackground(view, background);
vous pouvez utiliser setBackgroundResource()
à la place, c'est-à-dire relativeLayout.setBackgroundResource(R.drawable.back);
cela fonctionne pour moi.
Maintenant, vous pouvez utiliser l'une ou l'autre de ces options. Et ça va marcher dans tous les cas. Votre couleur peut être un code HEX , comme ceci:
myView.setBackgroundResource(ContextCompat.getColor(context, Color.parseColor("#FFFFFF")));
A ressource de couleur , comme ceci:
myView.setBackgroundResource(ContextCompat.getColor(context,R.color.blue_background));
Ou une ressource XML personnalisée , comme ceci:
myView.setBackgroundResource(R.drawable.my_custom_background);
J'espère que ça aide!
En utilisant Android studio 1.5.1, j'ai les avertissements suivants:
Call requires API level 16 (current min is 9): Android.view.View#setBackground
et les plaintes concernant la dépréciation
'setBackgroundDrawable(Android.graphics.drawable.Drawable)' is deprecated
En utilisant ce format, je me suis débarrassé des deux:
if (Android.os.Build.VERSION.SDK_INT < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
//noinspection deprecation
layout.setBackgroundDrawable(drawable);
} else {
layout.setBackground(drawable);
}
Utilisez setBackgroundResource (R.drawable.xml/png)
Cela fonctionne pour moi:Voir la vueest votre editText, spinner ... etc. Etint drawableest votre exemple d'itinéraire tracé (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));
}
}