Android firebase友好聊天泡泡左右
我用firebase做了一顶FriendlyChat 然而,所有的文本都出现在同一行中,无论是发送者还是接收者 我想应用左右对齐的聊天泡泡,但不知道从哪里开始 我还想将文本视图包装在聊天气泡图像中?但我不知道怎么做 任何帮助Android firebase友好聊天泡泡左右,android,listview,firebase,Android,Listview,Firebase,我用firebase做了一顶FriendlyChat 然而,所有的文本都出现在同一行中,无论是发送者还是接收者 我想应用左右对齐的聊天泡泡,但不知道从哪里开始 我还想将文本视图包装在聊天气泡图像中?但我不知道怎么做 任何帮助 public class MessageAdapter extends ArrayAdapter<FriendlyMessage> { public MessageAdapter(Context context, int resource, List<Fr
public class MessageAdapter extends ArrayAdapter<FriendlyMessage> {
public MessageAdapter(Context context, int resource, List<FriendlyMessage> objects) {
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false);
}
ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);
FriendlyMessage message = getItem(position);
boolean isPhoto = message.getPhotoUrl() != null;
if (isPhoto) {
messageTextView.setVisibility(View.GONE);
photoImageView.setVisibility(View.VISIBLE);
Glide.with(photoImageView.getContext())
.load(message.getPhotoUrl())
.into(photoImageView);
} else {
messageTextView.setVisibility(View.VISIBLE);
photoImageView.setVisibility(View.GONE);
messageTextView.setText(message.getText());
}
authorTextView.setText(message.getName());
return convertView;
}
公共类MessageAdapter扩展了ArrayAdapter{
公共消息适配器(上下文、int资源、列表对象){
超级(上下文、资源、对象);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=((活动)getContext()).GetLayoutFlater().inflate(R.layout.item_消息,父项,false);
}
ImageView photoImageView=(ImageView)convertView.findViewById(R.id.photoImageView);
TextView messageTextView=(TextView)convertView.findViewById(R.id.messageTextView);
TextView authorTextView=(TextView)convertView.findViewById(R.id.nameTextView);
FriendlyMessage message=getItem(位置);
布尔值isPhoto=message.getPhotoUrl()!=null;
如果(isPhoto){
messageTextView.setVisibility(View.GONE);
photoImageView.setVisibility(View.VISIBLE);
Glide.with(photoImageView.getContext())
.load(message.getPhotoUrl())
.into(photoImageView);
}否则{
messageTextView.setVisibility(View.VISIBLE);
photoImageView.setVisibility(View.GONE);
messageTextView.setText(message.getText());
}
authorTextView.setText(message.getName());
返回视图;
}
}
item_message.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/lp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:orientation="vertical">
<ImageView
android:id="@+id/photoImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true" />
<TextView
android:id="@+id/messageTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0"
android:background="@drawable/messenger_bubble_large_white"
android:padding="2dp"
android:textAppearance="?android:attr/textAppearanceLarge"
tools:text="Message" />
<TextView
android:id="@+id/nameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:textAppearance="?android:attr/textAppearanceSmall"
tools:text="Name" />
</LinearLayout>
只要两个字就可以回答 使用重力 例如
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) _chat_view.getLayoutParams();
lp.gravity = Gravity.END | Gravity.RIGHT;
_chat_view.setLayoutParams(lp);
其中,
\u chat\u view
是您的消息(LinearLayout)容器。Hi@Parjanya您必须检查类型,并根据条件您可以隐藏一个并显示另一个我使用了两个不同的viewHolder和两个不同的xml。我的代码如下
MessageChatAdapter.java
public class MessageChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<ChatMessage> mChatList;
public static final int SENDER = 0;
public static final int RECIPIENT = 1;
public MessageChatAdapter(List<ChatMessage> listOfFireChats) {
mChatList = listOfFireChats;
}
@Override
public int getItemViewType(int position) {
if (mChatList.get(position).getRecipientOrSenderStatus() == SENDER) {
return SENDER;
} else {
return RECIPIENT;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case SENDER:
View viewSender = inflater.inflate(R.layout.layout_sender_message, viewGroup, false);
viewHolder = new ViewHolderSender(viewSender);
break;
case RECIPIENT:
View viewRecipient = inflater.inflate(R.layout.layout_recipient_message, viewGroup, false);
viewHolder = new ViewHolderRecipient(viewRecipient);
break;
default:
View viewSenderDefault = inflater.inflate(R.layout.layout_sender_message, viewGroup, false);
viewHolder = new ViewHolderSender(viewSenderDefault);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case SENDER:
ViewHolderSender viewHolderSender = (ViewHolderSender) viewHolder;
configureSenderView(viewHolderSender, position);
break;
case RECIPIENT:
ViewHolderRecipient viewHolderRecipient = (ViewHolderRecipient) viewHolder;
configureRecipientView(viewHolderRecipient, position);
break;
}
}
private void configureSenderView(ViewHolderSender viewHolderSender, int position) {
ChatMessage senderFireMessage = mChatList.get(position);
viewHolderSender.getSenderMessageTextView().setText(senderFireMessage.getMessage());
viewHolderSender.getmTimeStamp().setText(converteTimestamp(senderFireMessage.getTimestap()));
}
private void configureRecipientView(ViewHolderRecipient viewHolderRecipient, int position) {
ChatMessage recipientFireMessage = mChatList.get(position);
viewHolderRecipient.getRecipientMessageTextView().setText(recipientFireMessage.getMessage());
viewHolderRecipient.getmTimeStamp().setText(converteTimestamp(recipientFireMessage.getTimestap()));
}
/*==============ViewHolder===========*/
/*ViewHolder for Sender*/
public class ViewHolderSender extends RecyclerView.ViewHolder {
private TextView mSenderMessageTextView;
private TextView mTimeStamp;
public ViewHolderSender(View itemView) {
super(itemView);
mSenderMessageTextView = (TextView) itemView.findViewById(R.id.text_view_sender_message);
mTimeStamp = (TextView) itemView.findViewById(R.id.textView2);
}
public TextView getSenderMessageTextView() {
return mSenderMessageTextView;
}
public TextView getmTimeStamp() {
return mTimeStamp;
}
}
/*ViewHolder for Recipient*/
public class ViewHolderRecipient extends RecyclerView.ViewHolder {
private TextView mRecipientMessageTextView;
private TextView mTimeStamp;
public ViewHolderRecipient(View itemView) {
super(itemView);
mRecipientMessageTextView = (TextView) itemView.findViewById(R.id.text_view_recipient_message);
mTimeStamp = (TextView) itemView.findViewById(R.id.textView2);
}
public TextView getRecipientMessageTextView() {
return mRecipientMessageTextView;
}
public TextView getmTimeStamp() {
return mTimeStamp;
}
}
公共类MessageChatAdapter扩展了RecyclerView.Adapter{
私人名单;
公共静态final int SENDER=0;
公共静态最终整数接收者=1;
public MessageChatAdapter(列出listOfFireChats){
mChatList=listOfFireChats;
}
@凌驾
public int getItemViewType(int位置){
if(mChatList.get(position).getRecipientOrSenderStatus()==发送方){
发信人;
}否则{
返回收件人;
}
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup ViewGroup,int viewType){
RecyclerView.ViewHolder-ViewHolder;
LayoutInflater充气器=LayoutInflater.from(viewGroup.getContext());
开关(视图类型){
案件发送者:
查看viewSender=充气机。充气(R.layout.layout\u sender\u消息,视图组,false);
viewHolder=新的ViewHolderSender(viewSender);
打破
个案收件人:
查看viewRecipient=充气机。充气(R.layout.layout\u recipient\u消息,视图组,false);
viewHolder=新的ViewHolderRecipient(viewRecipient);
打破
违约:
View viewSenderDefault=充气机。充气(R.layout.layout\u sender\u消息,视图组,false);
viewHolder=新的ViewHolderSender(viewSenderDefault);
打破
}
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder ViewHolder,int位置){
开关(viewHolder.getItemViewType()){
案件发送者:
ViewHolderSender ViewHolderSender=(ViewHolderSender)viewHolder;
配置SenderView(viewHolderSender,位置);
打破
个案收件人:
ViewHolderRecipient ViewHolderRecipient=(ViewHolderRecipient)viewHolder;
配置RecipientView(viewHolderRecipient,位置);
打破
}
}
私有void配置SenderView(ViewHolderSender ViewHolderSender,内部位置){
ChatMessage senderFireMessage=mChatList.get(位置);
viewHolderSender.GetSenderMessageGetExtView().setText(senderFireMessage.getMessage());
viewHolderSender.getmTimeStamp().setText(converteTimestamp(senderFireMessage.getTimestap());
}
私有void配置RecipientView(ViewHolderRecipient ViewHolderRecipient,内部位置){
ChatMessage recipientFireMessage=mChatList.get(位置);
viewHolderRecipient.getRecipientMessageTextView().setText(recipientFireMessage.getMessage());
viewHolderRecipient.getmTimeStamp().setText(converteTimestamp(recipientFireMessage.getTimestap());
}
/*===================视窗座===========*/
/*发送者的视窗夹*/
公共类ViewHolderSender扩展了RecyclerView.ViewHolder{
私有文本视图mSenderMessageTextView;
私有文本视图mTimeStamp;
公共ViewHolderSender(视图项视图){
超级(项目视图);
mSenderMessageTextView=(TextView)itemView.findViewById(R.id.text\u view\u sender\u message);
mTimeStamp=(TextView)itemView.findViewById(R.id.textView2);
}
公共文本视图GetSenderMessageExtView(){
返回mSenderMessageTextView;
}
公共文本视图getmTimeStamp(){
返回mTimeStamp;
}
}
/*收件人的视图持有者*/
公共类ViewHolderRecipient扩展了RecyclerView.ViewHolder{
私有文本视图mRecipientMessageTextView;
私有文本视图mTimeStamp;
public ViewHolderRecipient(查看项目视图){
超级(项目视图);
mRecipientMessageTextView=(TextView)itemView.findViewById(R.id.text\u view\u recipient\u message);
mTimeStamp=(TextView)itemView.findViewById(R.id.textView2);
}
公共文本视图getRecipientMessageTextView(){
返回mRecipientMessageTextView;
}
公共文本视图getmTimeStamp(){
返回mTimeStamp;
}
}
布局\发送者\消息.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view_sender_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="I am doing ok"
android:padding="8dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="2dp"
android:textStyle="bold"
android:textSize="14sp"
android:textColor="#FFFFFF"
android:background="@drawable/sender_rounded_corners"
android:layout_alignParentRight="true" />
<TextView
android:id="@+id/textView2"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/text_view_sender_message"
android:layout_gravity="bottom"
android:layout_toLeftOf="@id/text_view_sender_message"
android:text="TextView"
android:textSize="12sp"
android:textStyle="italic"/>
</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view_recipient_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Hi. How are you?"
android:padding="8dp"
android:textStyle="bold"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="2dp"
android:textColor="#727272"
android:textSize="15sp"
android:background="@drawable/recipient_rounded_corners"/>
<TextView
android:id="@+id/textView2"
android:layout_width="69dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/text_view_recipient_message"
android:text="TextView"
android:textSize="12sp"
android:layout_gravity="bottom"
android:textStyle="italic"/>
</LinearLayout>