2012-04-11 3 views
1

Mon fichier layout.xml ressemble à ceci:Android RelativeLayout dynamique

<ScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/scrollView1" 
     android:layout_width="fill_parent" 
     android:layout_height="270dp" 
     android:layout_weight="0.47" > 

     <LinearLayout 
      android:id="@+id/linearLayout2" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 
     </LinearLayout> 

    </ScrollView> 

J'utilise le code suivant pour créer TextView s et Button s dans une boucle for:

View linearLayout = findViewById(R.id.linearLayout2); 


for (int i=0 ; i<10; i++){ 
    TextView textview = new TextView(this); 
    textview.setText("Text view" + i); 
    textview.setId(i); 

    textview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
    ((LinearLayout) linearLayout).addView(textview); 


    Button button = new Button(this); 
    button.setText("View"); 
    button.setId(i); 
    int width=90; 
    int height=60; 
    button.setLayoutParams(new LayoutParams(width, height)); 
    ((LinearLayout) linearLayout).addView(button); 

} 

Je reçois le Button sous le TextView. Quelqu'un peut-il m'aider à remplacer ce LinearLayout par RelativeLayout afin que je reçois le TextView et le Button côte à côte?

Répondre

5

Modifier votre disposition si vous avez une RelativeLayout au lieu du LinearLayout:

<ScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/scrollView1" 
     android:layout_width="fill_parent" 
     android:layout_height="270dp" 
     android:layout_weight="0.47" > 

     <RelativeLayout 
      android:id="@+id/relativeLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      > 
     </RelativeLayout> 

</ScrollView> 

Ensuite, essayez ceci pour faire les TextView s etsit desur la même ligne:

RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout); 
    for (int i = 0; i < 10; i++) { 
     Button button = new Button(this); 
     button.setText("View" + i); 
     button.setId(1000 + i); 
     int width = 90; 
     int height = 60; 

     TextView textview = new TextView(this); 
     textview.setText("Text view" + i); 
     textview.setId(2000 + i); 

     if (i == 0) { 
      RelativeLayout.LayoutParams rlp2 = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.FILL_PARENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      rlp2.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      rlp2.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      textview.setLayoutParams(rlp2); 
      rl.addView(textview); 
      RelativeLayout.LayoutParams rlp1 = new RelativeLayout.LayoutParams(
        width, height); 
      rlp1.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      rlp1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      button.setLayoutParams(rlp1); 
      rl.addView(button); 
     } else { 
      RelativeLayout.LayoutParams rlp2 = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.FILL_PARENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      rlp2.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      rlp2.addRule(RelativeLayout.BELOW, button.getId() - 1); 
      textview.setLayoutParams(rlp2); 
      rl.addView(textview); 
      RelativeLayout.LayoutParams rlp1 = new RelativeLayout.LayoutParams(
        width, height); 
      rlp1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      rlp1.addRule(RelativeLayout.BELOW, button.getId() - 1); 
      button.setLayoutParams(rlp1); 
      rl.addView(button); 
     } 
    } 
+0

fonctionne parfaitement .. merci très monsieur .. –

+0

salut monsieur .. maintenant j'ai besoin d'ajouter un écouteur onclick pour chaque bouton basé sur l'ID de j'ai obtenu de la boucle pour ... pouvez-vous me donner une suggestion sur la façon d'obtenir ce pls ... –

0
View linearLayout = findViewById(R.id.linearLayout2); 


for (int i=0 ; i<10; i++){ 
    TextView textview = new TextView(this); 
    textview.setText("Text view" + i); 
    textview.setId(i); 

    textview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
    ((LinearLayout) linearLayout).addView(textview); 


    Button button = new Button(this); 
    button.setText("View"); 
    button.setId(i); 
    int width=90; 
    int height=60; 
    button.setLayoutParams(new LayoutParams(width, height)); 
    ((LinearLayout) linearLayout).addView(button); 

} 

remplacer ci-dessus avec le code ci-dessous ::

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linearLayout2); 
for (int i=0 ; i<10; i++){ 
LinearLayout l = new LinearLayout(this); 
l.setOrientation(LinearLayout.HORIZONTAL); 

TextView textview = new TextView(this); 
textview.setText("Text view" + i); 
textview.setId(i); 

l.addView(textview); 
Button button = new Button(this); 
button.setText("View"); 
button.setId(i); 
button.setWidth(90); 
button.setHeight(60); 
l.addView(button); 
linearLayout.addView(l);//if you want you can layout params linearlayout 
} 
+0

ne fonctionne pas .. juste une page blanche est affichée .. –

+0

maintenant essayer changé légèrement –

+0

pal désolé .. pas d'amélioration .. encore montre une page blanche. –

0

Vous définissez LinearLayout avec android:orientation="vertical", il aura tendance à être l'un en dessous de l'autre.

Ajoutez votre textview et votre bouton aux dispositions linéaires individuelles, avec l'orientation horizontale, et ajoutez cette linéarisation linéaire à la LinearLayout verticale d'origine.

Edit: Essayez les options suivantes:

View linearLayout = findViewById(R.id.linearLayout2); 

for (int i=0 ; i<10; i++){ 
View indiLyt = new View(this); 
indiLyt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
indiLyt.setOrientation(LinearLayout.HORIZONTAL); 

TextView textview = new TextView(this); 
textview.setText("Text view" + i); 
textview.setId(i); 

textview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
((LinearLayout) indiLyt).addView(textview); 

Button button = new Button(this); 
button.setText("View"); 
button.setId(i); 
int width=90; 
int height=60; 
button.setLayoutParams(new LayoutParams(width, height)); 
((LinearLayout) indiLyt).addView(button); 
((LinearLayout) linearLayout).addView(indiLyt); 
} 
+0

il semble qu'il ne travaille pas pour lui –

0

essayer cette solution ::;

avez un nouveau fichier xml comme ci-dessous dans res/layout de votre projet.

Enregistrer ce que linear.xml

< LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/linear" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/text" 
      android:layout_width=" wrap_content " 
      android:layout_height=" wrap_content " /> 
<Button   android:id="@+id/button" 
      android:layout_width="90dp" 
      android:layout_height="60dp" /> 
    </ LinearLayout > 

et le code ci-dessous :::

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linearLayout2); 
LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService 
     (Context.LAYOUT_INFLATER_SERVICE); 

for (int i=0 ; i<10; i++){ 
View view = inflater.inflate(R.layout.linear,null); 
view.findViewById(R.id.text).setText("Text view" + i); 
view.findViewById(R.id.text).setTextColor(Color.BLUE); 
view.findViewById(R.id.button).setText(“View"); 
view.findViewById(R.id.button).setTextColor(Color.BLUE); 
linearLayout.addView(view); 
} 
+0

merci beaucoup pour votre aide .. obtenu la solution de la suggestion de Luksprog ... –