ListView - 设置最小高度,以便始终允许滚动

时间:2011-02-05 11:39:46

标签: android listview scroll

我目前正在Android中实现Pull To Refresh功能。现在我通过使用列表项上方的标题视图创建自定义ListView来实现它。实质上:当顶部标题视图在视图中时,通过监听器启动刷新。

在启动ListView时,它会自动在HeaderViews下方滚动,隐藏它们直到用户向下滚动。当List Items的高度超过ListView本身的高度(因此有滚动)时,这很有用,但是当Children的高度小于ListView的高度时,没有滚动,并且强制显示HeaderViews

基本上我所追求的是一种强制ListView的滚动区域至少是我的HeaderViews的ListView +高度的高度的方法。我已经获得了HeaderViews的高度,我找不到获取ListView实际高度的方法(即使用fill_parent时)以及设置最小滚动高度的方法。有什么想法吗?

这将在我完成后在GitHub上发布,适用于Android 1.5 +。

2 个答案:

答案 0 :(得分:1)

我通过将footerView添加到足够大的尺寸来解决这个问题:

final int numberHeaderViewsForPullToRefresh = 2;


@Override
protected void onSizeChanged(int w, final int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    if (this.getCount() > numberHeaderViewsForPullToRefresh) {

        // This is from Droid-Fu. Converts dip to px
        final int size = DisplaySupport.dipToPx(getContext(), 60);
        int childViewHeight = (this.getCount() - numberHeaderViewsForPullToRefresh) * size;

        Utils.writeLog("Child Views Height: " + childViewHeight);

        if (childViewHeight < h) {
            this.removeFooterView(footerPad);
            footerPad.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, h - childViewHeight));
            this.addFooterView(footerPad, null, false);
        }
    }

}

答案 1 :(得分:0)

我遇到了同样的问题但完全解决了......

我没有将任何页眉或页脚设置到我的列表视图而是将总列表项目数增加2

说我有10个列表项,然后我的列表显示12个视图..

在适配器getView()方法中膨胀视图时,我检查位置并为第一个和最后一个位置充气页眉和页脚视图。为了休息,我在列表项目上应用我所需的视图..这对我来说确实是一个解决方案。

并且它也起作用检查以下链接我写了一个代码以正确使用列表视图。

Change ListView background - strange behaviour

在这段代码中你会发现一个getView mathod让它为页眉,页脚和休息列表提供不同的视图

如果你这样做那么它没关系,否则我会为它增加一些亮点..