8
votes

Comment ajouter un contrôle de bouton à une vue XML Android au moment de l'exécution?

J'ai une mise en page xml android, main.xml. Je voudrais ajouter des contrôles à cette disposition au moment de l'exécution (je voudrais ajouter une série de dispositions linéaires supplémentaires contenant des contrôles de boutons). Puis-je faire cela et si oui, comment?

merci


0 commentaires

7 Réponses :


3
votes

Vous pouvez ajouter des contrôles par programmation par programme si vous le souhaitez dans votre code, voire un autre XML avec une vue et une inflation.

Ici, vous pouvez lire les bases: http://developer.android .com / guide / sujets / ui / déclarant-layout.html


1 commentaires

J'ai lu le document mais il ne mentionne pas comment ajouter de nouveaux contrôles (créés au moment de l'exécution) dans un fichier de mise en page XML existant.



6
votes

Je vois l'erreur de faire ici

LinearLayout lnr = (LinearLayout) findViewById(R.id.LinearLayout01);

Button b1 = new Button(this);

b1.setText("Btn");

lnr.addView(b1);


2 commentaires

Oui, mais le bouton n'est pas défini dans le XML. Je veux faire ce qui suit: bouton B = nouveau bouton (ceci); Linearlayout Mainlayout = (linearlayout) Findview (r.layout.main); Mainlayout.addview (b), j'essaie ceci mais j'ai une erreur. Est-ce la façon de le faire?


Quelle est l'erreur? Avez-vous essayé addview (b, nouveaux layoutparams (layoutparams.wrap_content, layoutparams.wrap_content))?



0
votes

Vous pouvez le faire assez facile en définissant un identifiant sur la mise en page sur laquelle vous souhaitez ajouter des vues à. Dites ton principal.xml ressemble à ceci: xxx pré>

permet de supposer que vous souhaitez ajouter vos vues supplémentaires au linearlayout code> avec ID ID / conteneur code>. Dans votre méthode Oncreate code>, vous pouvez récupérer cet objet pour une utilisation ultérieure: P>

LinearLayout theButtons = getButtons()
mContainer.addView(theButtons);


0 commentaires

3
votes

OK, je l'ai eu pour travailler.

Les étapes sont les suivantes: Gonflez d'abord la mise en page XML, c'est-à-dire P> xxx pré>

puis instanciez l'objet du conteneur à partir de la disposition XML dans une classe de groupe de vue, c'est-à-dire P>

container.addView(buttonsLayout);
this.setContentView(view);


0 commentaires

0
votes

Essayez simplement ceci:

 LinearLayout llinner = new LinearLayout(this);

 Button btn2 = new Button(this);
 btn2.setText=("Button 2");
mainLinearLayout .addView(btn2);

llinner.addView(btn2 );

mainLinearLayout .addView(llinner);


0 commentaires

0
votes

Essayez ceci: xxx

Cela pourrait vous aider


0 commentaires

0
votes

Voici ce que j'ai fait pour afficher un ensemble de boutons d'exécution sur la disposition de la table.

MainAlacit.java P> xxx pré>

Activity_main.xml P>

    <?xml version="1.0" encoding="utf-8"?>
     <androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ScrollView
    android:id="@+id/myview"
    android:layout_width="404dp"
    android:layout_height="691dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <TableLayout
        android:id="@+id/mylayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TableRow android:id="@+id/myrow"></TableRow>
    </TableLayout>

</ScrollView>

   </androidx.constraintlayout.widget.ConstraintLayout>


0 commentaires