2011-12-18 267 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