TableLayout中具有相同宽度的列,*以编程方式*

时间:2014-05-15 17:36:18

标签: android android-layout

我在SO上读到,为了获得每个列具有相同宽度的tablelayout,您可以将android:width="0dp"android:weight="1"设置为布局参数,它可以正常工作。 我会得到相同的结果,但是以编程方式,所以我尝试了这段代码:

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

但正如评论中所解释的那样,它并没有像预期的那样发挥作用。 我无法得到我所缺少的东西。

3 个答案:

答案 0 :(得分:8)

我的代码中存在错误,LayoutParams是错误的类,我应该使用TableRow.LayoutParams而不是TableLayout.LayoutParams,所以:

row.addView(t, new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1f));

按预期工作。

答案 1 :(得分:0)

你可以这样试试。

<?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 &amp; 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>

答案 2 :(得分:0)

您也可以尝试执行此操作,特别是如果您希望在表格单元格之间设置边距。

TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(0,TableRow.LayoutParams.WRAP_CONTENT,1f);
tableRowParams.setMargins(5,5,5,5);
row.addView(t, tableRowParams);

要进行统一的列分配,必须在您的xml文件的android:stretchColumns="*"中添加TableLayout