1

TableLayoutを使用して9枚の画像を印刷しています。下の画像に示すように、何らかの理由で行間に大きなギャップが生じています。隙間が見やすいように背景を緑に設定しました。私の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のサイズを指定することはできません。サイズが変更されるためです (画面サイズ、画面密度などに応じて...密度に応じて新しいサイズを計算する必要があります.. . )

ここでは、それらが削減されていると思います。そのため、行の高さが大きすぎます。

要素が高さを取り、幅が 1wrap_contentの 0dip になるようにレイアウト パラメータを設定します。layout_weight

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 に答える