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);
}
}
}
}
如果有的話,請給我提供更好的解決方案。提前致謝。
這是行不通的,因爲'ScrollView'只能有一個孩子。 – Metaphore
@Metaphore ya scrollview有oly一個孩子....請再次檢查... –
是的,但有什麼要點只有一個表的表? – Metaphore