0

次のように 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 で提供されている多くの解決策を試しましたが、どれもうまくいきません。何が欠けているのかわからない。どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

1

空白の画像を含む別のテーブル行を (ループ内に) 追加します。画像のサイズを指定して、スペースに必要なサイズを作成します。

于 2013-01-02T20:58:15.910 に答える
0

setMarginsメソッドのドキュメントには、次の注記が含まれています。

新しいマージンが考慮されるように、requestLayout()を呼び出す必要があります。レイアウトの方向によっては、左右の余白がrequestLayout()によって上書きされる場合があります。

fbTableLayout.requestLayout()...したがって、すべての行を追加した後で呼び出すことを試してみてください。すでに投稿したコードではビューが無効になるはずなので、これはおそらく違いはありませんが、試してみても害はありません。

それでも問題が解決しない場合は、各テーブル行内で別のビューグループ(FrameLayoutなど)を使用して、ImageViewとTextViewを含め、そこにパディングを設定できます。

于 2013-01-02T21:29:06.087 に答える
0

テーブル行を追加するときにこれを試しましたか?

fbTableLayout.addView(fbTableRow, layoutParams);

そうでない場合は、テーブル行内の個々のビューにマージンを設定してみることができますが、行がテーブル レイアウトに追加されているときに、上記のレイアウト パラメータを適用する必要があると確信しています。

于 2013-01-02T20:55:07.227 に答える