2012-07-31 11 views
9

Witam wszystkich, mam jeden pusty układ liniowy w xml. I dodam dynamicznie do niego widok tekstowy.Układ liniowy wewnątrz układu liniowego dodaje, ale nie jest widoczny

Po przekroczeniu 5 odsłon w tekście, utworzę w nim jeszcze jeden liniowy układ i dodam widoki tekstowe do nowo utworzonego układu. I wreszcie dodanie tego nowego układu do głównego layoutu.

Jestem w stanie dodać, tj. W emulatorze zajmuje to miejsce, ale nie wyświetla informacji w widokach tekstu.

mój xml wygląda następująco:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ScrollView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:id="@+id/dyn_layout" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:padding="10dip" > 
     </LinearLayout> 
    </ScrollView> 

    <Button 
     android:id="@+id/dyn_button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add TextViews" /> 

</LinearLayout> 

i mój plik java jest następujący:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class AddTextViewsDynamically extends Activity implements 
     OnClickListener { 

    Button button; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.add_textview_dynamically); 

     button = (Button) findViewById(R.id.dyn_button1); 
     button.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.dyn_button1: 
      LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout); 
      LinearLayout layout2 = null; 
      LinearLayout layout3 = null; 
      for (int i = 0; i < 10; i++) { 
       if (i > 4) { 
        if (i == 5) { 
         layout2 = new LinearLayout(this); 
         layout2.setLayoutParams(new LayoutParams(
           LayoutParams.FILL_PARENT, 
           LayoutParams.WRAP_CONTENT)); 
         layout2.setOrientation(LinearLayout.VERTICAL); 
         layout2.setPadding(10, 60, 10, 10); 
         layout3 = new LinearLayout(this); 
         layout3.setLayoutParams(new LayoutParams(
           LayoutParams.FILL_PARENT, 
           LayoutParams.WRAP_CONTENT)); 
         layout3.setOrientation(LinearLayout.HORIZONTAL); 
         layout3.setPadding(10, 10, 10, 10); 
        } 
        System.out.println("**** Adding text view " + i); 
        TextView text = new TextView(this); 
        text.setText("The Value of i is :" + i); 
        text.setTextSize(12); 
        text.setGravity(Gravity.LEFT); 
        text.setLayoutParams(new LayoutParams(155, 
          LayoutParams.WRAP_CONTENT)); 
        layout3.addView(text); 

        if (i == 9) { 
         System.out 
           .println("Added second linear layout to first"); 
         layout2.setVisibility(View.VISIBLE); 
         layout2.addView(layout3); 
         layout.addView(layout2); 
        } 
       } else { 
        System.out.println("###### Adding text view " + i); 
        TextView text = new TextView(this); 
        text.setText("The Value of i is :" + i); 
        text.setTextSize(12); 
        text.setGravity(Gravity.LEFT); 
        text.setLayoutParams(new LayoutParams(155, 
          LayoutParams.WRAP_CONTENT)); 
        layout.addView(text); 
       } 
      } 

     } 

    } 

} 

Może ktoś tel mi gdzie wezwę niewłaściwy. I proszę, pomóż mi.

góry dziękuję Mouni

+0

Czy możesz powiedzieć, dlaczego robisz to tak, że alternatywny i najlepsze rozwiązania, jeśli dostępne mogą być dostarczone? –

+0

Będę dynamicznie pobierać informacje z usługi, które muszę wyświetlać w widokach tekstowych 5 w każdej linii. jeśli jest więcej niż w następnym wierszu. – Mouni

+0

Czy istnieje inny sposób, z którego mogę to zrobić ...? proszę dać mi znać – Mouni

Odpowiedz

5

Twój podstawowy LinearLayout jest ustawiony w poziomie więc pierwszy widok 5 tekst i Layout2 pokazane są na tej samej linii. Dodanie Layout3 do Layout2 powoduje, że Layout3 będzie wyświetlany z prawej strony ostatniego widoku tekstowego z pierwotnego układu liniowego. Na 10-calowym tablecie widzę tylko pierwsze 2 elementy twojego LinearLayout. Być może na mniejszym ekranie ich nie widzisz. Spróbuj użyć

text.setLayoutParams(new LayoutParams(50, LayoutParams.WRAP_CONTENT)); 

zamiast

text.setLayoutParams(new LayoutParams(155, LaoutParams.WRAP_CONTENT)); 

i powinieneś zobaczyć wszystkie swoje poglądy tekstowych.

EDYCJA: W twoim przypadku powinno to załatwić sprawę; xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ScrollView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:id="@+id/dyn_layout" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:padding="10dip" > 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/dyn_layout2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:visibility="gone" 
      android:padding="10dip" > 
     </LinearLayout> 
    </ScrollView> 

    <Button 
     android:id="@+id/dyn_button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add TextViews" /> 

</LinearLayout> 

i kod:

@Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.dyn_button1: 
      LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout); 
      LinearLayout layout2 = (LinearLayout) findViewById(R.id.dyn_layout2); 
      LinearLayout layout3 = null; 
      for (int i = 0; i < 10; i++) { 
       if (i > 4) { 
        if (i == 5) { 
         layout2.setPadding(10, 60, 10, 10); 
         layout3 = new LinearLayout(this); 
         layout3.setLayoutParams(new LayoutParams(
           LayoutParams.FILL_PARENT, 
           LayoutParams.WRAP_CONTENT)); 
         layout3.setOrientation(LinearLayout.HORIZONTAL); 
         layout3.setPadding(10, 10, 10, 10); 
        } 
        System.out.println("**** Adding text view " + i); 
        TextView text = new TextView(this); 
        text.setText("The Value of i is :" + i); 
        text.setTextSize(12); 
        text.setGravity(Gravity.LEFT); 
        text.setLayoutParams(new LayoutParams(155, 
          LayoutParams.WRAP_CONTENT)); 
        layout3.addView(text); 

        if (i == 9) { 
         System.out 
           .println("Added second linear layout to first"); 
         layout2.setVisibility(View.VISIBLE); 
         layout2.addView(layout3); 
        } 
       } else { 
        System.out.println("###### Adding text view " + i); 
        TextView text = new TextView(this); 
        text.setText("The Value of i is :" + i); 
        text.setTextSize(12); 
        text.setGravity(Gravity.LEFT); 
        text.setLayoutParams(new LayoutParams(155, 
          LayoutParams.WRAP_CONTENT)); 
        layout.addView(text); 
       } 
      } 

     } 

    } 
+0

Dziękuję bardzo. Tak, wszystkie 10 widoków tekstowych dodaje się pionowo. Ale chcę tylko 5 w jednej linii i kolejne 5 w następnej, co mam zrobić, aby uzyskać układ w taki sposób ..? plz pomóżcie mi .. – Mouni

+0

Tak, to się udało, ale z niewielkimi zmianami, ponieważ nie dodam layoutu w xml ... będzie on dynamicznie dodany .. Teraz działa dobrze ... :) Jeszcze raz dziękuję .. – Mouni

0

Spróbuj tego, to widać, że kod jest OK.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:weightSum="100" > 

<HorizontalScrollView 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="80" > 

    <LinearLayout 
     android:id="@+id/dyn_layout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="10dip" > 
    </LinearLayout> 
</HorizontalScrollView> 

<Button 
    android:id="@+id/dyn_button1" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="20" 
    android:text="Add TextViews" /> 

</LinearLayout> 
+0

Nie dint wypracował .. :(diff to tylko przycisk zbliża się na końcu ekranu ..Czy jest coś, co muszę zmienić ... ?? – Mouni

+0

zobacz moją zmienioną odpowiedź, jeśli chcesz dodać widok tekstowy w poziomie, musisz użyć HorizontalScrollView zamiast zwykłego. I daj mi znać, jeśli to działa, (Przy okazji, próbowałem, i to działało ze mną) – osayilgan

+0

dzięki za odpowiedź .. Nawet teraz nie zmienia się tak samo jak wcześniej .. – Mouni

0

Właściwie robisz to dobrze, po prostu usunąłem obicie i ustawiłem orientację wszystkich układów liniowych na pionowe. Zmodyfikuj to również w pliku xml i będzie działać :))) Właśnie dodajesz dopełnienie o wielkości 10 lub 60, które przechodzi przez widok rodzica.

zmodyfikowanego kodu Java:

@Override 
public void onClick(View v) { 

switch (v.getId()) { 
    case R.id.dyn_button1: 
     LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout); 
     LinearLayout layout2 = null; 
     LinearLayout layout3 = null; 
     for (int i = 0; i < 10; i++) { 
      if (i > 4) { 
       if (i == 5) { 
        layout2 = new LinearLayout(this); 
        layout2.setLayoutParams(new LayoutParams(
          LayoutParams.FILL_PARENT, 
          LayoutParams.WRAP_CONTENT)); 
        layout2.setOrientation(LinearLayout.VERTICAL); 
       // layout2.setPadding(10, 10, 10, 10); 
        layout3 = new LinearLayout(this); 
        layout3.setLayoutParams(new LayoutParams(
          LayoutParams.FILL_PARENT, 
          LayoutParams.WRAP_CONTENT)); 
        layout3.setOrientation(LinearLayout.VERTICAL); 
       //  layout3.setPadding(10, 10, 10, 10); 
       } 
       System.out.println("**** Adding text view " + i); 
       TextView text = new TextView(this); 
       text.setText("The Value of i is :" + i); 
       text.setTextSize(12); 
       text.setGravity(Gravity.LEFT); 
       text.setLayoutParams(new LayoutParams(155, 
         LayoutParams.WRAP_CONTENT)); 
       layout3.addView(text); 

       if (i == 9) { 
        System.out 
          .println("Added second linear layout to first"); 
        layout2.setVisibility(View.VISIBLE); 
        layout2.addView(layout3); 
        layout.addView(layout2); 
       } 
      } else { 
       System.out.println("###### Adding text view " + i); 
       TextView text = new TextView(this); 
       text.setText("The Value of i is :" + i); 
       text.setTextSize(12); 
       text.setGravity(Gravity.LEFT); 
       text.setLayoutParams(new LayoutParams(155, 
         LayoutParams.WRAP_CONTENT)); 
       layout.addView(text); 


      } 
     } 

    } 

} 
+0

Witaj abhy, Otrzymujesz dwie linie informacji lub po prostu jeden..? – Mouni

+0

Tak, działało dobrze z układem pionowym .. Ale chcę go w układzie poziomym, tj. 5 wartości w każdej linii .. co powinienem zrobić dla .. ?? – Mouni

Powiązane problemy