Reputation: 2825
I read on SO that in order to obtain a tablelayout where each column has the same width, you can set android:width="0dp"
and android:weight="1"
as layout parameter and it works.
I would obtain the same result, but programmatically, so I tried this chunk of code:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_score, container, false);
TableRow row = (TableRow)rootView.findViewById(R.id.playerRow);
for (Player p : game.getPlayers()) {
TextView t = new TextView(rootView.getContext());
t.setText(p.getName());
row.addView(t, new TableLayout.LayoutParams(0, TableLayout.LayoutParams.WRAP_CONTENT, 1f));
// with the previuos line of code, nothing is showed
// instead this work: row.addView(t) , but each column doesn't take the maximum width (as I would)
}
return rootView;
}
But as explained in comment, it doesn't work as expected. I can't get what I am missing.
Upvotes: 1
Views: 8988
Reputation: 2879
You can also try this one, especially if you wish to set margins among table cells.
TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(0,TableRow.LayoutParams.WRAP_CONTENT,1f);
tableRowParams.setMargins(5,5,5,5);
row.addView(t, tableRowParams);
For uniform column distribution must add android:stretchColumns="*"
in TableLayout
in your xml file.
Upvotes: 1
Reputation: 2825
There is an error in my code, LayoutParams is the wrong class, I should have used TableRow.LayoutParams
instead of TableLayout.LayoutParams
, so:
row.addView(t, new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1f));
works as expected.
Upvotes: 10
Reputation: 659
You can try like this.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tableLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<!-- 2 columns -->
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<TextView
android:id="@+id/textView1"
android:text="Column 1"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
android:text="Column 2" />
</TableRow>
<!-- edittext span 2 column -->
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<EditText
android:id="@+id/editText1"
android:layout_span="2"
android:text="Column 1 & 2" />
</TableRow>
<!-- just draw a red line -->
<View
android:layout_height="2dip"
android:background="#FF0000" />
<!-- 3 columns -->
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<TextView
android:id="@+id/textView2"
android:text="Column 1"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button2"
android:text="Column 2" />
<Button
android:id="@+id/button3"
android:text="Column 3" />
</TableRow>
<!-- display this button in 3rd column via layout_column(zero based) -->
<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<Button
android:id="@+id/button4"
android:layout_column="2"
android:text="Column 3" />
</TableRow>
<!-- display this button in 2nd column via layout_column(zero based) -->
<TableRow
android:id="@+id/tableRow5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<Button
android:id="@+id/button5"
android:layout_column="1"
android:text="Column 2" />
</TableRow>
</TableLayout>
Upvotes: 0