122 votes

Comment ajouter un bouton de façon dynamique dans Android ?

Comment ajouter un bouton de façon dynamique dans Android ?

131voto

nico Points 1118
Button myButton = new Button(this);
myButton.setText("Push Me");

LinearLayout ll = (LinearLayout)findViewById(R.id.buttonlayout);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
ll.addView(myButton, lp);

Jetez un coup d'œil à este exemple

1 votes

J'ai mis à jour l'URL car l'ancienne donnait un 404. Veuillez vérifier que j'ai référencé la bonne page.

1 votes

Pouvez-vous s'il vous plaît qualifier pleinement LayoutParams ? Je vois plus de 12 classes avec ce nom.

1 votes

@Saeed Dans cet exemple précis, il s'agit des LayoutParams appartenant à LinearLayout. Android.widget.LinearLayout.LayoutParams

56voto

dicklaw795 Points 291

Essayez ceci :

for (int i = 1; i <= 20; i++) {
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    Button btn = new Button(this);
    btn.setId(i);
    final int id_ = btn.getId();
    btn.setText("button " + id_);
    btn.setBackgroundColor(Color.rgb(70, 80, 90));
    linear.addView(btn, params);
    btn1 = ((Button) findViewById(id_));
    btn1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Toast.makeText(view.getContext(),
                    "Button clicked index = " + id_, Toast.LENGTH_SHORT)
                    .show();
        }
    });
}

1 votes

Pourquoi le bouton est-il ajouté, puis supprimé avant la mise en place de l'écouteur de clic. ne pourrait-on pas ajouter l'écouteur, puis l'ajouter à la mise en page et avoir terminé ?

0 votes

Meilleure réponse parce que vous pouvez cliquer sur les boutons en définissant un id :)

12voto

NuuoeiZ Points 61

Essayez ça :

LinearLayout ll = (LinearLayout)findViewById(R.id.layout);

Button btn = new Button(this);
btn.setText("Manual Add");
btn.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
ll.addView(btn);

0 votes

À quoi fait référence R.id.layout ici ? Je continue à obtenir layout comme non résolu

0 votes

@AnnaGoldberg Dans votre fichier xml, vous devriez avoir défini un LinearLayout. Dans cet extrait, ils ont donné à leur LinearLayout un id appelé layout, comme ceci : android:id="@+id/layout" dans leur définition xml de LinearLayout.

7voto

Harish Koona Points 181
for (int k = 1; k < 100; k++) {
    TableRow row = new TableRow(this);

    innerloop:
    for (int l = 1; l < 4; l++) {
        btn = new Button(this);
        TableRow.LayoutParams tr = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        layout.setWeightSum(12.0f);
        tr.weight = 0;
        btn.setLayoutParams(tr); 
        btn.setTextColor(a);
        btn.setHeight(150);

        btn.setWidth(150);
        btn.setId(idb);
        btn.setText("Button " + idb);
        row.addView(btn);
    }
}

5voto

Mercy Points 1021

Essayez ce code

 Button btn=new Button(this);
btn.setId(btn);
btn.setBackgroundResource(R.drawable.image);
btn.setMinimumHeight(150);
btn.setMinimumWidth(150);
Relativelayout.addView(btn);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X