AndroidでTableLayoutを使用しています。現在、2つの項目を持つTableRowが1つあり、その下に1つの項目を持つTableRowがあります。次のようにレンダリングされます。
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
---------------
私がやりたいのは、セル3を両方の上部セルに引き伸ばすことなので、次のようになります。
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
-----------------------------
HTMLではCOLSPANを使用します。..Androidでこれを機能させるにはどうすればよいですか?
それを行う属性があるようです: layout_span
更新:この属性は、TableRowの子に適用する必要があります。 TableRow自体ではありません。
答えを完成させるために、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>
そして、これはあなたがプログラムでそれを行う方法です
//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);
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>
たぶんこれは誰かを助けるでしょう。 layout_span
で解決策を試しましたが、これはうまくいきません。そこで、私はこのトリックで問題を解決しました。 colspanが必要なLinearLayout
の代わりにTableRow
を使用するだけです。
tableRow要素の子要素でAndroid:layout_spanを使用します
コードで生成された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つのレイアウトリストを垂直に、内部に別の1つ(この場合は2)のリストを水平に配置します。
Androidでインターフェースを50〜50の部分にうまく分割するのはまだ難しいと思っています。