2012-04-11 86 views
1

layout.xml文件看起来像这样:的Android动态的RelativeLayout

<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> 

我用下面的代码创建一个for循环内TextView S和Button S:

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); 

} 

我得到Button在TextView下面。任何人都可以帮我用替换RelativeLayout,这样我就可以得到TextViewButton并排?

回答

5

修改您的布局让你有一个RelativeLayout代替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> 

然后尝试使用TextViewButton s的同样排坐:

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

完美的作品..谢谢非常多先生.. – 2012-04-11 19:13:16

+0

嗨先生..现在我需要添加一个onclick监听器的每个按钮的基础上,我从循环获得的ID ...你能给我建议如何实现这个请... – 2012-04-13 17:43:46

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); 

} 

下面的代码替换上述::

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

没有工作..只是显示一个空白页.. – 2012-04-11 17:51:08

+0

现在尝试改变轻微 – 2012-04-11 17:55:20

+0

对不起朋友..没有改善..它仍然显示空白页。 – 2012-04-11 17:59:38

0

您与android:orientation="vertical"定义的LinearLayout,所以它往往是一个低于另一个。

将您的textview和按钮添加到单个线性布局,方向为水平,并将此linearLayout添加到原始垂直LinearLayout。

编辑:尝试以下操作:

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

它似乎没有为他工作 – 2012-04-11 18:20:36

0

尝试此解决方案::;

在您的项目的res /布局中有一个新的xml文件。

保存为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 > 

和下面的代码:::

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

非常感谢你的帮助..得到了解决方案从Luksprog的建议... – 2012-04-11 19:14:07