Android - 在动态创建的表行之间提供空间

时间:2013-01-02 20:48:51

标签: java android android-layout android-widget android-linearlayout

我在LinearLayout中定义了一个表格布局,如下所示:

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:background="#E6E6E6"
    android:orientation="vertical" >

    <TableLayout
        android:id="@+id/fbTableLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@android:color/darker_gray"
        android:stretchColumns="*" >

    </TableLayout>
</LinearLayout>

我正在向TableLayout添加动态行,如下所示:

fbTableLayout = (TableLayout) findViewById(R.id.fbTableLayout);
    for (int i = 0; i < 4; i++) {
        fbTableRow = new TableRow(this);
        fbTableRow.setBackgroundColor(Color.WHITE);
        LayoutParams layoutParams = new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        int leftMargin=10;
        int topMargin=2;
        int rightMargin=10;
        int bottomMargin=2;

        layoutParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);

        fbTableRow.setLayoutParams(layoutParams);

        ImageView iv = new ImageView(this);
        iv.setBackgroundDrawable(getResources().getDrawable(
                R.drawable.ic_launcher));
        iv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT,
                0.25f));

        TextView tv = new TextView(this);
        tv.setText("Album "+ i);
        tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT,
                0.75f));

        fbTableRow.addView(iv);
        fbTableRow.addView(tv);
        fbTableLayout.addView(fbTableRow, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    }

但是我无法在生成的行之间生成空格。布局如附图所示。

enter image description here

我已经完成了stackoverflow中给出的一些解决方案来解决这个问题但是没有一个能为我工作。不确定我错过了什么。 任何帮助将不胜感激。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

使用空白图像添加另一个表格行(在循环中)。指定图像的大小以创建空间所需的大小。

答案 1 :(得分:0)

您是否在添加表格行时尝试过此操作?

fbTableLayout.addView(fbTableRow, layoutParams);

如果没有,您可以尝试在表格行中的各个视图上设置边距,但我很确定上面应该在将行添加到表格布局时应用布局参数。

答案 2 :(得分:0)

setMargins方法的文档包括以下注释:

  

需要完成对requestLayout()的调用,以便考虑新的边距。 requestLayout()可以覆盖左右边距,具体取决于布局方向。

...所以要尝试的一件事就是在添加完所有行后调用fbTableLayout.requestLayout()。这可能不会产生任何影响,因为视图应该在您已经发布的代码中失效,但尝试不会有什么坏处。

如果这不起作用,您可以在每个表行中使用另一个视图组(例如FrameLayout)来包含ImageView和TextView并在那里设置填充。