Harish
Harish

Reputation: 63

How to properly align a table layout while adding the table rows dynamically in android

I am trying to add table rows to a table layout with the values fetched from DB. so, the table rows will be added dynamically. I want a nice layout with 2 columns and the text in each center aligned. I am using below code. but it does not work. Can anybody please help.

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

and I am adding the rows to the layout as below.

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

Upvotes: 0

Views: 3312

Answers (2)

Mohanish
Mohanish

Reputation: 469

Put Table Layout in Scroll View in XML because you wouldn't know the count of rows to display..

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

Now your java code :

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

Upvotes: 1

user1213202
user1213202

Reputation: 1305

Try it with this...

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

Specify layout width and height attribute to the ur textview

Upvotes: 1

Related Questions