【问题标题】:Android - give space between dynamically created table rowsAndroid - 在动态创建的表行之间留出空间
【发布时间】:2013-01-02 20:48:50
【问题描述】:

我在 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));
    }

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

我已经通过 stackoverflow 中提供的许多解决方案来解决此问题,但没有一个对我有用。不知道我错过了什么。 任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 你的问题是如何解决的?

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


【解决方案1】:

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

【讨论】:

  • 我试过了,它确实有效并给出了预期的结果。但我想应该可以通过调整边距来做到这一点。因此,我将尝试看看是否可以通过这样做来使其正常工作。 (如果有人遇到类似问题,可以回复这篇文章)非常感谢您的回复。非常感谢。
【解决方案2】:

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

fbTableLayout.addView(fbTableRow, layoutParams);

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

【讨论】:

  • 我按照您的建议尝试了这两种方法,但都没有奏效。 :( 还有什么我可以尝试的吗?
  • 这很奇怪;我知道我自己以编程方式更改了边距(即stackoverflow.com/a/3002321/832776)以获取其他视图。看起来其他人在TableRows 上取得了成功:stackoverflow.com/questions/4577644/…
  • 是的,我使用了完全相同的示例 [stackoverflow.com/questions/4577644/…,但这对我不起作用。唯一的补充是我的&lt;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="*" &gt; &lt;/TableLayout&gt; 和父 LinearLayout(如我的原始代码所示)。你觉得那里有问题吗?
  • 我不知道;它应该工作;我会尝试摆弄一些东西:1)删除所有 XML 属性(即stretchColumns),2)尝试更改目标 SDK,3)尝试在不同的设备或模拟器上运行。也只需确认并确保您在任何地方都使用正确的 ID;当我更新与预期不同的视图时,我无法告诉你这种情况发生的频率。
  • 我一定会检查所有这些。非常感谢您的回复。
【解决方案3】:

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

需要调用 requestLayout() 以便考虑新的边距。 requestLayout() 可能会根据布局方向覆盖左右边距。

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

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

【讨论】:

  • fbTableLayout.requestLayout() 不起作用。将尝试 FrameLayout。感谢您的建议。
猜你喜欢
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多