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 只是熟线性布局。

但是如果你接受这个建议,我强烈建议你不要使用 TableLayout。我在上一个应用程序中使用了很多它们来做与你类似的事情,最后用 FrameLayout 和坐标计算代替了所有这些。根据我的经验,TableLayouts 的性能非常糟糕,特别是如果你把 TextViews 放在里面。一张只有 10x10 的桌子会吃掉我平板电脑上的处理器,而 FrameLayout 方法就像预期的那样顺利。如果你看看我前段时间发布的一个问题(超慢的 tablelayout 性能),你会看到一些相关的问题也抱怨性能......

于 2013-08-05T14:53:43.393 回答