crear un diseño de chatView en android

Estoy creando una aplicación de chat y estoy pensando en formas de crear la vista de chat real.

Ya tengo el diseño de la ventana de chat en sí, pero estaba pensando en cómo implementar los mensajes de chat.

Estaba pensando en crear TableLayout y cada fila será la imagen de los usuarios y el mensaje de chat (o burbuja o no).

¿Alguien tiene una idea sobre cómo diseñar y crear estas filas?

esto es lo que hice hasta ahora:

          

¿Qué hay de debajo del código –

Main.xml

    

list_row_layout_even.xml

       

list_row_layout_odd.xml

       

Esta es mi salida –

Captura de pantalla

Simplemente personalice este ejemplo con sus necesidades.

En lugar de TableLayout, le sugiero que cree un adaptador personalizado para ListView . Solo necesita verificar la condición para cambiar el fondo de diseño / vistas dentro del método getViews() .

Algún hilo puede ser útil para usted:

  1. Android: estilo de ListView como conversaciones de mensajes de texto
  2. Android Implementing Chat Bubble en ListView

list_item_message_left.xml

         

list_item_message_right.xml

         

bg_msg_from.xml

                    

bg_msg_you.xml

                    

triangle_msg_from.xml

                   

triangle_msg_you.xml

                   

messageListAdapter.java

  package eddine.charef.mechalikh....; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MessagesListAdapter extends BaseAdapter { private Context context; private List messagesItems; public MessagesListAdapter(Context context, List navDrawerItems) { this.context = context; this.messagesItems = navDrawerItems; } @Override public int getCount() { return messagesItems.size(); } @Override public Msg getItem(int position) { return messagesItems.get(position); } @Override public long getItemId(int position) { return position; } @SuppressLint("InflateParams") @Override public View getView(int position, View convertView, ViewGroup parent) { Msg m = messagesItems.get(position); LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (messagesItems.get(position).getleMien()) { convertView = mInflater.inflate(R.layout.list_item_message_right, null); } else { convertView = mInflater.inflate(R.layout.list_item_message_left, null); } TextView lblFrom = (TextView) convertView.findViewById(R.id.lblMsgFrom); TextView txtMsg = (TextView) convertView.findViewById(R.id.txtMsg); txtMsg.setText(m.getMessage()+"\n"+m.getAttach()); lblFrom.setText(m.getDate()+" - "+m.getHeure()); return convertView; } } 

Msg.java

 package eddine.charef.mechalikh....; public class Msg { private String email, message; private boolean leMien; private String attach; private String cle; private String teleAttach; private String heure; private String date; public Msg(String cle,String email, String message,String attach,boolean leMien,String teleAttach,String heure,String date) { this.email = email; this.message = message; this.leMien = leMien; this.attach = attach; this.cle=cle; this.teleAttach = teleAttach; this.heure = heure; this.date=date; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public boolean getleMien() { return leMien; } public void setleMien(boolean leMien) { this.leMien = leMien; } public String getAttach() { return attach ; } public void setAttach(String attach) { this.attach = attach; } public String getCle() { return cle ; } public void setCle(String cle) { this.cle = cle; } public void setTeleAttach(String teleAttach) { this.teleAttach = teleAttach; } public String getTeleAttach() { return teleAttach ; } public void setHeure(String heure) { this.heure = heure; } public String getHeure() { return heure ; } public String getDate() { return date ; } public void setDate(String date) { this.date = date; } } 

Úselo así, en su actividad

  ListView listMsg; ArrayList listMessages; MessagesListAdapter adapter; listMessages = new ArrayList(); listMessages.add(new Msg(cle,email,message,attach....)); adapter = new MessagesListAdapter(this, listMessages); listMsg.setAdapter(adapter); 

Basado en este http://www.androidhive.info/2014/10/android-building-group-chat-app-using-sockets-part-1/

captura de pantalla http://s10.postimg.org/4f24pmp6h/Screenshot_2015_04_01_20_34_56.png

Creé una biblioteca para crear una lista de chat, esto podría ayudar

https://github.com/himanshu-soni/ChatMessageView