0

の単一セルを膨らませたいTableLayout

  • 各セルに入れたい情報は固定サイズです
  • Adroid2.2を使用しています
  • テーブルは次のように入力する必要があります。

このような:

 ___ ___
| 1 | 2 |
|---+---|
| 3 | 4 |
|---+---|
| 5 ...
... and so on

私は行を膨らませる方法を知っていますが、膨らませるTableLayoutために単一のセルに対処する方法は知りません。それも可能ですか?回避策は、2つをLinearLayouts隣り合わせに使用することです。

また:

カラムの数を動的に変更できますか?私のアプリは、10.1インチのGalaxy Tabとそのエミュレーター(画面が小さい)の2つのデバイスでのみ実行する必要があります。したがって、実際のデバイスでは、おそらく3つの列を使用する必要があります。テーブルが画面の幅全体に表示され、左側に接着されないようにします。LinearLayoutしかし、回避策でそれを行う方法がわかりません。

4

2 に答える 2

0

これがあなたが尋ねるものであることを願っています:

Android で TableLayout の単一セルを膨らませたい。

を含むこのレイアウト ファイルがあるとしますTableLayout

<TableLayout
        android:id="@+id/tbl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

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

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableRow>

</TableLayout>

ここで、最初の行 (2 番目の位置) に 1 つ、最初の位置 (対角線) の 2 番目の行に 1 つの 2 つのセルを追加するとします。これはあなたがそれを行う方法です:

    TableLayout tl = (TableLayout) findViewById(R.id.tbl);
    TableRow tr1 = (TableRow) findViewById(R.id.tableRow1);
    TableRow tr2 = (TableRow) findViewById(R.id.tableRow2);
    View cell1 = new View(this); // here you could inflate a layout instead
                                    // of this simple View item
    TableRow.LayoutParams trlp1 = new TableRow.LayoutParams(200, 200);
    trlp1.column = 1; // the column count is 0 based
    cell1.setLayoutParams(trlp1);
    cell1.setBackgroundColor(Color.RED);
    tr1.addView(cell1);

    View cell2 = new View(this);
    TableRow.LayoutParams trlp2 = new TableRow.LayoutParams(200, 200);
    trlp2.column = 0;
    cell2.setLayoutParams(trlp2);
    cell2.setBackgroundColor(Color.GREEN);
    tr2.addView(cell2);

列の数を動的に変更できますか?

最大数のセルを持つ行から得られる結果の列のTableLayout数 (行に 2 つのセルがあり、別の行に 12 のセルがある場合、TableLayoutこれらの 2 つの行を含む には 12 の列があります)。列の数を増減するには、セルの数が最も多い行にセルを追加または削除するだけです。

テーブルを画面幅全体に表示し、左側にくっつかないようにしたい

私はあなたが何を望んでいるのか理解できませんでした (あなたTableLayoutの が に設定されていることを願っていますFILL_PARENT)。android:stretchColumns="*"列にTableLayout.

于 2012-06-19T09:16:02.090 に答える
0

他の誰かが同様の質問をしており、未知の量のビューを既存のレイアウトに動的にロードしたい場合:

を使用してRelativeLayout、最初Viewのものを必要な場所に追加し、前に追加されたものを参照して残りを整列させます。Android は、同じ行に収まらないすべてのビューに対して自動的に改行を行うわけではないため、inbefore で計算するか、試行錯誤する必要があります。

これが大まかな例です。まず、インターフェイスを埋めるメソッドからのコード スニペット:

ArrayList<Item> listItems = item.getItems();
if( listItems != null ) {
    for( Item item: listItem ) {
        addItem( MyActivity.this, item, iCounterItemNumber );
        iCounterItemNumber++;
    }
}

そして、ここに addItem メソッドがあります:

private void addItem( Activity context, final Item item, int iCounterItemNumber ) {
    View vItem = LayoutInflater.from(context).inflate(R.layout.layoutinflatable_item, null);
    TextView txtvItemName = (TextView) vItem.findViewById(R.id.textView_itemName);

    txtvItemName.setText(item.getName());

    vItem.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View vItem) {
            // just to show that you can set a OnClickListener      
        }
    });

    if ( iCounterItemNumber == 0 ) {
        RelativeLayout.LayoutParams rlpItemParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        vItem.setId( 100 );
        _rlItemTable.addView( vItem, rlpItemParemeters );
    } else if ( iCounterItemNumber % 2 == 0 ) {
        RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        rlpPackageParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        rlpPackageParemeters.addRule(RelativeLayout.BELOW, ( 100 - 2 + iCounterItemNumber ) );
        vPackage.setId( 100 + iCounterItemNumber );
        _rlShopPackagesTable.addView( vPackage, rlpPackageParemeters );
    } else {
        RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        rlpPackageParemeters.addRule(RelativeLayout.ALIGN_BOTTOM, ( 100 - 1 + iCounterItemNumber ) );
        rlpPackageParemeters.addRule(RelativeLayout.RIGHT_OF, ( 100 - 1 + iCounterItemNumber ) );
        vPackage.setId( 100 + iCounterItemNumber );
        _rlItemTable.addView( vPackage, rlpPackageParemeters );

}

少し短くできることはわかっていますが、大ざっぱな例にすぎません。私がここで何をしたかが明確であることを願っています。異なる画面サイズは対象外です。追加したさまざまなサイズのビューを使用するか、画面サイズを取得してからさまざまな方法を使用します。

于 2012-06-28T09:37:09.537 に答える