【问题标题】:Android- Fixed header horizontal and vertical scrolling tableAndroid- 修复表头横竖滚动表
【发布时间】:2013-11-27 11:46:41
【问题描述】:

我需要创建一个表格布局,其中标题行不会是滚动视图的一部分,但整个布局应该是水平滚动视图的一部分。我尝试了各种解决方案。一个是here ,另一个是here 。一切都很好。但就我而言,问题是我需要一切都是动态的。并且还有以下要求。
1) 使用固定标题垂直滚动表格。
2) 水平滚动整个视图。
3)点击每个标题,我需要对表格内容进行排序。即所有行都应该重新排列。这也有效,但标题和内容表的对齐都是徒劳的。
请查看链接,下面是我的布局 xml 文件

<?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是一个自定义的LinearLayout,代码是用onLayout方法写的,用来重新调整表格的列宽。 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);
        }
    }

}

}

如果有人可以,请为我提供更好的解决方案。提前致谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    这里是满足 1) 使用固定标题垂直滚动表格的 xml。 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>
    

    这里是样式。根据您的商品宽度要求添加任意 2 张图片

    <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>
    

    为时已晚,但我希望它可以帮助某人 干杯!

    【讨论】:

    • 不行,因为ScrollView只能有一个孩子。
    • 有两行...水平方向和垂直方向...一旦实现代码,您将理解并再次阅读问题..
    • 它不起作用,因为它的父 TableLayout 和子 TableLayout 的大小不会相同
    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 2017-09-30
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多