滚动视图中的两个列表视图由于某种原因忽略了wrap_content

时间:2013-09-12 12:40:45

标签: java android listview

我有一个场景,我有两个列表视图,一个在另一个之上,我正在努力使它滚动顶部列表,直到它到达列表的底部,然后继续到第二个列表。

继承我拥有的XML,因为你可以看到它们都设置为包装内容。它会滚动,但只显示每个列表视图中的1个选项而不是所有内容。

<ScrollView
    android:id="@+id/scrllArea"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@+id/bottombar" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/topbar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tvTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:text="{0} Issues"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <ListView
                android:id="@+id/lvIssues"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawSelectorOnTop="false" >
            </ListView>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/topbar2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tvTitle2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:text="{0} Issues"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <ListView
                android:id="@+id/lvNewIssues"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:drawSelectorOnTop="false" >
            </ListView>
        </LinearLayout>
    </LinearLayout>
</ScrollView>

1 个答案:

答案 0 :(得分:4)

建议您不要将一个滚动组件放在另一个组件中。但是,如果您需要此布局中的ListView,则可以解决此问题。他们不会滚动。它们将扩展到全高,以便所有项目都可见。

在名为UI(或您选择的任何其他名称)的新包中创建一个新类,并粘贴以下内容:

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ListView;

public class ExpandedListView extends ListView 
{
    private android.view.ViewGroup.LayoutParams params;
    private int oldCount = 0;

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

    @Override
    protected void onDraw(Canvas canvas)
    {
        if (getCount() != oldCount) 
        {
            int height = getChildAt(0).getHeight() + 1 ;
            oldCount = getCount();
            params = getLayoutParams();
            params.height = getCount() * height;
            setLayoutParams(params);
        }

        super.onDraw(canvas);
    }
}

现在按如下方式定义ListViews

        <com.example.UI.ExpandedListView <!--or whatever your package path name is -->
            android:id="@+id/lvIssues"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:drawSelectorOnTop="false" >
        </ListView>


        <com.example.UI.ExpandedListView
            android:id="@+id/lvNewIssues"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:drawSelectorOnTop="false" >
        </ListView> 

请注意,height属性设置为fill_parent。由于我们在onDraw()的{​​{1}}方法中执行的限制,它不会在视觉上填充其父组件。

然而,我再说一遍;如果您可以重新考虑其他布局,请这样做,因为您提供的布局是不可取的。

祝你好运。