如何在Android中实现简单的TableLayout?

时间:2014-03-14 16:58:47

标签: android android-tablelayout

我要找的表有很多行,每行有几列需要自动生成它们的大小,以便它们以显示它们所需的最大宽度显示,其中一个需要扩大/收缩以填补剩余空间。

我试图通过将扩展/收缩柱标记为可收缩和可拉伸来实现此目的。但是这似乎不起作用 - 当表格比可用空间宽时,列不会缩小,而是在右侧切断表格,几列不可见。

关于我可能出错的地方的任何指示?

4 个答案:

答案 0 :(得分:2)

最近我不得不面对一个类似的应用程序要求,我终于可以让它工作了。在我的情况下,我需要创建一个TableLayout并动态添加TableRow,具体取决于屏幕的宽度。添加到View的{​​{1}}是TableRow s TextView属性集,所以我不得不玩弄每行显示的项目数,最后可以调整所需的布局。

我会粘贴我的代码并解释我在每一步所做的事情:

layout_weight

答案 1 :(得分:1)

您可以尝试使用单元格的布局权重。如下所示的东西

private static int COLUMN_WEIGHT_1 = 3;
private static int COLUMN_WEIGHT_2 = 1;
private static int COLUMN_WEIGHT_3 = 2;

// this column will stretch to fill the space
private static int COLUMN_WEIGHT_4 = 0;

private void populatePriceTable(){
    TableLayout prices = (TableLayout)findViewById(R.id.pricetable);
    prices.setStretchAllColumns(true);
    prices.bringToFront();

    TableRow tr =  new TableRow(this);
    TextView c1 = new TextView(this);
    c1.setText("A cell");
    TextView c2 = new TextView(this);
    c2.setText("A large cell");
    c2.setGravity(Gravity.CENTER_HORIZONTAL);
    TextView c3 = new TextView(this);
    c3.setText("Another large cell");
    TextView c4 = new TextView(this);
    c4.setGravity(Gravity.RIGHT);
    c4.setText("Filler");
    c1.setLayoutParams( new TableRow.LayoutParams( 0 , android.view.ViewGroup.LayoutParams.WRAP_CONTENT, COLUMN_WEIGHT_1) );
    c2.setLayoutParams( new TableRow.LayoutParams( 0 , android.view.ViewGroup.LayoutParams.WRAP_CONTENT, COLUMN_WEIGHT_2) );
    c3.setLayoutParams( new TableRow.LayoutParams( 0 , android.view.ViewGroup.LayoutParams.WRAP_CONTENT, COLUMN_WEIGHT_3) );
    c4.setLayoutParams( new TableRow.LayoutParams( 0 , android.view.ViewGroup.LayoutParams.WRAP_CONTENT, COLUMN_WEIGHT_4) );
    tr.addView(c1);
    tr.addView(c2);
    tr.addView(c3);
    tr.addView(c4);
    tr.setLayoutParams(new TableRow.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
    prices.addView(tr);     
}

答案 2 :(得分:0)

您可以拥有 ListView 并拥有单独的xml 布局文件,该文件实际上是表格布局

所以在listview中你可以处理你想要的行数,表格布局会使它弹性

答案 3 :(得分:0)

为此行编写单独的XML布局....并根据文本大小使用wrap content / fill parent属性

  <?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="3dp"
    android:layout_marginTop="3dp"
    android:background="#FFFFFF" 
    android:id="@+id/row_calender">



        <TextView
            android:id="@+id/tv_ac_sn"
            android:layout_width="35dp"
            android:layout_height="fill_parent"
            android:background="@drawable/border"
            android:gravity="center"
            android:padding="5dp"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/tv_ac_day"
            android:layout_width="85dp"
            android:layout_height="fill_parent"
            android:background="@drawable/border"
            android:gravity="center"
            android:padding="5dp"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/tv_ac_date"
            android:layout_width="85dp"
            android:layout_height="fill_parent"
            android:background="@drawable/border"
            android:gravity="center"
            android:padding="5dp"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/tv_ac_event"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/border"
            android:gravity="center"
            android:padding="5dp"`
            android:textColor="#000000" />
    </TableRow>