J'implémente une méthode simple pour ajouter une Button
à une LinearLayout
par programmation.
Lorsque j'appelle la méthode setBackground (Drawable background), la variable Error
suivante est générée:
Java.lang.NoSuchMethodError: Android.widget.Button.setBackground
Ma méthode addNewButton:
private void addNewButton(Integer id, String name) {
Button b = new Button(this);
b.setId(id);
b.setText(name);
b.setTextColor(color.white);
b.setBackground(this.getResources().getDrawable(R.drawable.orange_dot));
//llPageIndicator is the Linear Layout.
llPageIndicator.addView(b);
}
Vous testez peut-être sur une API de niveau inférieur à 16 ( Jelly Bean ).
La méthode setBackground est uniquement disponible à partir de ce niveau d'API.
J'essaierais avec setBackgroundDrawable (obsolète) ou setBackgroundResource si c'est le cas.
Par exemple:
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
Button one = new Button(this);
// mediocre
one.setBackgroundDrawable(d);
Button two = new Button(this);
// better
two.setBackgroundResource(R.drawable.ic_launcher);
Pour créer un arrière-plan homogène pour une vue, vous pouvez créer une ressource pouvant être dessinée avec une forme type et l'utiliser avec la méthode setBackgroundResource.
red_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
<solid Android:color="#FF0000"/>
</shape>
Activité:
Button b = (Button)findViewById(R.id.myButton);
b.setBackgroundResource(R.drawable.red_background);
Mais cela aura l'air plutôt mauvais, plat et hors de propos. Si vous voulez un bouton coloré qui ressemble à un bouton, vous pouvez le concevoir vous-même (coins arrondis, contour, fond dégradé ...) ou une solution rapide et sale consiste à ajouter un filtre PorterDuff à l'arrière-plan du bouton:
Button b = (Button)findViewById(R.id.myButton);
PorterDuffColorFilter redFilter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
b.getBackground().setColorFilter(redFilter);
Depuis après Android 16, le setBackgroundDrawable est obsolète, j'ai suggéré de vérifier avant de définir le code
vous devez également vérifier la version actuelle d'Android
Button bProfile; // your Button
Bitmap bitmap; // your bitmap
if(Android.os.Build.VERSION.SDK_INT < 16) {
bProfile.setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap));
}
else {
bProfile.setBackground(new BitmapDrawable(getResources(),bitmap));
}