您可以查看ListView.setOverscrollHeader() or ListView.setOverscrollFooter()。这是您正在寻找的行为吗?
如果没有,您能否发布一些代码来展示您目前拥有的内容?
编辑:
好的,所以我研究了 Overscrolling 页眉/页脚,你是对的,我认为这根本不是你想要的。
相反,您可能应该研究其他人试图模仿的 Twitter 应用程序中的“拉动刷新”机制。您可以查看this question的答案。
最有希望的答案似乎是 Johan Nilson 编写的自定义 ListView,其代码可以在这里找到:
https://github.com/johannilsson/android-pulltorefresh
编辑 #2:
我查看了 PullToRefresh 自定义 ListView,您想要做的可能是可能的,但不一定容易。请允许我解释一下。
PullToRefreshListView 本质上只是一种利用标准 ListView 中可选 Header 的 hack。您看到的隐藏的“Pull To Refresh”实际上只是ListView的标题。显示列表时,执行此行:
setSelection(1);
这会将列表滚动到列表中的第一项,从而有效地隐藏标题。当列表足够短以完全显示在屏幕上时,不需要滚动,因此需要“点击刷新”按钮。
当这个“点击刷新”可见时,拉动刷新机制被禁用,但很容易解决这个问题。拉动刷新效果是通过增加标题视图的顶部填充来实现的,这样看起来您正在下拉列表(实际上更准确地说是标题正在将列表的其余部分向下推)。
添加的填充量由源代码第 199 行的 applyHeaderPadding() 函数控制。在该函数中,第 220 行的 if 语句仅在列表处于 RELEASE_TO_REFRESH 模式时应用填充:
if (mRefreshState == RELEASE_TO_REFRESH)
{
//Some code that eventually adds padding to the header...
}
如果您消除此条件或将其更改为应用填充,无论您处于何种模式,您都可以拖动以刷新,即使列表很短并且标题显示“点击刷新”
if (true)
{
//Some code that eventually adds padding to the header...
}
但是,这并不能完全创建您正在寻找的效果。如果列表很短,您可以将其向下拖动以刷新,但仍会显示“点击刷新”标题。现在的问题是“如何在拖动动作开始之前隐藏标题?”这本身就是一个难题,有几个Stack Overflow questions 专门解决它。
如果你想要一个标题,你必须在你为 ListView 设置适配器之前添加它,否则你会得到各种各样的错误。
我在这方面取得了一些成功,但我还没有想出任何稳定的东西,因为我的解决方案是在已经被破解的 PullToRefreshListView 之上的一种令人讨厌的破解。我将一个空的 FrameLayout 设置为标题,并将原始的拉动刷新标题添加到该 Frame 布局。然后,当我拖动列表时,我在 Frame Layout 的 LayoutParameters 中编辑了高度,以像最初的填充一样增长和缩小。它有点工作,但最终会强制关闭,我还没有弄清楚为什么。
无论如何,如果我让它工作,我会发布代码,否则比我更聪明的人可能会根据我刚刚提供的信息提出解决方案。