web-dev-qa-db-fra.com

Comment utiliser Ajouterview pour ajouter une vue à la mise en page?

J'ai lu probablement tous les postes et la documentation, mais je ne peux toujours pas résoudre ce problème.

Je veux utiliser addView() méthode pour ajouter une vue à la disposition existante (en cours d'exécution), mais pour une raison quelconque, je ne peux pas. Je sais que cela devrait être facile et basique mais je ne peux toujours pas le faire. Alors, aidez-moi s'il vous plaît.

Voici un code:

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
TextView text       = new TextView(this);
text.setText("test");
layout.addView(text);

C'est un code et le résultat est que je n'ai affiché que des vues définies dans le fichier XML. Il n'y a pas cette nouvelle vue que j'ai ajoutée. Quand j'ai débogué, je vois cette vue ajoutée comme un enfant du parent auquel je l'ai ajouté mais ce n'est pas affiché.

voici Main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
                Android:id="@+id/mainLayout"
              Android:layout_width="fill_parent" 
              Android:layout_height="fill_parent"
              Android:orientation="vertical"
              Android:background="@drawable/main1" >
    <TextView Android:id="@+id/app_title"
              Android:layout_width="fill_parent"
              Android:layout_height="wrap_content"
              Android:textColor="#FFF"
              Android:text="@string/app_title"
              Android:textSize="25dp" 
              Android:gravity="center_horizontal"/>
    <TextView Android:layout_width="fill_parent" 
              Android:layout_height="wrap_content"
              Android:layout_marginTop="5dp"
              Android:text="@string/main_screen_counter_title"
              Android:textSize="15dp" 
              Android:textColor="#FFF"
              Android:gravity="center_horizontal"/>
   <TextView Android:id="@+id/frontScreenCounter"
              Android:layout_width="fill_parent" 
              Android:layout_height="wrap_content"
              Android:textColor="#FFF"
              Android:text="@string/reading"
              Android:textSize="33dp"
              Android:gravity="center_horizontal" />   
    <GridView Android:id="@+id/gridview"
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"
    Android:columnWidth="90dp"
    Android:numColumns="3"
    Android:verticalSpacing="10dp"
    Android:horizontalSpacing="10dp"
    Android:stretchMode="columnWidth"
    Android:gravity="center"
    Android:textColor="#888"
/>
</LinearLayout>

S'il vous plaît aider. Cela me rendra fou!

19
Majstor

Vous avez oublié de spécifier le LayoutParameters pour la vue nouvellement ajoutée.

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
    TextView text=new TextView(this);
    text.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    text.setText("test");
    layout.addView(text);

ÉDITER

Le GridView avec un identifiant de @+id/gridview est défini avec une hauteur de mise en page de fill_parent, vous laissant sans espace pour ajouter une nouvelle vue. Changer sa hauteur à wrap_content Peut résoudre votre problème.

Ajout de mon commentaire à ce message pour aider les autres à vérifier facilement la solution.

17
Arun George

J'ai eu le même problème et j'ai perdu plusieurs fois à trouver la raison.

Ma faute était que j'avais l'ajout d'une vision personnalisée qui avait été match_parent définie comme une hauteur.

J'espère sauver un temps précieux à quiconque qui a fait cette erreur gênante stupide :)

TextView tv = new TextView(this);
lytMarks.addView(tv);


CustomView cv = new CustomView(this, someObject);
lytMarks.addView(cv); // <-- This one had height = match_parent!!


EditText et = new EditText(this);
lytMarks.addView(et);
1
voghDev

Votre contenu linéarlayout est sur la vue du parent. Vous devez donc utiliser ScrollView. comme ça:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">

<LinearLayout
    Android:id="@+id/mainLayout"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@drawable/main1"
    Android:orientation="vertical">

    <TextView
        Android:id="@+id/app_title"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center_horizontal"
        Android:text="@string/app_title"
        Android:textColor="#FFF"
        Android:textSize="25dp" />

    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="5dp"
        Android:gravity="center_horizontal"
        Android:text="@string/main_screen_counter_title"
        Android:textColor="#FFF"
        Android:textSize="15dp" />

    <TextView
        Android:id="@+id/frontScreenCounter"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center_horizontal"
        Android:text="@string/reading"
        Android:textColor="#FFF"
        Android:textSize="33dp" />

    <GridView
        Android:id="@+id/gridview"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:columnWidth="90dp"
        Android:gravity="center"
        Android:horizontalSpacing="10dp"
        Android:numColumns="3"
        Android:stretchMode="columnWidth"
        Android:textColor="#888"
        Android:verticalSpacing="10dp" />
</LinearLayout>
</ScrollView>
0
peter zhang