我正在使用聊天开发应用,我希望我的ListView
在用户发布新消息时滚动到底部,并且当用户位于列表底部并且收到新消息时。我正在使用此ListView
:
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:divider="@null"
android:dividerHeight="0dp"
android:stackFromBottom="true"
android:paddingBottom="9dp"
android:clipToPadding="false"/>
这种方法可以在需要时强制滚动:
private void scrollListViewToBottom() {
listView.setSelection(adapter.getCount() - 1);
}
但是当聊天包含高度大于屏幕高度的元素(大文字或图片)时,它会滚动到它的顶部。我需要将ListView
精确地滚动到底部,而不是最后一个元素。
我尝试使用listView.scrollTo(0, listView.getBottom())
方法,但结果非常奇怪 - 它有时会滚动到最后一条消息+半屏间隙,有时会滚动到我看不到任何消息的地方。
有什么想法吗?感谢。
答案 0 :(得分:6)
您可以使用android:stackFromBottom="true"
从下到上填充列表,并添加android:transcriptMode="alwaysScroll"
以自动滚动列表视图。
您只需致电notifyDataSetChanged()
,您的列表就会自动滚动。
如果在大块的情况下处理滚动到绝对底部,您可以在每个列表项下方添加高度为1 px的列表项,这样无论您项目的高度如何,您都将始终指向列表末尾是