需要ScrollView的最大高度

时间:2013-06-25 22:35:22

标签: android listview scrollview

如何确定ScrollView可用的最大高度?

我想实现像ListView这样的东西,因此,想知道布局列表项有多少空间可用。考虑一个带有简单LinearLayout的应用程序,其中TestList是一个子类ScrollView。 TestList包含一个在运行时添加的LinearLayout。

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

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="top" />

    <com.example.testsimplelist.TestList
        android:id="@+id/test_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="bottom" />

</LinearLayout>

有了这个,我的问题是:我有多少可见的垂直空间用于向“test_list”添加项目。

(我已经离开了ListView路线,但是遇到过多调用getView的问题,造成了太多的速度降级。由于我的使用案例大大减少了ListView,我想我可以实现自己的更少的工作而不是黑客攻击ListView问题。)

这是我尝试过的:

1)使用ScrollView.onMeasure的参数 - 没用,因为它们实际上是无限的。

2)使用ScrollView内部布局的高度 - 这最初为0,因为它没有内容。也就是说,它的高度取决于其内容。

1 个答案:

答案 0 :(得分:1)

这是可靠的(到目前为止)。关键是在使用高度值之前检查MeasureSpec模式:

@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
  super.onMeasure (widthMeasureSpec, heightMeasureSpec);

  int heightMode = MeasureSpec.getMode(heightMeasureSpec);
  if (heightMode == MeasureSpec.EXACTLY)
  {
    int heightSpec = getMeasuredHeight();
    fillView (heightSpec);
  }
}