如何在android中动态添加表行时正确对齐表格布局

时间:2012-02-25 03:54:08

标签: android android-layout android-widget tablelayout

我正在尝试使用从DB获取的值将表行添加到表布局中。因此,表行将动态添加。 我想要一个漂亮的布局,有2列,每个中心的文字对齐。我正在使用下面的代码。但它不起作用。任何人都可以帮忙。

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/display_table" >
 <TableRow
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_margin="1dp"
      >

      <TextView android:background="@drawable/cell_shape" 
          android:textAppearance="?android:attr/textAppearanceMedium" 
          android:gravity="center"
          android:text=""/>
      <TextView android:background="@drawable/cell_shape"
           android:textAppearance="?android:attr/textAppearanceMedium" android:text=""
           android:gravity="center"/>
     </TableRow>

    </TableLayout> 

我将这些行添加到布局中,如下所示。

private void addHeaderRow(TableLayout tl){
    TableRow tr = new TableRow(this);
    tr.setPadding(1, 1, 1, 1);

    tr.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
         /* Create a Button to be the row-content. */
         TextView text1 = new TextView(this);
         TextView text2 = new TextView(this);

         text1.setText(in.toUpperCase());
         text2.setText(out.toUpperCase());

         text1.setGravity(Gravity.LEFT);
         text2.setGravity(Gravity.CENTER);
         tr.addView(text1);
         tr.addView(text2);
   /* Add row to TableLayout. */
   tl.addView(tr,new TableLayout.LayoutParams(
         LayoutParams.FILL_PARENT,
         LayoutParams.WRAP_CONTENT));
   }

2 个答案:

答案 0 :(得分:1)

试试这个......

   <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/display_table" >
<TableRow
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_margin="1dp"
  >

  <TextView android:layout_width="150dp"
      android:layout_height="wrap_content"
     android:background="@drawable/cell_shape"  
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:gravity="center"
      android:text=""/>
  <TextView 
      android:layout_width="160dp"
      android:layout_height="wrap_content" 
     android:background="@drawable/cell_shape" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text=""
       android:gravity="center"/>
 </TableRow>

</TableLayout> 

指定文本视图的布局宽度和高度属性

答案 1 :(得分:1)

将表格布局放在Scroll View中,因为您不知道要显示的行数。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     android:id="@+id/display_table" >
</TableLayout> 
</ScrollView>

现在你的java代码:

class SomeTableLayout extends Activity{

private TableLayout tableLayout = null;
private TableLayout.LayoutParams params= null;

void onCreate(){

tableLayout = (TableLayout)findViewById(R.id.display_table);

addHeaderRow();

}

private void addHeaderRow(){

tableLayout.removeAllViews();

for(int i = 0; i < cursor.length(); i++){
TableRow tr = new TableRow(this);
tr.setPadding(1, 1, 1, 1);
tr.setId(i + 1);
tr.setOnclickLinstener(new onClickListener(){
    // do some datanse operation on click of row.
});

params = new TableLayout.LayoutParams(TableLayout.LayoutParams.fillParent,
TableLayout.LayoutParams.wrapContent);

       /* Create a Button to be the row-content. */
     TextView text1 = new TextView(this);
     TextView text2 = new TextView(this);

     text1.setText(in.toUpperCase());
     text2.setText(out.toUpperCase());

     text1.setGravity(Gravity.LEFT);
     text2.setGravity(Gravity.CENTER);
     tr.addView(text1);
     tr.addView(text2);

     /* Add row to TableLayout. */
     tl.addView(tr);
    }
   }
 }