2011-12-18 273 views
4

我想箱子定制TableLayout以行是这样的:定制TableLayout与行多TextViews

电视是TextView的,即我要11个TextViews添加到该行:

enter image description here

每行以标题开头,然后添加5对TextView,以便表格行与屏幕一样宽。 这里是我的代码:

public class FlowTable extends TableLayout { 

    private Context context; 

    public FlowTable(Context context) { 
     super(context); 
     this.context = context; 
    } 

    public FlowTable(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context = context; 
    } 

    public void addContent(List<ResultItem> data) { 

     TableRow tableRow = new TableRow(context); 

     LayoutParams params = new LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1); 

     for (int i = 0; i < data.size(); i++) { 

      if (i % 5 == 0) { 
       this.addView(tableRow, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 

       tableRow = new TableRow(context); 
       TextView tvRange = new TextView(context); 
       tvRange.setLayoutParams(params); 
       tvRange.setText(genRange(i+1)); 
       tableRow.addView(tvRange); 

      } 
      TextView tvDistance = new TextView(context); 
      tvDistance.setLayoutParams(params); 
      tvDistance.setText(String.valueOf(data.get(i).distance)); 

      TextView tvResult = new TextView(context); 
      tvResult.setLayoutParams(params); 
      tvResult.setText(data.get(i).result); 

      tableRow.addView(tvDistance); 
      tableRow.addView(tvResult); 
     } 
    } 

    private String genRange(int currIndex){ 
     /********************/ 
     return somestring; 
    } 
} 

使用表:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <packagename.FlowTable 
     android:id="@+id/flowTable" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 

在片段:

View root = inflater.inflate(R.layout.fragment_session_summary, container, false); 
     FlowTable flowTable = (FlowTable)root.findViewById(R.id.flowTable); 
     flowTable.addContent(data); 

问题:屏幕只是EMP TY!一点都没有。在我将layout params添加到textview之前它工作正常,但行没有占用屏幕宽度。我的初始解决方案基于LinearLayout示例,因为TableRow是LinearLayout的扩展。但我无法让它工作。 谢谢。

+0

我不确定它是否可以正常工作,但是尝试在您的''标记中添加'android:stretchColumns =“*”'。否则,我也会尝试使用另一个'addView'重载:'tableRow.addView(tvRange,params)' – Dalmas 2011-12-18 19:34:09

回答

10

尝试以编程方式设置所有列伸展(似乎没有在XML工作对我来说):

... 
flowTable.addContent(data); 
flowTable.setStretchAllColumns(true); 

其他一些快速的事实:

  • 没有必要去尝试,并指定高度, TableRayout内的TableRow的宽度为,因为它始终为height = WRAP_CONTENT和width = MATCH_PARENT。请参见TableLayout documentation,其中列出在“类概览”部分中
  • 因为它们始终为height = WRAP_CONTENT和width = MATCH_PARENT,所以无需为TableRow的子项尝试指定高度和窗口小部件。看到这是在类概述部分

上市TableRow documentation也许我也虚心建议有点重构:

public class FlowTable extends TableLayout { 
    private TableRow mCurrentRow; 

    public FlowTable(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public FlowTable(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     mCurrentRow = new TableRow(getContext()); 
     mCurrentRow.addView(createAndFillTextView("0")); // title for first row 
     setStretchAllColumns(true); 
    } 

    public void addContent(List<ResultInfo> data) { 
     for (int i = 0; i < data.size(); i++) { 
      if ((i % 5 == 0) && (i != 0) /** Don't do this on 0! */) { 
       finishRowAndStartNew(i); 
      } 

      mCurrentRow.addView(createAndFillTextView(data.get(i).distance)); 
      mCurrentRow.addView(createAndFillTextView(data.get(i).result)); 
     } 
    } 

    private void finishRowAndStartNew(int newRowIndex) { 
     addView(mCurrentRow); 
     mCurrentRow = new TableRow(getContext()); 
     mCurrentRow.addView(createAndFillTextView(genRange(newRowIndex+1))); 
    } 

    private String genRange(int currIndex){ 
     /********************/ 
     return String.valueOf(currIndex); 
    } 

    private TextView createAndFillTextView(String text) { 
     TextView tv = new TextView(getContext()); 
     tv.setText(text);   
     return tv; 
    } 
} 
+0

谢谢!我已经删除了参数并添加了flowTable.setStretchAllColumns(true);它现在有效! – 2011-12-27 10:42:51

1

如果你想使用XML布局为那就试试这个:

<TableLayout 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="wrap_content" android:layout_height="wrap_content"> 
       <TableRow android:weightSum="1"> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 
         <TextView android:id="@+id/totalText" 
          android:layout_height="wrap_content" android:layout_width="wrap_content" 
          android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
          android:text="Title" android:layout_weight="1"/> 
        </LinearLayout> 
        <!-- First Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 

         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 
        <!-- Second Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 


        <!-- Third Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 

        <!-- Fourth Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 

         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2" /> 
        </LinearLayout> 
        <!-- Fifth Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="2dp"> 

         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 
       </TableRow> 
       <TableRow android:weightSum="1"> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 
         <TextView android:id="@+id/totalText" 
          android:layout_height="wrap_content" android:layout_width="wrap_content" 
          android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
          android:text="Title" android:layout_weight="1"/> 
        </LinearLayout> 
        <!-- First Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 

         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 
        <!-- Second Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 


        <!-- Third Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 

        <!-- Fourth Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="4dp"> 

         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2" /> 
        </LinearLayout> 
        <!-- Fifth Group --> 
        <LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" 
         android:layout_width="wrap_content" android:layout_weight="1" android:layout_marginRight="2dp"> 

         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv1"/> 
         <TextView android:id="@+id/totalText" 
           android:layout_height="wrap_content" android:layout_width="wrap_content" 
           android:textStyle="bold" android:textSize="12sp" android:textColor="#000000" 
           android:text="Tv2"/> 
        </LinearLayout> 
       </TableRow> 
</TableLayout> 

希望它能帮助你。 。 。 如果你想其他然后xml然后让我知道。 谢谢。

+0

谢谢,我会尝试将其转换为编程式布局创建。 – 2011-12-27 10:38:48

+0

是的。如果你没有得到欲望的输出,那就让我知道。 – 2011-12-27 10:44:32