2011-12-13 150 views
1

我在android应用程序中遇到问题。我想在TableLayout中动态创建TableRow。每一行都需要包含4个TextView。 我想TextView的是这样的:Android:在固定宽度的TableLayout上动态添加TextView

  • textview1:屏幕的40%
  • textview2:屏幕的10%
  • textview3:屏幕的10%
  • textview5:的40%屏幕

我设法动态创建Tewtview,但不考虑尺寸。例如,如果我的第一个textview包含一个大文本,它将覆盖所有屏幕,而不仅仅是40%和多行。

我读了很多类似的问题,但在这里找不到解决方案。这是我的布局文件:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:stretchColumns="1" 
android:layout_marginLeft="10dip" 
android:layout_marginRight="10dip" 
android:layout_marginBottom="30dip" 
android:id="@+id/journee_contenu"> 

<TableRow> 
    <!-- Column 1 --> 
    <TextView 
    android:id="@+id/tbl_txt1" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="4" 
    android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 
     /> 

    <!-- Column 2 --> 
    <TextView 
    android:id="@+id/tbl_txt2" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="bbbbb" 
    /> 

    <!-- Column 3 --> 
    <TextView 
    android:id="@+id/tbl_txt3" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="ccccc" 
     /> 
     <!-- Column 4 --> 
    <TextView 
    android:id="@+id/tbl_txt4" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="4" 
    android:text="ddddddddddddddddddddddddddddddddddddddddddddddd" 
     /> 
</TableRow> 

布局创建一个具有第一行是因为我希望它是一个静态的标签。但是,动态添加的行不具有相同的行为方式。

我的动态代码:

TableLayout genLayout = (TableLayout) findViewById(R.id.journee_contenu); 
for (MatchWrapper match : matchs) { 
    TableRow tr1 = new TableRow(this); 
    TextView tvEq1 = new TextView(this); 
    tvEq1.setText(match.getEquipe1()); 
    TextView tvSc1 = new TextView(this); 
    tvSc1.setText(match.getScore_equipe1()); 
    TextView tvSc2 = new TextView(this); 
    tvSc2.setText(match.getScore_equipe2()); 
    TextView tvEq2 = new TextView(this); 
    tvEq2.setText(match.getEquipe2()); 
    tr1.addView(tvEq1); 
    tr1.addView(tvSc1); 
    tr1.addView(tvSc2); 
    tr1.addView(tvEq2); 
    genLayout.addView(tr1); 
} 

我的匹配对象只包含字符串与各种大小。非常感谢您的帮助

回答

6

你动态地添加TableRows不这样做,你会喜欢它的原因是你没有设置LayoutParamsTableRow也不TextViews

在每个TextView添加LayoutParams这样的:

tvEq1.setLayoutParams(new TableRow.LayoutParams(0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 4)); 
tvSc1.setLayoutParams(new TableRow.LayoutParams(0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1)); 
tvSc2.setLayoutParams(new TableRow.LayoutParams(0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1)); 
tvEq2.setLayoutParams(new TableRow.LayoutParams(0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 4)); 

LayoutParams -constructor的最后一个参数是layout_weight

在将TextViews添加到TableRow之前,您需要添加LayoutParams

您可能需要将LayoutParams添加到您的TableRow

+0

非常感谢Kasper!我尝试了很多,但看起来很简单! – Ulfounet

相关问题