Android firebase友好聊天泡泡左右

Android firebase友好聊天泡泡左右,android,listview,firebase,Android,Listview,Firebase,我用firebase做了一顶FriendlyChat 然而,所有的文本都出现在同一行中,无论是发送者还是接收者 我想应用左右对齐的聊天泡泡,但不知道从哪里开始 我还想将文本视图包装在聊天气泡图像中?但我不知道怎么做 任何帮助 public class MessageAdapter extends ArrayAdapter<FriendlyMessage> { public MessageAdapter(Context context, int resource, List<Fr

我用firebase做了一顶FriendlyChat

然而,所有的文本都出现在同一行中,无论是发送者还是接收者

我想应用左右对齐的聊天泡泡,但不知道从哪里开始

我还想将文本视图包装在聊天气泡图像中?但我不知道怎么做

任何帮助

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>