1

我正在使用 TableLayout 打印九张图片。出于某种原因,如下图所示,我在行之间出现了很大的差距。我将背景设置为绿色,以便容易看到间隙。我的 TableLayout 是以编程方式创建的。我该如何解决这个问题,使行之间的差距不是那么大?

我已经试过了tableRowParams.setMargins(0,0,0,0)

顺便说一句:不,我不想使用 ListView 等。

我一直在搞乱代码来解决这个问题。以下是代码的当前状态:

编辑:正确的图像:

在此处输入图像描述

编辑:代码现在可以正常工作(感谢@Guian):

public class FacialExpressionImagesTable extends TableLayout {

    public FacialExpressionImagesTable(Context context, List<Bitmap> imageList, int sideDimension, int tableWidth, int tableHeight) {
        super(context);
        setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        setBackgroundColor(Color.BLUE);
        setContent(imageList, context, sideDimension);

    }

    private void setContent(List<Bitmap> imageList, Context context, final int sideDimension) {
        final int iHeight = imageList.get(0).getHeight();
        final int iWidth = imageList.get(0).getWidth();
        int ndx = 0;

        for (int r = 0; r < sideDimension; r++) {
            TableRow tableRow = new TableRow(context);
            TableLayout.LayoutParams forRow = new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
            tableRow.setLayoutParams(forRow);
            tableRow.setBackgroundColor(Color.RED);
            TableRow.LayoutParams elementLayout = new TableRow.LayoutParams(iWidth, LayoutParams.WRAP_CONTENT, 1);
            tableRow.requestLayout();
            for (int c = 0; c < sideDimension; c++) {
                    ImageView element = new ImageView(context);
                    element.setLayoutParams(elementLayout);

                    element.setAdjustViewBounds(true);
                    element.setPadding(0, 0, 3, 3);
                    element.setBackgroundColor(Color.GREEN);
                    element.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                    element.setImageBitmap(imageList.get(ndx++));
                    element.requestLayout();
                    tableRow.addView(element);

            }
            addView(tableRow);
        }

    }

}
4

2 回答 2

1

还尝试将填充设置为,0以便表格的每一行内没有填充

于 2013-03-15T07:33:02.100 回答
1

首先:请注意,您在以下位置交换宽度和高度:

new TableRow.LayoutParams(iHeight, iWidth);

但无论如何,你不能给你的表项提供位图的getHeightgetWidth的大小,因为它们将被调整大小(取决于屏幕大小、屏幕密度等......你必须根据密度计算新大小.. . )

在这里我认为他们减少了。这就是为什么行的高度太大。

设置您的布局参数,以便元素采用wrap_content高度和 0dip,layout_weight宽度为 1;

TableRow.LayoutParams elementLayout = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1 );

然后表格行将包装内容作为高度:

TableLayout.LayoutParams forRow = new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

如果图像未按需要缩放,您可能需要为您的ImageViews: ( 使用setScaleType )设置缩放类型

elementLayout.setScaleType(ScaleType.CENTER_INSIDE); // 或 FIT_CENTER... 不太确定

应该不错,有没有就说吧。

希望有帮助。

于 2013-03-17T15:22:33.973 回答