[英]How to have a view draggable until it becomes full height then make it scrollable?
[英]How to make list view scrollable until the last element is on top of the screen
我正在开发一个需要显示日历议程的应用程序,就像本机日历中的议程一样。 我有一个列表视图显示不同的事件(注意:在问题的上下文中,事件是我的系统的实体)。 我想在这个屏幕上提供一个“今天”按钮。 当用户点击此按钮时,应该滚动事件,直到当前日期时间表的第一个事件位于屏幕顶部。 当我今天只安排了几个事件时,问题就出现了 - 很少有人没有填满整个屏幕。 然后列表视图只会滚动,直到日历中的最后一个事件位于底部。 这通常意味着没有实现将第一个今天的事件放在首位的预期效果。
有什么建议可以做到这一点? 我想到最后添加一些空白元素,但这似乎是丑陋的解决方法,而且它需要特殊的设备特定计算,它将告诉我要插入多少元素。
编辑 :
在评论中添加一些代码请求
实际上我不确定这段代码会让任何人感到惊讶,但是:
public void onTodayClicked(View target) {
// calculate the indexOf. It works and is not related to the question
if (indexOf >= 0) {
ListView list = (ListView) findViewById(R.id.events_list_view);
list.setSelection(indexOf);
}
}
我不确定布局定义对于回答问题很重要,但如果您这么认为我也可以添加它。
您可以通过两种方式实现这一目标:
使用smoothScroll方法更好,因为它实际上平滑过渡 - 这意味着它真正滚动到它。 唯一的缺点是它只能在API级别11之后才能使用。
setSelectionFromTop方法从API级别1开始工作,但它不是平滑滚动,而是跳转到该行。
如果您不需要定位到屏幕顶部,只需查看行,您还可以使用smoothScrollToPosition,这是API级别8调用。
如果给这些方法提供位置,即列表中的FIRST ,它们将很好地工作。 (根据你的描述,我认为你可能会计算最后一个位置,但我不能确定)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.