我正在开发带有聊天功能的应用程序,我希望我的 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())
方法但结果很奇怪 - 它有时滚动到最后一条消息 + 半屏间隙,有时滚动到我看不到任何消息的地方。
有什么想法吗?谢谢。
最佳答案
您可以使用 android:stackFromBottom="true"
从下到上填充列表,并添加 android:transcriptMode="alwaysScroll"
自动滚动 ListView 。
您只需调用 notifyDataSetChanged()
,您的列表就会自动滚动。
为了在大块的情况下处理滚动到绝对底部,您可以在每个列表项下方添加高度为 1 像素的列表项,这样无论您的项目高度是多少,您都将始终被定向到列表末尾。
关于Android ListView 滚动到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290105/