2

TableLayout を使用して複雑なグリッドを作成しようとしています。私はこのようにxmlで作成することができます(グリッド内のいくつかのボックスは強調表示されていません):

ここに画像の説明を入力

このコードで:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical">

<FrameLayout 
   android:layout_width="fill_parent"
   android:layout_height="fill_parent" 
   android:layout_weight="0.15">


    <TableLayout 
         android:layout_width="fill_parent"
         android:layout_height="fill_parent">

        <TableRow
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="@android:color/holo_green_light"
             android:layout_weight="1">
             <TableRow
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="@android:color/holo_green_light"
             android:layout_weight="1">

            </TableRow>
            <TableRow
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="@android:color/holo_orange_light"
             android:layout_weight="1">

            </TableRow>

            </TableRow>
         <TableRow
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:layout_weight="1">

              <TableRow
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="@android:color/holo_orange_light"
             android:layout_weight="1">

            </TableRow>
            <TableRow
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="@android:color/holo_green_light"
             android:layout_weight="1">

            </TableRow>


        </TableRow>          
    </TableLayout>

    <TableLayout 
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
         <TableRow 
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
              android:background="@android:color/holo_green_light"
             android:layout_weight="1"/>
         </TableLayout>

     <TableLayout 
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
        <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_orange_light"
            android:layout_weight="1">

             <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_orange_light"
            android:layout_weight="1"/>                 
            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_red_light"
            android:layout_weight="1"/>
            <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_blue_light"
            android:layout_weight="1"/>
            <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_green_light"
            android:layout_weight="1"/>

        </TableRow>

        <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_green_light"
            android:layout_weight="1">

            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_green_light"
            android:layout_weight="1"/>
            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_orange_light"
            android:layout_weight="1"/>                 
            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_red_light"
            android:layout_weight="1"/>
            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_blue_light"
            android:layout_weight="1"/>

        </TableRow>

         <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_blue_light"
            android:layout_weight="1">

            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_blue_light"
            android:layout_weight="1"/>
             <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_green_light"
            android:layout_weight="1"/>
             <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_orange_light"
            android:layout_weight="1"/>                 
            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_red_light"
            android:layout_weight="1"/>

        </TableRow>

        <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_red_light"
            android:layout_weight="1">

            <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_red_light"
            android:layout_weight="1"/>
             <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_blue_light"
            android:layout_weight="1"/>
              <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_green_light"
            android:layout_weight="1"/>
             <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/holo_orange_light"
            android:layout_weight="1"/>     

        </TableRow>
         </TableLayout>

    </FrameLayout>
  <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="0.85"></LinearLayout>

問題は、このグリッドの一部をプログラムで作成しようとすると、TableLayout の直接の子である TableRow のみが表示され、別の TableRow の子である TableRows が表示されないことです。私はこのJavaコードを使用します:

TableLayout table1 = new TableLayout(this);
//Add TableLayout to a FramLayout holding multiple TableLayouts
frame.addView(table1);
table1.setBackgroundResource(R.color.some_random_color_for_debugging);


for(int num = 0; num<2; num++){
    //4x2
    TableRow row = new TableRow(this);
    TableLayout.LayoutParams par = new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.FILL_PARENT, 1f);
    row.setLayoutParams(par);
    if(num==1){
        row.setBackgroundResource(R.color.some_random_color_for_debugging1);
    }
    table1.addView(row, par);       
    for(int num1 = 0; num1<2; num1++){
        //2x2
        TableRow box = new TableRow(this);
        TableRow.LayoutParams param = new TableRow.LayoutParams();
        box.setLayoutParams(param);
        if(num1==1){
            box.setBackgroundResource(R.color.some_random_color_for_debugging2);
        }
        row.addView(box, par);      
    }
}

このコードは、画面の半分を some_random_color_for_debugging1 にし、背景色を some_random_color_for_debugging にします。

TableRow の行とボックスの両方を表示するにはどうすればよいですか?

4

1 に答える 1

1

TableRow が適切に機能するには、親として TableLayout が必要だと思います。質問を TableLayout/TableRow で機能させるには、すべての行に新しい TableLayout を追加する必要があります。TableLayout / TableRows はクックされた LinearLayouts であるため、おそらく、提案している構造を使用して手動で微調整することができます。

ただし、アドバイスを受け入れる場合は、TableLayout をまったく使用しないことを強くお勧めします。私は最後のアプリでそれらの多くを使用して、あなたのものと同様のことを行い、最終的にそれらすべてを FrameLayout と座標計算に置き換えました。私の経験では、特に TextViews を内部に配置した場合、TableLayouts のパフォーマンスはひどいものです。わずか 10x10 のテーブルがタブレットのプロセッサを食い尽くしますが、FrameLayout アプローチは期待どおりに動作します。少し前に投稿した質問 (テーブルレイアウトのパフォーマンスが非常に遅い) を見ると、パフォーマンスについて不平を言っている関連する質問がいくつかあることがわかります ....

于 2013-08-05T14:53:43.393 に答える