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


132

AndroidでTableLayoutを使用しています。現在、2つのアイテムを含む1つのTableRowがあり、その下に、1つのアイテムを含むTableRowがあります。これは次のようにレンダリングされます:

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

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

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

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


イムホ、私はこれを行うためのより良い方法を考えています。ここで答え: stackoverflow.com/a/18682293/1979882
Vyacheslav

1
参考までに、TableLayoutは基本的にLinearLayoutであることに注意してください。つまり、任意の子を直接追加できます。したがって、単一の全列スパンビューの場合、TableRowをスキップできます。
ralfoide 2015

回答:


196

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

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


8
うん、これは。ただし、Eclipseレイアウトウィジェットは、使用可能なプロパティにリストされていなかったため、ウィジェットについて認識していないようです。しかし、それは機能します。
スパイクウィリアムズ、

2
答えであなたの更新に+1してください。EclipseがCtrl + Spaceでそのオプションを提供しない理由を見つけようとしていました!:D;)
Nirav Zaveri 2014年

ビューでlayout_spanを使用しています。次に、そのビューでウェイトを使用できません。wrap_contentを使用する必要があります。どうして?
eCドロイド2017

93

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

このスニペットは、2つの列にまたがる私のtableLayoutの3行目を示しています。

<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>

36

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

//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);

7
また、params.weight = 1を設定して、スパンされたコンテンツを行いっぱいにする必要がある場合もあります。
rmir​​abelle 2013

1
動かない。stackoverflow.com/a/18682293/1979882ここで説明を書きました。
ビャチェスラフ2013

7
最初に行に子を追加してください。
Artem Kalinchuk 14

1
@DacSaunders Answerがロールバックされました。あなたの編集はあなたのニーズに固有のものでした。元の答えはメソッドの一般的なものであり、31の親指を立てると、おそらく何か間違ったことをしていると言うかもしれませんか?子供を最初に追加する必要があることを強調するArtemのコメントも参照してください。childこのケースでは、あなたの編集が示唆されていないだけでTextViewのように、何もすることができます。ありがとう
Onimusha

27

行全体を埋めるには、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>

3
ありがとうございました。これは、小さな要素や柔軟な要素(私の場合はスピナー)で欠けていた情報でした。
chksr 2016

5

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


1
また、LinearLayoutである必要はありません。望み通り、ただ眺めるだけ。
JPMagalhaes 2013年

3

TableRow要素の子要素でandroid:layout_spanを使用します


1

コードで生成されたTableRow、Textviewなどの場合、行スパンに問題がありました。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をプッシュすることです。そしてこの場合、それは機能します。これが誰かを助けることを願っています!


0

レイアウトを別のレイアウトでラップする必要があると思います。縦に1つのレイアウトリストを入れ、横に別の1つ(この場合は2つ)のリストを入れます。

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


不明な理由により、レイアウトの3分の1が横向きモードで非表示になる別のテーブル関連のバグを回避するためにこれを行うことになりました。
スパイクウィリアムズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.