2013-11-27 142 views
0

我需要創建一個表格佈局,其中標題行不是滾動視圖的一部分,但整個佈局應該是水平滾動視圖的一部分。我試過各種解決方案。一個是here另一個是here。一切運作良好。但我的情況是,我需要一切都是動態的。還有以下要求。
1)使用固定標題垂直滾動表格。
2)水平滾動整個視圖。
3)點擊每個標題,我需要對錶格內容進行排序。即所有的行應重新排列。這也適用,但標題和內容表的排列都是徒勞的。
請參閱鏈接,下面是我的佈局xml文件Android-固定標題水平和垂直滾動表

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

    <LinearLayout 
    android:id="@+id/tabsLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginLeft="2dp" 
    android:layout_marginTop="2dp" 
    android:orientation="horizontal" 
    android:weightSum="100" > 
</LinearLayout> 

<HorizontalScrollView 
    android:id="@+id/contentHorizontalScrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/tabsLayout" 
    android:layout_marginLeft="2dp" 
    android:layout_marginTop="2dp" 
    android:layout_marginBottom="20dp" 
    android:layout_marginRight="2dp" 

    android:fillViewport="true" > 

    <com.myapp.uiutilities.ScrollingTable 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/leaderboardScrollingTable" 
     android:orientation="vertical"> 

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

     <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 

      > 

      <TableLayout 
       android:id="@+id/leaderboard_content_table" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       > 
      </TableLayout> 
     </ScrollView> 
    </com.myapp.uiutilities.ScrollingTable> 
</HorizontalScrollView> 

</RelativeLayout> 

ScrollingTable是什麼,其中的代碼是寫在onLayout方法定製的LinearLayout重新調整表的列寬。 代碼如下ScrollingTable.java。

public class ScrollingTable extends LinearLayout 
{ 
public ScrollingTable(Context context) 
{ 
    super(context); 
} 

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

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) 
{ 

    super.onLayout(changed, l, t, r, b); 
    List<Integer> colWidths = new LinkedList<Integer>(); 

    TableLayout header = (TableLayout) findViewById(R.id.leaderboard_header_table); 
    TableLayout body = (TableLayout) findViewById(R.id.leaderboard_content_table); 
    for (int rownum = 0; rownum < body.getChildCount(); rownum++) 
    { 
     TableRow row = (TableRow) body.getChildAt(rownum); 
     for (int cellnum = 0; cellnum < row.getChildCount(); cellnum++) 
     { 
      View cell = row.getChildAt(cellnum); 
      Integer cellWidth = cell.getWidth(); 
      if (colWidths.size() <= cellnum) 
      { 
       colWidths.add(cellWidth); 
      } 
      else 
      { 
       Integer current = colWidths.get(cellnum); 
       if(cellWidth > current) 
       { 
        colWidths.remove(cellnum); 
        colWidths.add(cellnum, cellWidth); 
       } 
      } 
     } 
    } 

    for (int rownum = 0; rownum < header.getChildCount(); rownum++) 
    { 
     TableRow row = (TableRow) header.getChildAt(rownum); 
     for (int cellnum = 0; cellnum < row.getChildCount(); cellnum++) 
     { 
      View cell = row.getChildAt(cellnum); 
      TableRow.LayoutParams params = (TableRow.LayoutParams)cell.getLayoutParams(); 
      params.width = colWidths.get(cellnum); 
     } 
    } 

} 

} 

如果有的話,請給我提供更好的解決方案。提前致謝。

回答

1

這裏滿足的xml 1)用固定標題垂直滾動表格。 2)滾動全景水平的要求,而沒有任何代碼

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/rlayout_resultsfields" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:fillViewport="true" 
    android:measureAllChildren="false" 
    android:scrollbars="vertical" > 

    <TableLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:stretchColumns="1" > 

     <TableRow 
      android:id="@+id/tablerow_header" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@android:color/transparent" > 

      <TextView 
       android:id="@+id/tview1" 
       style="@style/tableheaderback_tview" 
       android:text="header1" /> 

      <TextView 
       android:id="@+id/tview2" 
       style="@style/tableheadertrans_tview" 
       android:text="header2" /> 

      <TextView 
       android:id="@+id/tview3" 
       style="@style/tableheaderback_tview" 
       android:text="header3" /> 

      <TextView 
       android:id="@+id/tview4" 
       style="@style/tableheadertrans_tview" 
       android:text="header4" /> 

      <TextView 
       android:id="@+id/tview5" 
       style="@style/tableheaderback_tview" 
       android:text="header5" /> 

      <TextView 
       android:id="@+id/tview6" 
       style="@style/tableheadertrans_tview" 
       android:text="header6" /> 

      <TextView 
       android:id="@+id/tview7" 
       style="@style/tableheaderback_tview" 
       android:text="header7" /> 

      <TextView 
       android:id="@+id/tview8" 
       style="@style/tableheadertrans_tview" 
       android:text="header8" /> 

      <TextView 
       android:id="@+id/tview9" 
       style="@style/tableheaderback_tview" 
       android:text="header9" /> 

      <TextView 
       android:id="@+id/tview10" 
       style="@style/tableheadertrans_tview" 
       android:text="header10" /> 

      <TextView 
       android:id="@+id/tview11" 
       style="@style/tableheaderback_tview" 
       android:text="header11" /> 

      <TextView 
       android:id="@+id/tview12" 
       style="@style/tableheadertrans_tview" 
       android:text="header12" /> 
     </TableRow> 

     <ScrollView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:scrollbars="vertical" > 

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

       <TextView 
        android:id="@+id/tview11" 
        style="@style/tableheaderback_tview" 
        android:text="content1" /> 

       <TextView 
        android:id="@+id/tview21" 
        style="@style/tablecontenttrans_tview" 
        android:text="content2" /> 

       <TextView 
        android:id="@+id/tview31" 
        style="@style/tableheaderback_tview" 
        android:text="content3" /> 

       <TextView 
        android:id="@+id/tview41" 
        style="@style/tableheadertrans_tview" 
        android:text="content4" /> 

       <TextView 
        android:id="@+id/tview51" 
        style="@style/tableheaderback_tview" 
        android:text="content5" /> 

       <TextView 
        android:id="@+id/tview61" 
        style="@style/tableheadertrans_tview" 
        android:text="content6" /> 

       <TextView 
        android:id="@+id/tview71" 
        style="@style/tableheaderback_tview" 
        android:text="content7" /> 

       <TextView 
        android:id="@+id/tview81" 
        style="@style/tableheadertrans_tview" 
        android:text="content8" /> 

       <TextView 
        android:id="@+id/tview91" 
        style="@style/tableheaderback_tview" 
        android:text="content9" /> 

       <TextView 
        android:id="@+id/tview101" 
        style="@style/tableheadertrans_tview" 
        android:text="content10" /> 

       <TextView 
        android:id="@+id/tview111" 
        style="@style/tableheaderback_tview" 
        android:text="content11" /> 

       <TextView 
        android:id="@+id/tview121" 
        style="@style/tableheadertrans_tview" 
        android:text="content12" /> 
      </TableRow> 
     </ScrollView> 
    </TableLayout> 

</HorizontalScrollView> 

這裏的樣式。根據您的項目寬度要求

<style name="tableheadertrans_tview"> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:textSize">16sp</item> 
     <item name="android:textColor">#ffffff</item> 
     <item name="android:paddingTop">15dp</item> 
     <item name="android:background">@drawable/dashboard_separatortrans</item> 
    </style> 

    <style name="tableheaderback_tview"> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:textSize">16sp</item> 
     <item name="android:textColor">#ffffff</item> 
     <item name="android:paddingTop">15dp</item> 
     <item name="android:background">@drawable/dashboard_separator</item> 
    </style> 

    <style name="tablecontenttrans_tview"> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:textSize">16sp</item> 
     <item name="android:textColor">#ffffff</item> 
     <item name="android:background">@drawable/dashboard_separatortrans</item> 
    </style> 

    <style name="tablecontentback_tview"> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:textSize">16sp</item> 
     <item name="android:textColor">#ffffff</item> 
     <item name="android:background">@drawable/dashboard_separator</item> 
    </style> 

添加任何2個圖像爲時已晚,但我希望它能幫助別人 喝彩!

+2

這是行不通的,因爲'ScrollView'只能有一個孩子。 – Metaphore

+0

@Metaphore ya scrollview有oly一個孩子....請再次檢查... –

+0

是的,但有什麼要點只有一個表的表? – Metaphore