I'm facing an issue on my android application. I want to dynamically create TableRow in a TableLayout. Each of this row needs to contain 4 TextViews. I want the TextView like this:
I manage to create the Tewtview dynamically but the size are not respected. For example if my first textview contains a big text, it covers all the screen instead of only 40% and multiline.
I read a lot of similar questions but can't find the solution here. Here is my layout file:
<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>
The Layout creates a static tab with a first row that is as I want it to be. But the rows added dynamically are not behaving the same way.
My dynamic code:
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);
}
My match object is only containing string with various size. Thanks a lot for your help
The reason your dynamicly added TableRows
don't do as you would like is that you do not set the LayoutParams
for the TableRow
nor the TextViews
.
On each TextView
you add LayoutParams
like this:
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 ) );
The last parameter of the LayoutParams
-constructor is the layout_weight
.
You need to add the LayoutParams
before addind the TextViews
to the TableRow
.
You might need to add LayoutParams
to your TableRow
aswell.