web-dev-qa-db-ja.com

Android TableLayoutの「colspan」に相当するものは何ですか?

AndroidでTableLayoutを使用しています。現在、2つの項目を持つTableRowが1つあり、その下に1つの項目を持つTableRowがあります。次のようにレンダリングされます。

-----------------------------
|   Cell 1    |  Cell 2     |
-----------------------------
|   Cell 3    |
---------------

私がやりたいのは、セル3を両方の上部セルに引き伸ばすことなので、次のようになります。

-----------------------------
|   Cell 1    |  Cell 2     |
-----------------------------
|           Cell 3          |
-----------------------------

HTMLではCOLSPANを使用します。..Androidでこれを機能させるにはどうすればよいですか?

127
Spike Williams

それを行う属性があるようです: layout_span

更新:この属性は、TableRowの子に適用する必要があります。 TableRow自体ではありません。

188
Sephy

答えを完成させるために、layout_span属性をTableRowではなく子に追加する必要があります。

このスニペットは、tableLayoutの3行目で、2列にまたがっています。

<TableLayout>
    <TableRow
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" >

        <Button
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_span="2"
            Android:text="@string/create" />
    </TableRow>
</TableLayout>
87
Maragues

そして、これはあなたがプログラムでそれを行う方法です

//theChild in this case is the child of TableRow
TableRow.LayoutParams params = (TableRow.LayoutParams) theChild.getLayoutParams();
params.span = 2; //amount of columns you will span
theChild.setLayoutParams(params);
34
Onimusha

Layout_weightを使用して行全体を埋める必要があります。それ以外の場合は、テーブルレイアウトの左または右の列を埋めます。

<TableRow
  Android:id="@+id/tableRow1"
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content">

        <Button
            Android:id="@+id/button1"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_span="2"
            Android:layout_weight="1"
            Android:text="ClickMe" />

    </TableRow>
25
Raghavendra

たぶんこれは誰かを助けるでしょう。 layout_spanで解決策を試しましたが、これはうまくいきません。そこで、私はこのトリックで問題を解決しました。 colspanが必要なLinearLayoutの代わりにTableRowを使用するだけです。

5
Dimanoid

tableRow要素の子要素でAndroid:layout_spanを使用します

3
Mosiur

コードで生成されたTableRowやTextviewなどの場合、rowspanで問題が発生しました。 Onimushの答えが良いように見えても、生成されたUIでは機能しません。

以下に、動作しないコードを示します。

            TableRow the_ligne_unidade = new TableRow(this);
            the_ligne_unidade.setBackgroundColor(the_grey);

            TextView my_unidade = new TextView(this);
            my_unidade.setText(tsap_unidade_nom);
            my_unidade.setTextSize(20);
            my_unidade.setTypeface(null, Typeface.BOLD);
            my_unidade.setVisibility(View.VISIBLE);

            TableRow.LayoutParams the_param;
            the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams();
            the_param.span = 3;
            my_unidade.setLayoutParams(the_param);

            // Put the TextView in the TableRow
            the_ligne_unidade.addView(my_unidade);

コードは問題ないようですが、「the_params」の初期化に到達すると、NULLを返します。

一方、このコードは魅力のように機能します。

            TableRow the_ligne_unidade = new TableRow(this);
            the_ligne_unidade.setBackgroundColor(the_grey);

            TextView my_unidade = new TextView(this);
            my_unidade.setText(tsap_unidade_nom);
            my_unidade.setTextSize(20);
            my_unidade.setTypeface(null, Typeface.BOLD);
            my_unidade.setVisibility(View.VISIBLE);

            // Put the TextView in the TableRow
            the_ligne_unidade.addView(my_unidade);

            // And now, we change the SPAN
            TableRow.LayoutParams the_param;
            the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams();
            the_param.span = 3;
            my_unidade.setLayoutParams(the_param);

唯一の違いは、スパンを設定する前に、TableRow内にTextviewをプッシュすることです。そして、この場合、動作します。これが誰かを助けることを願っています!

1
Peter

レイアウトを別のレイアウトにラップする必要があると思います。 1つのレイアウトリストを垂直に、内部に別の1つ(この場合は2)のリストを水平に配置します。

Androidでインターフェースを50〜50の部分にうまく分割するのはまだ難しいと思っています。

0
RobGThai