Android 使用 RecyclerView 聊天
Android chat using RecyclerView
我正在尝试使用 RecyclerView 创建一个聊天应用程序,以便在 chatBubble 表单 中显示消息列表。
在recyclerView 中,在每一行布局中我都有两个文本视图。一个用于显示消息,另一个用于显示时间戳。对于短消息,它有效。但是,对于长消息,聊天气泡会变得太大,并且在这种情况下看不到相应的用于显示时间戳的 TextView。
- 为什么会发生这种情况以及如何纠正,
- 另外,RecyclerView中每个项目之间的space需要增加,我尝试使用
android:dividerHeight="12dp"
但是没有用。
正如@Mohammed Atif 评论的那样,而不是使用
android:layout_toRightOf="@+id/message
使用这个
android:layout_alignParentRight="true"
现在,要在 recyclerview 的项目之间添加 space,您需要添加 itemDecorator
public class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration {
private final int mVerticalSpaceHeight;
public VerticalSpaceItemDecoration(int mVerticalSpaceHeight) {
this.mVerticalSpaceHeight = mVerticalSpaceHeight;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
if (parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1) {
outRect.bottom = mVerticalSpaceHeight;
}
}
}
然后像这样将这个项目装饰器添加到 recyclerview
recyclerview.addItemDecoration(new VerticalSpaceItemDecoration(2));
这里,2是recyclerview列表项之间的space。
我正在尝试使用 RecyclerView 创建一个聊天应用程序,以便在 chatBubble 表单 中显示消息列表。
在recyclerView 中,在每一行布局中我都有两个文本视图。一个用于显示消息,另一个用于显示时间戳。对于短消息,它有效。但是,对于长消息,聊天气泡会变得太大,并且在这种情况下看不到相应的用于显示时间戳的 TextView。
- 为什么会发生这种情况以及如何纠正,
- 另外,RecyclerView中每个项目之间的space需要增加,我尝试使用
android:dividerHeight="12dp"
但是没有用。
正如@Mohammed Atif 评论的那样,而不是使用
android:layout_toRightOf="@+id/message
使用这个
android:layout_alignParentRight="true"
现在,要在 recyclerview 的项目之间添加 space,您需要添加 itemDecorator
public class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration {
private final int mVerticalSpaceHeight;
public VerticalSpaceItemDecoration(int mVerticalSpaceHeight) {
this.mVerticalSpaceHeight = mVerticalSpaceHeight;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
if (parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1) {
outRect.bottom = mVerticalSpaceHeight;
}
}
}
然后像这样将这个项目装饰器添加到 recyclerview
recyclerview.addItemDecoration(new VerticalSpaceItemDecoration(2));
这里,2是recyclerview列表项之间的space。