TableLayout 在放置在 ScrollView 中时被截断

TableLayout being truncated when placed inside ScrollView

我有一个用多行数据动态填充的 TableLayout。它包含的数据超出了屏幕的容量,因此我要求它可以滚动。

我的问题是,当我将 TableLayout 放在 ScrollView 中时,它似乎从 TableLayout 的顶部切断了很多行。

作为参考,完整的代码在这里(问题已经很杂乱了,无法容纳所有内容)http://pastebin.com/w7Fi3Bzz

请参阅下文,了解与我遇到的问题相关的代码

这是没有 ScrollView 的 XML:

        <TableLayout
            android:orientation="vertical"
            android:fillViewport="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center_horizontal"
            android:id="@+id/tbl_statistics"
            android:stretchColumns="*"
            android:paddingTop="20dp"
            android:paddingBottom="20dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            >
        </TableLayout>

它的样子:

这里是相同的 XML,带有一个封闭的 ScrollView:

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true"
    >

        <TableLayout
            android:orientation="vertical"
            android:fillViewport="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center_horizontal"
            android:id="@+id/tbl_statistics"
            android:stretchColumns="*"
            android:paddingTop="20dp"
            android:paddingBottom="20dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            >
        </TableLayout>

</ScrollView>

这是 table 的样子,您可以看到 table 的顶部被截断了(它填充了完全相同的数据):

我在这里 LinearLayout not expanding inside a ScrollView 发现了类似的问题,但答案对我没有帮助。

在你的current layout中:

  1. TableLayout 元素中删除 android:layout_gravity="center"

  2. android:layout_weight="1" 添加到 ScrollView 元素。

  3. 清理并重建您的项目。

此外,fillViewport 属性仅适用于 ScrollViews。

我只通过将 TableLayout 插入到 LinearLayout 中解决了同样的问题,LinearLayout 是 ScrollView 的唯一子项。我尝试了所有其他变体但没有成功(fillViewport 代表 ScrollViewandroid:layout_weight="1" 代表 TableLayout)。

我用TableLayout动态插入Views

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TableLayout
            android:id="@+id/activity_displayFields_tableLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp" />
    </LinearLayout>
</ScrollView>